|
13.3 Flash存儲(chǔ)器 Flash存儲(chǔ)器又名閃存,也是一種掉電后可以存儲(chǔ)數(shù)據(jù)的存儲(chǔ)器,按主要類型分為NOR Flash和NAND Flash。Flash存儲(chǔ)器在現(xiàn)代電子設(shè)備中扮演者重要角色,廣泛應(yīng)用于手機(jī)、平板。數(shù)碼相機(jī)等消費(fèi)電子產(chǎn)品,以及汽車、工業(yè)控制、航空航天等領(lǐng)域,主流單片機(jī)的程序存儲(chǔ)空間也是Flash。 為了更好的理解Flash,將Flash和EEPROM的主要特點(diǎn)進(jìn)行對(duì)比。 1、相較于EEPROM,Flash存儲(chǔ)器能夠提供較高的存儲(chǔ)密度,容量更大,適合需要大容量存儲(chǔ)的應(yīng)用場(chǎng)景。比如Kingst51開(kāi)發(fā)板上的Flash型號(hào)為W25Q32,是一個(gè)32Mbit大小的Flash存儲(chǔ)器。而24C02的僅有256個(gè)字節(jié),也就是2Kbit存儲(chǔ)空間,存儲(chǔ)空間上是16000倍,價(jià)格上僅2到3倍。 2、相較于EEPROM,Flash存儲(chǔ)器的讀寫速度更快,尤其在讀取速度方面,NOR Flash的讀取速度非常快,適應(yīng)于需要頻繁讀取操作的應(yīng)用。 3、相較于Flash,EEPROM允許按照字節(jié)進(jìn)行寫操作,可以靈活地修改單個(gè)字節(jié)的數(shù)據(jù)。而Flash要修改某個(gè)數(shù)據(jù)前,通常需要對(duì)整個(gè)扇區(qū)(4096字節(jié))進(jìn)行擦除后(整個(gè)扇區(qū)初始化為1)才能重新寫入。因此EEPROM更適合需要頻繁更新數(shù)據(jù)的應(yīng)用場(chǎng)景,而Flash更適合讀寫大量數(shù)據(jù)而不需要頻繁改變數(shù)據(jù)的場(chǎng)景。 4、Flash的讀寫比EEPROM的讀寫略微,用戶每次操作之前需要通知Flash具體操作指令,比如是“讀”還是“寫”,寫的話是“寫寄存器”還是“寫數(shù)據(jù)”。寫之前要先寫使能等等操作。 當(dāng)然這些指令在手冊(cè)里有列表說(shuō)明,每一條指令也都有詳細(xì)解釋,如表13-1所示。
表13-1.jpg (425.78 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:07 上傳
讀Flash流程: 1、檢測(cè)是否“忙”。 2、使能引腳,寫入“讀數(shù)據(jù)”指令。 3、發(fā)送Flash讀數(shù)據(jù)起始地址,需要注意的是W25Q32這顆Flash的存儲(chǔ)空間是32Mbit,即4M字節(jié),因此他的地址是24位地址。 4、根據(jù)當(dāng)前地址讀取相應(yīng)數(shù)量的數(shù)據(jù)。 寫Flash流程: 1、檢測(cè)是否“忙”。 2、使能引腳,寫入“寫使能”指令。 3、發(fā)送“頁(yè)寫”指令。 4、發(fā)送Flash寫數(shù)據(jù)起始地址。 5、連續(xù)發(fā)送要寫入的數(shù)據(jù),寫入到Flash中去。 值得注意的是,如果寫Flash的數(shù)據(jù)牽扯到跨頁(yè)寫入,需要對(duì)跨頁(yè)進(jìn)行操作處理。 寫一個(gè)簡(jiǎn)單的程序,從某一地址讀出連續(xù)的2個(gè)數(shù)據(jù),第一個(gè)字節(jié)加1,第二個(gè)字節(jié)加2,分別重新寫回到flash中去。
1.jpg (148.33 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:07 上傳
2.jpg (239.33 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:07 上傳
3.jpg (219.25 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:07 上傳
4.jpg (37.83 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:07 上傳
flash.c程序的最開(kāi)始把特殊指令和頁(yè)大小、扇區(qū)大小進(jìn)行宏定義。 SPIWrite:將單字節(jié)按照SPI時(shí)序發(fā)送。 SPIRead:按照SPI協(xié)議讀取一個(gè)字節(jié)數(shù)據(jù)。 FlashBusyWait:檢測(cè)Flash是否“忙”狀態(tài)。Flash在跨頁(yè)寫入、扇區(qū)擦除、塊擦除等操作中都需要一定的時(shí)間,這段時(shí)間flash都處于“忙”狀態(tài),讀寫指令均不響應(yīng),因此讀寫之前要使用這個(gè)函數(shù)進(jìn)行“忙”檢測(cè)。 FlashRead:Flash連續(xù)讀數(shù)據(jù)指令。 FlashSectorErase:Flash扇區(qū)擦除。Kingst51開(kāi)發(fā)板所采用的W25Q32這個(gè)Flash最小擦除單位就是扇區(qū)擦除。因此除非擦除后沒(méi)有寫入數(shù)據(jù),否則要改變已經(jīng)寫入的數(shù)據(jù),必須進(jìn)行擦除動(dòng)作,最小擦除單元為扇區(qū)。 FlashPageWrite:由于連續(xù)寫入數(shù)據(jù)有可能遇到跨頁(yè)的情況,本函數(shù)不提供跨頁(yè)判斷,一旦發(fā)現(xiàn)無(wú)法寫入后,將返回寫入的字節(jié)長(zhǎng)度,跨頁(yè)判斷可以在上層應(yīng)用函數(shù)中實(shí)現(xiàn)。 將使用SPI協(xié)議讀寫Flash的時(shí)序用邏輯分析儀抓出來(lái),并且分別用SPI協(xié)議進(jìn)行解析,如圖13-10和13-11所示。
13-10.png (31.8 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:08 上傳
13-10 SPI配置信息
13-11.png (40.22 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:08 上傳
13-11 SPI通信時(shí)序圖 軟件的SPI的配置信息,必須和實(shí)際通信一致,才能正確解析數(shù)據(jù)。除了使用SPI進(jìn)行解析外,由于這是個(gè)flash器件,還可以使用特有的QSPI-flash解析器直接將指令解析出來(lái),如圖13-12和圖13-13所示。
13-12.png (29.55 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:09 上傳
13-12 QSPI-flash配置信息
13-13.png (45.8 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:09 上傳
13-13 QSPI-flash解析結(jié)果 由于程序中存在扇區(qū)擦除操作,扇區(qū)擦除的時(shí)候flash會(huì)一直處于“忙”狀態(tài)無(wú)法響應(yīng)再次寫入,因此程序中間段存在一些忙檢測(cè)波形。將解析結(jié)果導(dǎo)出到excel表格中,截取一部分進(jìn)行觀察,如圖13-14所示,一共403個(gè)字節(jié)的數(shù)據(jù),圖片左側(cè)為前16個(gè)字節(jié),圖片右側(cè)為后17個(gè)字節(jié),中間字節(jié)全部為“忙檢測(cè)”。
13-14左.png (48.88 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:10 上傳
13-14.png (59.21 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:10 上傳
圖13-14 QSPI-flash數(shù)據(jù)導(dǎo)出 從解析的數(shù)據(jù)可以看出,第一個(gè)字節(jié)是讀狀態(tài)寄存器,了解Flash是否在忙,第二個(gè)字節(jié)讀到了0x00,說(shuō)明Flash處于不忙的狀態(tài)。第三個(gè)字節(jié)0x03為讀數(shù)據(jù)命令,第四個(gè)字節(jié)是要讀取0x000000這個(gè)地址的連續(xù)數(shù)據(jù),讀到的2個(gè)字節(jié)數(shù)據(jù)是0x05和0x0B。而后再次進(jìn)行忙檢測(cè),由于剛剛進(jìn)行的是讀操作,所以Flash還是處于不忙的狀態(tài)。然后使用0x06這個(gè)寫使能命令,寫入了0x20指令進(jìn)行了從0x00地址開(kāi)始的單個(gè)扇區(qū)擦除(4096字節(jié))。擦除命令結(jié)束后程序進(jìn)入循環(huán)檢測(cè)flash的“忙”信號(hào),此時(shí)在一段時(shí)間內(nèi),發(fā)送0x05,回復(fù)的都是0x03,說(shuō)明flash都處于忙狀態(tài),一直到解析后數(shù)據(jù)的第398行再次檢測(cè)到0x00的不忙信號(hào),發(fā)送0x06這個(gè)寫使能指令,發(fā)送0x02的頁(yè)寫入指令,從地址0x000000開(kāi)始,寫入的2個(gè)字節(jié)分別為0x06和0x0D。 W25Q32這個(gè)Flash的頁(yè)寫入、扇區(qū)擦除、塊擦除等各種操作所需要的大概時(shí)間在手冊(cè)里都有標(biāo)注,如圖13-15所示。
13-15.png (61.85 KB, 下載次數(shù): 0)
下載附件
2026-5-7 15:10 上傳
13-5 W25Q32時(shí)序要求 13.4練習(xí)題1、掌握 DS18B20的時(shí)序過(guò)程,能夠理解1-wrie總線讀寫的時(shí)序。 2、理解SPI的通信原理,SPI通信過(guò)程的四種模式配置。 3、理解flash存儲(chǔ)器的基本原理和操作方式,能獨(dú)立完成flash的讀寫操作。
|