FLASH在嵌入式開發(fā)是很常用的一種芯片。它是存儲芯片的一種,通過特定的程序可以修改里面的數(shù)據(jù)。FLASH在電子以及半導(dǎo)體領(lǐng)域內(nèi)往往表示Flash Memory的意思,即平時所說的“閃存”,全名叫Flash EEPROM Memory。
FLASH存儲器又稱閃存,它結(jié)合了ROM和RAM的長處,不僅具備電子可擦除可編程(EEPROM)的性能,還可以快速讀取數(shù)據(jù)(NVRAM的優(yōu)勢),使數(shù)據(jù)不會因為斷電而丟失。
1 W25QXX簡介
W25QX系列是串行閃存器件。擦寫周期多達(dá)10W次,可將數(shù)據(jù)保存達(dá)20年之久,支持2.7~3.6V的電壓,支持標(biāo)準(zhǔn)的SPI,還支持雙輸出/四輸出的SPI,最大SPI時鐘可達(dá)80Mhz。
FLASH芯片的內(nèi)存空間一般都是由多個塊組成,而塊又是由扇區(qū)組成。
例如W25Q64就是將8M字節(jié)的容量分為了128個塊,每個塊大小為64K字節(jié),每個塊又可分為16個扇區(qū),每個扇區(qū)4K個字節(jié)。
25Q系列的FLASH最小擦除單位為一個扇區(qū),也就是每次必須擦除4K個字節(jié)。所以,這需要給FLASH開辟一個至少4K的緩存區(qū),這樣必須要求芯片有4K以上的SRAM才能有很好的操作。
2 硬件參數(shù)
硬件參數(shù)比較多,我只挑一些常用的介紹一下,更詳細(xì)的介紹可以查閱芯片手冊。
基本參數(shù) | 說明 |
---|---|
電壓 | 2.7V - 3.6V |
電流 | 4mA活動電流,掉電模式下小于1uA |
通訊方式 | 標(biāo)準(zhǔn)SPI雙路SPI四路SPI |
速率 | 80MHz工作時鐘160MHz等效時鐘(雙路SPI模式下)320MHz等效時鐘(四路SPI模式下) |
引腳號 | 引腳名稱 | I/O | 功能 |
---|---|---|---|
1 | CS | I | 片選輸入 |
2 | DO(IO1) | I/O 數(shù)據(jù)輸出,標(biāo)準(zhǔn)SPI數(shù)據(jù)引腳 (數(shù)據(jù)輸入輸出1)*1 |
|
3 | WP(IO2) | I/O | 寫保護(hù)輸入,低電平有效,拉低時不能寫入數(shù)據(jù) (數(shù)據(jù)輸入輸出2)*2 |
4 | GND | - | 地 |
5 | DI(IO0) | I/O | 數(shù)據(jù)輸入,標(biāo)準(zhǔn)SPI數(shù)據(jù)引腳 (數(shù)據(jù)輸入輸出0)*1 |
6 | CLK | I | 串行時鐘輸入 |
7 | HOLD(IO3) | I/O | 保持輸入,拉低時,DO將處于高阻抗,DI和CLK針上的信號將被忽略,拉高時設(shè)備允許操作 (數(shù)據(jù)輸入輸出3)*2 |
8 | VCC | - | 供電 |
注:IO0和IO1用在標(biāo)準(zhǔn)和雙路SPI模式,IO0到IO3用在四路SPI模式下。如果IO2和IO3不使用,可以硬件拉高。
3 寄存器介紹
我這里只列舉部分跟軟件編程相關(guān)的常用寄存器,更詳細(xì)的介紹可以查閱芯片手冊。。
指令名稱 | 數(shù)值 |
---|---|
制造商設(shè)備ID | 90h |
JEDEC ID | 9Fh |
寫狀態(tài)寄存器 | 01h |
讀狀態(tài)寄存器1 | 05h |
讀狀態(tài)寄存器2 | 35h |
讀數(shù)據(jù) | 03h |
寫使能 | 06h |
寫失能 | 04h |
扇區(qū)擦除(4KB) | 20h |
全片擦除 | C7h |
頁編程 | 02h |
4 編程相關(guān)
當(dāng)我們要使用MCU來讀寫flash芯片的時候,需要用到spi通訊,這里面有幾個比較容易踩的坑。
1、WP和HOLD引腳
如果使用標(biāo)準(zhǔn)4線spi通訊,要注意WP和HOLD引腳的狀態(tài),WP拉低時不能寫入數(shù)據(jù),HOLD拉低時,DO將處于高阻抗,DI和CLK針上的信號將被忽略。因此,如果不使用4路spi的話,WP和HOLD引腳可以直接通過硬件拉高,也可以通過MCU的GPIO拉高。否則,懸空或者拉低都會影響數(shù)據(jù)的寫入。
2、連續(xù)寫入時需要注意分區(qū)
flash一次最大可編輯256字節(jié)。flash內(nèi)存可以分成多個頁,每頁256個字節(jié),我們在使用spi寫入flash時最多只能一次寫入一頁數(shù)據(jù),并且不能跨頁寫入。因此,當(dāng)我們需要連續(xù)寫入超過一頁數(shù)據(jù)時,需要注意把spi通訊分成多次。同樣的,寫入時也不能跨扇區(qū)寫入。
3、flash寫入前需要先擦除
flash寫入時是按bit操作的,只能把1改成0,只有擦除才能把0變成1,因此,如果不擦除直接寫入的話就會變成或運(yùn)算,最終存儲的數(shù)據(jù)可能跟寫入的數(shù)據(jù)不一致。
4、擦除的最小單位是扇區(qū)(4K字節(jié))
flash不能只單獨(dú)擦除某一個寄存器,最少也是4096字節(jié)。如果某一個扇區(qū)原本保存了一些重要數(shù)據(jù),然后你又需要從這個扇區(qū)的中間位置添加一些新的數(shù)據(jù),這個時候需要注意在擦除前要先把原有保存的數(shù)據(jù)讀出來,擦除后再把舊的數(shù)據(jù)和新的數(shù)據(jù)寫進(jìn)去,不然直接擦除的話會把原有的數(shù)據(jù)擦掉。
結(jié)束語
好了,關(guān)于W25QXX系列FLASH的介紹就講到這里了,因為關(guān)于這個芯片的資料網(wǎng)上有很多講解教程,因此本文只是挑了一些重點(diǎn)來講,更詳細(xì)的內(nèi)容可以查閱相關(guān)的資料,如果有哪里不懂又找不到的話也可以在評論區(qū)留言或者私信給我。