1.W25Q128 介紹
當我們有比較多的數據需要掉電存儲時,上一篇文章所介紹的 24C02 (256個字節EEPROM)就不夠了。此時我們會用到另外一種類型的存儲器,即 Flash。比如具有 SPI 接口的 W25Q128。這顆小晶片雖然也只有簡單的 8 個引腳,但存儲容量卻達到了128M-bit,也就是 16M 字節,同時它的讀寫速度可以達到 66MB/S。但是由於 STM32F030 不支持 Quad/Dual SPI,只能以標準 SPI 方式讀寫,所以速度會低一些。以下是 W25Q128 的主要特點:
a.133MHz SPI Clock。
b.10萬次擦寫壽命,20年數據保持時間。
c.每顆具有64-Bit唯一序列號 Unique ID。
d.每次可以寫入 1 到 256 字節數據。
e.寫之前需要對目的地址所在扇區進行擦除操作。
( Winbond W25Q128 datasheet )
我們通過以下連線使 W25Q128 連至 STM32F030 的 SPI1:
W25Q128 STM32F030
Pin 1 /CS PA4 也可以用其它 GPIO 引腳
Pin 2 DO PA6 SPI1_MISO
Pin 3 /WP ( VCC )
Pin 4 GND ( GND )
Pin 5 DI PA7 SPI1_MOSI
Pin 6 CLK PA5 SPI1_SCK
Pin 7 /HOLD or /RESET ( VCC )
Pin 8 VCC ( VCC )
2.代碼
代碼的開發如果想提高效率,一個方法就是充分利用前人的成果,而不是自己一再的去造輪子。對於W25Q128 我們可以從Github上找到驅動代碼:https://github.com/nimaltd/w25qxxGNU General Public License v3.0我們把它集成進SPI例程裡,完成 W25Q128 的讀寫功能。Step 1,下載後把解壓的文件夾 w25qxx-master 放在 STM32Cube_FW_F0_V1.11.0DriversBSPComponents
Step 2, 我們用 Keil 打開下面這個工程:STM32Cube_FW_F0_V1.11.0ProjectsSTM32F030R8-NucleoExamplesSPISPI_FullDuplex_ComPollingMDK-ARMProject.uvprojx在項目(STM32F030R8-Nucleo)上點滑鼠右鍵,選擇Add Group...新建 Group 並改名稱為 DriversBSPComponentsw25qxx-master