flash芯片測試

   flash操作不同於sram,sram類似於在使用ram ip核(quartus/vivado)時生成的模塊直接對存儲操作,flash操作都是基於控制器的指令來的。flash在編程(寫數據)之前是需要對芯片擦除(也就是寫1),因爲編程操作只能把1變成0,而不能把原本是0的位變成1。

   基本的命令:擦除命令/編程命令/讀取命令(讀取命令分爲讀取數據和讀取寄存器)

   基本操作格式:命令+[地址]+[數據]       //地址和數據是可選的
  

   flash芯片擦除時按扇區來劃分的;讀取時一般芯片內部有一個buffer(大概幾十個字節的大小),也就是說一般每次讀取就是這個buffer的大小;program也是一樣有一個buffer(具體的大小取決於各個芯片)。

   flash芯片還有一些寫保護功能(本測試不做驗證,測試主要這對操作接口)。

-------------------------------------------------------------

   flash分類:

    並口flash

    串行flash

    norflash:容量小但速度快(這裏的速度指讀取的速度,尤其並口flash的讀取和ram讀取幾乎沒有區別)/一般用於存儲系統,啓動代碼,bios之類

    nandflash:容量大但速度低於nor/一般用於應用存儲數據

-----------------------------------------------------------------

 測試使用的cypress的flash芯片:以S25FS128S/S25FS256S爲例

扇區劃分模式,選擇最簡單的一種,便於操作:

  注意: 該芯片讀取時可以一個字節一個字節自累加讀取模式(可以一直讀完整個芯片再回到地址0繼續循環下去):

  另一種QuadIO  Read一定要burst模式,也就是隻能一組一組讀取,地址在組內累加循環。

  cypress的芯片一般都有模型可以下載:https://www.cypress.com/verilog/s25fs256s-verilog

  這個芯片有多種讀寫接口模式:命令+地址+數據

  1-1-1(默認模式/基本的spi模式)/1-4-4(QuadIO模式)/4-4-4(QPI模式)    

【芯片讀取數據時還可支持ddr操作,取決於具體的讀取命令】

【QPI模式和QuadIO模式的區別:兩者都需要開啓四線操作(CR1V[1]),但QPI模式還要開啓(CR2V[6]);

   需要說明,CR2V[6]一旦assert會同時assert CR1V[1],CR1V[1] assert之後除非復位否則不會變爲0】

  芯片的工作狀態由4個8bits配置寄存器控制:CR1V/CR2V/CR3V/CR4V

 所有操作要通過SR1V狀態寄存的查詢結果作爲判斷成功結束的依據:

-------------------------------------------------------------

  注意:spi模式io用了兩個,qpi/quadio是4個。

  注意:片選信號csn需要提前且滯後時鐘信號clk至少一個時鐘週期。

-------------------------------------------------------------

以對一個扇區的操作來驗證flash芯片的基本功能,操作流程:

   1、上電延時(等待芯片復位)->

   2、設置工作模式(使能4字節模式)-> 1-1-1(SPI)

   3、讀取配置寄存器的默認值(驗證基本的讀取功能及芯片的工作狀態)-> 1-1-1(SPI)

   4、寫入配置寄存器(需要注意此步驟之前需要先執行寫使能操作/否則操作不成功)-> 1-1-1(SPI)

   5、在新配置的模式下讀取芯片id(驗證當前設置是否成功)-> 4-4-4(QPI)

   6、芯片指定扇區擦除-> 4-4-4(QPI)

   7、第一次讀取驗證-> 4-4-4(QPI/SDR)

   8、指定扇區編程->  4-4-4(QPI)

   9、指定扇區讀取及驗證-> 1-4-4(QaudIO/DDR)

   10、進入芯片低功耗模式(測試完成)(1-1-1/SPI)

整個測試代碼分爲兩部分:

  底層的接口驅動(完成讀寫時序)+測試狀態機(完成測試流程)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章