flash芯片测试
?? flash操作不同于sram,sram類似于在使用ram ip核(quartus/vivado)時(shí)生成的模塊直接對(duì)存儲(chǔ)操作,flash操作都是基于控制器的指令來的。flash在編程(寫數(shù)據(jù))之前是需要對(duì)芯片擦除(也就是寫1),因?yàn)榫幊滩僮髦荒馨?變成0,而不能把原本是0的位變成1。
?? 基本的命令:擦除命令/編程命令/讀取命令(讀取命令分為讀取數(shù)據(jù)和讀取寄存器)
?? 基本操作格式:命令+[地址]+[數(shù)據(jù)]?????? //地址和數(shù)據(jù)是可選的
??
?? flash芯片擦除時(shí)按扇區(qū)來劃分的;讀取時(shí)一般芯片內(nèi)部有一個(gè)buffer(大概幾十個(gè)字節(jié)的大小),也就是說一般每次讀取就是這個(gè)buffer的大小;program也是一樣有一個(gè)buffer(具體的大小取決于各個(gè)芯片)。
?? flash芯片還有一些寫保護(hù)功能(本測(cè)試不做驗(yàn)證,測(cè)試主要這對(duì)操作接口)。
-------------------------------------------------------------
?? flash分類:
??? 并口flash
??? 串行flash
??? norflash:容量小但速度快(這里的速度指讀取的速度,尤其并口flash的讀取和ram讀取幾乎沒有區(qū)別)/一般用于存儲(chǔ)系統(tǒng),啟動(dòng)代碼,bios之類
??? nandflash:容量大但速度低于nor/一般用于應(yīng)用存儲(chǔ)數(shù)據(jù)
-----------------------------------------------------------------
?測(cè)試使用的cypress的flash芯片:以S25FS128S/S25FS256S為例
扇區(qū)劃分模式,選擇最簡(jiǎn)單的一種,便于操作:
? 注意: 該芯片讀取時(shí)可以一個(gè)字節(jié)一個(gè)字節(jié)自累加讀取模式(可以一直讀完整個(gè)芯片再回到地址0繼續(xù)循環(huán)下去):
? 另一種QuadIO? Read一定要burst模式,也就是只能一組一組讀取,地址在組內(nèi)累加循環(huán)。
? cypress的芯片一般都有模型可以下載:https://www.cypress.com/verilog/s25fs256s-verilog
? 這個(gè)芯片有多種讀寫接口模式:命令+地址+數(shù)據(jù)
? 1-1-1(默認(rèn)模式/基本的spi模式)/1-4-4(QuadIO模式)/4-4-4(QPI模式)????
【芯片讀取數(shù)據(jù)時(shí)還可支持ddr操作,取決于具體的讀取命令】
【QPI模式和QuadIO模式的區(qū)別:兩者都需要開啟四線操作(CR1V[1]),但QPI模式還要開啟(CR2V[6]);
?? 需要說明,CR2V[6]一旦assert會(huì)同時(shí)assert CR1V[1],CR1V[1] assert之后除非復(fù)位否則不會(huì)變?yōu)?】
? 芯片的工作狀態(tài)由4個(gè)8bits配置寄存器控制:CR1V/CR2V/CR3V/CR4V
?所有操作要通過SR1V狀態(tài)寄存的查詢結(jié)果作為判斷成功結(jié)束的依據(jù):
-------------------------------------------------------------
? 注意:spi模式io用了兩個(gè),qpi/quadio是4個(gè)。
? 注意:片選信號(hào)csn需要提前且滯后時(shí)鐘信號(hào)clk至少一個(gè)時(shí)鐘周期。
SDR 時(shí)序:
DDR時(shí)序:
關(guān)于寫使能是否在每次的擦除、編寫前都需要執(zhí)行一次:
雖然在寄存器定義里只說和WREN\WRDI命令有關(guān),但實(shí)際還是需要在每次執(zhí)行擦寫前進(jìn)行一次寫使能的。
S25FS128S:
S70FS01GS:
-------------------------------------------------------------
以對(duì)一個(gè)扇區(qū)的操作來驗(yàn)證flash芯片的基本功能,操作流程:
?? 1、上電延時(shí)(等待芯片復(fù)位)->
?? 2、設(shè)置工作模式(使能4字節(jié)模式)-> 1-1-1(SPI)
?? 3、讀取配置寄存器的默認(rèn)值(驗(yàn)證基本的讀取功能及芯片的工作狀態(tài))-> 1-1-1(SPI)
?? 4、寫入配置寄存器(需要注意此步驟之前需要先執(zhí)行寫使能操作/否則操作不成功)-> 1-1-1(SPI)
?? 5、在新配置的模式下讀取芯片id(驗(yàn)證當(dāng)前設(shè)置是否成功)-> 4-4-4(QPI)
?? 6、芯片指定扇區(qū)擦除-> 4-4-4(QPI)
?? 7、第一次讀取驗(yàn)證-> 4-4-4(QPI/SDR)
?? 8、指定扇區(qū)編程->? 4-4-4(QPI)
?? 9、指定扇區(qū)讀取及驗(yàn)證-> 1-4-4(QaudIO/DDR)
?? 10、進(jìn)入芯片低功耗模式(測(cè)試完成)(1-1-1/SPI)
整個(gè)測(cè)試代碼分為兩部分:
? 底層的接口驅(qū)動(dòng)(完成讀寫時(shí)序)+測(cè)試狀態(tài)機(jī)(完成測(cè)試流程)
參考:
【接口時(shí)序】5、QSPI Flash的原理與QSPI時(shí)序的Verilog實(shí)現(xiàn) - jgliu - 博客園
cypress/nxp 驅(qū)動(dòng)參考:
https://www.cypress.com/products/serial-nor-flash-memory#tabs-0-bottom_side-5
總結(jié)
- 上一篇: kali2022.2无线网络WiFi破解
- 下一篇: Linux中命令行进行WiFi连接(零基