版主,我尝试了下发现可以实现,基于W25Q32和《基于STM32H7的RL-FlashFS V6.X驱动SPI Flash》工程为例,将SPI Flash前2MB分配为F0:,后2MB分配为F1:,步骤如下:
1、将原来的驱动文件W25QXX.c拷贝一份重命名为W25QXX_1.c,将W25QXX.h拷贝一份重命名为W25QXX_1.h。W25QXX_1.c中的宏DRIVER_FLASH_NUM的值更改为1.。并将W25QXX_1.c中包含的头文件更改为W25QXX_1.h。
2、W25QXX.h和W25QXX_1.h中更改宏NOR_SECTOR_COUNT的值为512.
3、W25QXX_1.h中增加定义宏如下,从0x0200000开始:
[C] 纯文本查看 复制代码 #define FLASH1_SECTORS \
ARM_FLASH_SECTOR_INFO(0x0200000,0x1000), /* Sector Size 4kB */ \
ARM_FLASH_SECTOR_INFO(0x0201000,0x1000), /* Sector Size 4kB */ \
......
ARM_FLASH_SECTOR_INFO(0x03FE000,0x1000), /* Sector Size 4kB */ \
ARM_FLASH_SECTOR_INFO(0x03FF000,0x1000), /* Sector Size 4kB */
4、W25QXX_1.c中增加如下定义:
[C] 纯文本查看 复制代码 /* Sector Information */
#ifdef FLASH1_SECTORS
static ARM_FLASH_SECTOR FLASH_SECTOR_INFO[NOR_SECTOR_COUNT] = {
FLASH1_SECTORS
};
#else
#define FLASH_SECTOR_INFO NULL
#endif
/* Flash Information */
static ARM_FLASH_INFO FlashInfo = {
FLASH_SECTOR_INFO,
NOR_SECTOR_COUNT,
NOR_SECTOR_SIZE,
NOR_PAGE_SIZE,
NOR_PROGRAM_UNIT,
NOR_ERASED_VALUE,
#if (ARM_FLASH_API_VERSION > 0x201U)
{ 0U, 0U, 0U }
#endif
};
5、W25QXX.c和W25QXX_1.c中更改变量 Driver Capabilities如下,取消擦除全片:
[C] 纯文本查看 复制代码 /* Driver Capabilities */
static const ARM_FLASH_CAPABILITIES DriverCapabilities = {
0, /* event_ready */
0, /* data_width = 0:8-bit, 1:16-bit, 2:32-bit */
0, /* erase_chip */
#if (ARM_FLASH_API_VERSION > 0x200U)
0U /* reserved */
#endif
};
5、效果如下图:
|