概述
基于上一篇的spi 驱动的基础上【S32K146 RT-Thread】(https://www.nxpic.org.cn/module/forum/thread-803087-1-1.html)之 使用SFUD 组件驱动spi flash,我们已经实现了spi10设备驱动,我们使用sfud组件来驱动spi flash。
SFUD (https://github.com/armink/SFUD)是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多,各个 Flash 的规格及命令存在差异, SFUD 就是为了解决这些 Flash 的差异现状而设计,让我们的产品能够支持不同品牌及规格的 Flash,提高了涉及到 Flash 功能的软件的可重用性及可扩展性,同时也可以规避 Flash 缺货或停产给产品所带来的风险。
SFUD 驱动库是个github 的开源项目(https://github.com/armink/SFUD)rt-thread 系统内已经集成了该软件包,我们只需要开启即可使用。
JESD216 SFDP标准产生的背景
随着串行Flash市场不断的扩张,串行Flash的指令、功能和特性也日趋增多,而且各个厂商在串行Flash器件上的功能和特性也无法完全一致。例如,在扇区擦除功能上,支持4kB、32kB、64kB的擦除操作虽然分别有相应的指令,但是不同厂商的器件还是会存在一些指令和功能的差异。为了准确地完成系统的兼容性测试或者是考虑到容量的升级,开发和设计人员需要详细阅读每一份串行Flash的产品规范,了解引脚的分布和定义是否一致,操作所需要用到的功能指令是否完全兼容,从而对底层设备驱动软件做相应的增补和修改,甚至改动到硬件,这无疑给项目的设计、维护和更新带来一些不便。
因此,串行Flash器件迫切需要一个统一规范的功能参数表,可以让开发和设计人员明确地读取到每一个所使用串行Flash的功能和参数特性。JEDEC的新规范JESD216 SFDP就是在这样的一个市场环境下孕育而生的。
以下是SFDP heaed结构软件可以中读取flash的参数信息进行使用
使用SFUD 驱动flash
menuconfig 开启sfud
使用测试命令探测spiflash 发现已经正常探测到16MB的flash。
msh />sf probe spi10
[871) The flash device manufacturer ID is 0xC2, memo ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud.c:
[132) Check SFDP header is OK. The reversion is ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[175) Check JEDEC basic flash parameter header ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[203) JEDEC basic flash parameter table info: ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[204) MSB-LSB 3 2 1 0 ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[207) [0001] 0xFF 0xF1 0x20 0xE5 ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[207) [0002] 0x07 0xFF 0xFF 0xFF ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[207) [0003] 0x6B 0x08 0xEB 0x44 ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[207) [0004] 0xBB 0x04 0x3B 0x08 ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[207) [0005] 0xFF 0xFF 0xFF 0xFE ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[207) [0006] 0xFF 0x00 0xFF 0xFF ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[207) [0007] 0xEB 0x44 0xFF 0xFF ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[207) [0008] 0x52 0x0F 0x20 0x0C ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[207) [0009] 0xFF 0x00 0xD8 0x10 ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[215) 4 KB Erase is supported throughout the de ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[234) Write granularity is 64 bytes or larger. ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[245) Target flash status register is non-volat ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[271) 3-Byte only addressing. ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[305) Capacity is 16777216 Bytes. ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[312) Flash device supports 4KB block erase. Co ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[312) Flash device supports 32KB block erase. C ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[312) Flash device supports 64KB block erase. C ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:
[is 16777216 bytes. ] Found a Macronix flash chip. Size
[849) Flash device reset success. ] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud.c:
[ ] sf_cmd flash device initialized successfully.
[by SPI device spi10 success. ] Probe SPI flash sf_cmd
从log 读取的Parameter Table (0): JEDEC Flash Parameter Tables 和芯片手册的描述是匹配的。
使用测试命令擦除读写验证可以正常操作flash
JESD216 SFDP 规范文档:https://kdocs.cn/l/ce7ApUMAyUE7
想要在RT-Thread平台或社区投放内容?或想参与相关直播活动及赛事?RT-Thread已开放对接窗口,请通过邮件与我们取得联系,期待合作!