QSPI HAL 提供用于訪問 qspi 外設(shè)寄存器的基本 API,它用作 A0 上的閃存(flash)控制器。 有 2 級 hal 接口,bf0_hal_qspi 和 bf0_hal_qspi_ex。
Hal_qspi 用于訪問硬件寄存器的接口,只包含很少的邏輯,對于 XIP 模式,這個(gè)文件應(yīng)該放在 RAM 中。 Hal_qspi_ex 用于基本 NAND/NOR 功能包裝器,包括頁面讀取/頁面寫入/扇區(qū)擦除和一些其他功能。
主要功能包括:
?- 最多支持 4 個(gè)實(shí)例(其中QSPI4可掛載到LCPU)。
?- 可支持NAND/NOR/PSRAM。
?- DMA 支持。
?- 通過寄存器命令表支持多芯片。
內(nèi)存地址映射:
- QSPI1: memory from 0x10000000 to 0x11FFFFFF(total 32MB).
- QSPI2: memory from 0x64000000 to 0x67FFFFFF(total 64MB).
- QSPI3: memory from 0x68000000 to 0x6FFFFFFF(total 128MB).
- QSPI4: memory from 0x12000000 to 0x13FFFFFF(total 32MB).
使用 QSPI HAL 驅(qū)動(dòng)程序
QSPI 可用于控制 NOR-FLASH、NAND-FLASH、4-LINE PSRAM。 以下是 NOR-FLASH 的示例:
spi_flash_register_cmd();
res =
HAL_FLASH_Init(&(spi_flash_handle[0]), &flash_cfg, &spi_flash_dma_handle[0], &flash_dma, BSP_GetFlash1DIV());
return error;
res = nor_sector_erase(hflash, addr);
if (res < 0)
return error;
res = nor_write_page(hflash, addr, buf, size);
if (res != size)
return error;
res = nor_read_rom(hflash, addr, buf, size);
...
以下是 NAND-FLASH 的示例:
spi_flash_register_cmd();
res =
HAL_FLASH_Init(&(spi_flash_handle[1]), &flash_cfg, &spi_flash_dma_handle[1], &flash_dma, BSP_GetFlash2DIV());
return error;
res = nand_erase_block(hflash, addr);
if (res < 0)
return error;
res = nand_write_page_algn(hflash, addr, buf, size);
if (res != size)
return error;
res = nand_read_page(hflash, addr, buf, size);
...