概述
基于上一篇的spi 驅(qū)動的基礎(chǔ)上【S32K146 RT-Thread】之 使用SFUD 組件驅(qū)動spi flash,我們已經(jīng)實現(xiàn)了spi10設(shè)備驅(qū)動,我們使用sfud組件來驅(qū)動spi flash。
SFUD 是一款開源的串行 SPI Flash 通用驅(qū)動庫。由于現(xiàn)有市面的串行 Flash 種類居多,各個 Flash 的規(guī)格及命令存在差異, SFUD 就是為了解決這些 Flash 的差異現(xiàn)狀而設(shè)計,讓我們的產(chǎn)品能夠支持不同品牌及規(guī)格的 Flash,提高了涉及到 Flash 功能的軟件的可重用性及可擴展性,同時也可以規(guī)避 Flash 缺貨或停產(chǎn)給產(chǎn)品所帶來的風(fēng)險。
SFUD 驅(qū)動庫是個github 的開源項目rt-thread 系統(tǒng)內(nèi)已經(jīng)集成了該軟件包,我們只需要開啟即可使用。
JESD216 SFDP標(biāo)準(zhǔn)產(chǎn)生的背景
隨著串行Flash市場不斷的擴張,串行Flash的指令、功能和特性也日趨增多,而且各個廠商在串行Flash器件上的功能和特性也無法完全一致。例如,在扇區(qū)擦除功能上,支持4kB、32kB、64kB的擦除操作雖然分別有相應(yīng)的指令,但是不同廠商的器件還是會存在一些指令和功能的差異。為了準(zhǔn)確地完成系統(tǒng)的兼容性測試或者是考慮到容量的升級,開發(fā)和設(shè)計人員需要詳細(xì)閱讀每一份串行Flash的產(chǎn)品規(guī)范,了解引腳的分布和定義是否一致,操作所需要用到的功能指令是否完全兼容,從而對底層設(shè)備驅(qū)動軟件做相應(yīng)的增補和修改,甚至改動到硬件,這無疑給項目的設(shè)計、維護和更新帶來一些不便。
因此,串行Flash器件迫切需要一個統(tǒng)一規(guī)范的功能參數(shù)表,可以讓開發(fā)和設(shè)計人員明確地讀取到每一個所使用串行Flash的功能和參數(shù)特性。JEDEC的新規(guī)范JESD216 SFDP就是在這樣的一個市場環(huán)境下孕育而生的。
以下是SFDP heaed結(jié)構(gòu)軟件可以中讀取flash的參數(shù)信息進行使用


使用SFUD 驅(qū)動flash
menuconfig 開啟sfud

使用測試命令探測spiflash 發(fā)現(xiàn)已經(jīng)正常探測到16MB的flash。
msh />sf probe spi10[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud.c:871) The flash device manufacturer ID is 0xC2, memo[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:132) Check SFDP header is OK. The reversion is[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:175) Check JEDEC basic flash parameter header[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:203) JEDEC basic flash parameter table info:[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:204) MSB-LSB 3 2 1 0[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:207) [0001] 0xFF 0xF1 0x20 0xE5[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:207) [0002] 0x07 0xFF 0xFF 0xFF[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:207) [0003] 0x6B 0x08 0xEB 0x44[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:207) [0004] 0xBB 0x04 0x3B 0x08[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:207) [0005] 0xFF 0xFF 0xFF 0xFE[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:207) [0006] 0xFF 0x00 0xFF 0xFF[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:207) [0007] 0xEB 0x44 0xFF 0xFF[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:207) [0008] 0x52 0x0F 0x20 0x0C[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:207) [0009] 0xFF 0x00 0xD8 0x10[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:215) 4 KB Erase is supported throughout the de[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:234) Write granularity is 64 bytes or larger.[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:245) Target flash status register is non-volat[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:271) 3-Byte only addressing.[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:305) Capacity is 16777216 Bytes.[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:312) Flash device supports 4KB block erase. Co[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:312) Flash device supports 32KB block erase. C[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud_sfdp.c:312) Flash device supports 64KB block erase. C[I/SFUD] Found a Macronix flash chip. Size is 16777216 bytes.[D/SFUD] (D:\work\andeyqi_rtthread\rt-thread\components\drivers\spi\sfud\src\sfud.c:849) Flash device reset success.[I/SFUD] sf_cmd flash device initialized successfully.[I/SFUD] Probe SPI flash sf_cmd by SPI device spi10 success.
從log 讀取的Parameter Table (0): JEDEC Flash Parameter Tables和芯片手冊的描述是匹配的。


使用測試命令擦除讀寫驗證可以正常操作flash

-
FlaSh
+關(guān)注
關(guān)注
10文章
1668瀏覽量
151007 -
SPI
+關(guān)注
關(guān)注
17文章
1784瀏覽量
94807 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1371瀏覽量
41533 -
SFUD
+關(guān)注
關(guān)注
0文章
5瀏覽量
1127
發(fā)布評論請先 登錄
RT-Thread審核團招募: 深度參與開源RTOS社區(qū)治理與演進

如何在S32K146中實現(xiàn)以下功能?
如何使用S32 Design Studio for ARM將自定義數(shù)據(jù)放入SRAM中以進行S32K146?
如何將RT-Thread移植到NXP MCUXPressoIDE上

恩智浦FRDM-MCXA153 RT-Thread實踐指南 實現(xiàn)和優(yōu)化RT-Thread的SPI驅(qū)動

RT-Thread上CAN實踐

基于NXP MCXA153 MCU實現(xiàn)RT-Thread的MTD NOR Flash驅(qū)動

基于恩智浦FRDM-MCXA153開發(fā)板實現(xiàn)RT-Thread的ADC驅(qū)動

【S32K146 RT-thread】之 SPI驅(qū)動適配

開源共生 商業(yè)共贏 | RT-Thread 2024開發(fā)者大會報名啟動!

新書發(fā)布——《RT-Thread嵌入式實時操作系統(tǒng)內(nèi)核、驅(qū)動和應(yīng)用開發(fā)技術(shù)》

2024 RT-Thread全球巡回 線下培訓(xùn)火熱來襲!

【好書推薦】RT-Thread設(shè)備驅(qū)動開發(fā)指南

RT-Thread 新里程碑達成——GitHub Star 破萬!

基于 RT-Thread專業(yè)版的EtherCAT主站方案

評論