基於FPGA的關於flash一些學習記錄
使用 winbond 公司的 128Mbit Qual SPI 接口的 FLASH,芯號爲 W25Q128BV, 支持 SPI, Dual SPI 和 Quad SPI 接口方式。在 Fast Read 模式,接口的時鐘速率最大可以達到 104Mhz。FLASH 的容量由 65,536 個 256-byte 的 Page 組成。W25Q128 的擦除方法有三種,一種爲 Sector 擦除(16 個 page,共 4KB),一種爲 Block 擦除(128 個 page,共 32KB), 另一種爲 Chip 擦除(整個擦除)。
△flash 編程芯片手冊解析
SCK上升沿輸入數據,下降沿輸出數據。8bit方式。
SPI數據讀取方式: (READ: 03h)
RDID:讀身份信息 (RDID: 9Fh)
讀設備ID: (READ_ID: 90h)
寫命令使能: (WREN: 06h) (WRDI: 04h)
讀取狀態寄存器:(RDSR: 05h)
寫狀態寄存器:(WRSR: 01h)
對整頁進行數據編程:Page Program (PP: 02h)
扇區擦除:(SE: 20h, D8h)
塊擦除: (BE: C7h, 60h)
命令彙總:
02H是帶地址的命令,所以是可以跟隨地址寫數據的,只是寫數據範圍只在當前頁裏而已。
讀狀態寄存器:Read Status Register (RDSR: 05h)
模式0的讀寫時序:
△測試結果
ID讀取正常。
數據讀寫測試正常。
△實測:
1,首先進行擦除
2,寫入數據
3,讀取數據成功
△flash的內存梳理
用的是256KB的。
1,每個設備有64個扇區,2,每個扇區有1024個頁,3,每個頁有256字節。
對應的地址位置:
設計思路:先只用一個扇區,後面再實現更多的。即地址只有:000000-03ffffh,有1024頁,最多存下262143字節(=256*1024)的數據。262144/9=29127次!
如果只用一頁的話,只有256字節,可存28次。
但要加末尾地址,不然斷電後,不知道寫到哪兒了,所以是一次寫入12字節,256/12=21次。
△說明:
頂層向該層(Flash_top)提供命令數據(共9字節),起始存儲信號(start_pp),讀取flash數據信號(GetAllData)。
此模塊的功能要求是:
①在檢測到start_pp信號後,將9字節命令數據依次存入flash;每接收完STM32數據一次,就會有一個start_pp信號高電平脈衝。
②在接收到GetAllData信號後,將前面存儲在flash中的數據,全部讀出;數據輸出接口擬爲:output [7:0] Flash_Data。
附言:若要等到全部存完纔可讀取flash數據,在上位機視角,不知道該何時才能讀取數據。所以還需實現功能②的要求。
△程序完善:
1,只寫入temp=55是可以的。
2,變化的數寫入與讀取成功。
簡單地梳理了下flash的使用,只做到初步的數據讀寫,後面要用起來,還要更多的研究和測試。