下面將對(duì)W25Q128的常用操作方式進(jìn)行介紹。
1、只發(fā)送指令——寫(xiě)使能、寫(xiě)失能
寫(xiě)使能是指狀態(tài)寄存器中的WEL位置1(發(fā)送寫(xiě)使能指令后硬件自動(dòng)設(shè)置),失能就是清零操作。在發(fā)送頁(yè)寫(xiě),扇區(qū)擦除,塊擦除,片擦除,寫(xiě)狀態(tài)寄存器,擦寫(xiě)安全寄存器指令之前,必須先等待WEL 位置1 ,這些操作完成后,WEL會(huì)自動(dòng)硬件清零。寫(xiě)失能是將狀態(tài)寄存器中的WEL軟件清零,寫(xiě)失能這個(gè)操作很少用到,大多數(shù)情況都是硬件自動(dòng)完成。
根據(jù)SPI的操作時(shí)序,將指令(06h或04h)通過(guò)DI(MOSI)發(fā)送給W25Q128,期間DO(MISO)處于高阻狀態(tài),時(shí)序圖如圖6-11和圖6-12所示。
圖6-13 寫(xiě)使能時(shí)序
圖6-14 寫(xiě)失能時(shí)序
2、發(fā)送指令,返回?cái)?shù)據(jù)——讀狀態(tài)寄存器
讀狀態(tài)寄存器指令允許讀8位狀態(tài)寄存器位。讀狀態(tài)寄存指令在任何時(shí)間都可使用,可以用05H/35H/15H分別讀取W25Q128的三個(gè)狀態(tài)寄存器。實(shí)際上用的最多的只有05H讀取狀態(tài)寄存器1的第0位(BUSY位),用來(lái)查看相應(yīng)指令周期是否結(jié)束,芯片是否可以接收新的指令。
根據(jù)SPI的操作時(shí)序,將指令05H通過(guò)DI發(fā)送,而后通過(guò)DO讀回狀態(tài)寄存器的值,時(shí)序圖如圖6-15所示。注意通常我們只讀一個(gè)字節(jié),時(shí)序圖后續(xù)字節(jié)為芯片備用擴(kuò)展的。
圖6-15 讀狀態(tài)寄存器時(shí)序圖
3、發(fā)送指令+數(shù)據(jù)——寫(xiě)狀態(tài)寄存器
寫(xiě)狀態(tài)寄存器的作用主要實(shí)現(xiàn)對(duì)Flash某些區(qū)域的數(shù)據(jù)或者狀態(tài)保護(hù),一旦寫(xiě)入保護(hù)狀態(tài),在狀態(tài)解除之前,這塊區(qū)域是禁止寫(xiě)入和擦除的。這部分在本教程中沒(méi)有應(yīng)用,有興趣的讀者可以根據(jù)時(shí)序圖和手冊(cè)資料了解一下,時(shí)序圖如圖6-16所示。
圖6-16 寫(xiě)狀態(tài)寄存器時(shí)序圖
4、讀數(shù)據(jù)
讀數(shù)據(jù)指令允許從存儲(chǔ)器讀一個(gè)字節(jié)和連續(xù)多個(gè)字節(jié)。
首先要確認(rèn)BUSY位為0,然后根據(jù)SPI的操作時(shí)序,首先寫(xiě)入指令代碼03H,而后緊跟3個(gè)字節(jié)的地址。當(dāng)W25Q128收到地址后,會(huì)將相應(yīng)地址處的數(shù)據(jù)根據(jù)SPI時(shí)序輸出來(lái);如果連續(xù)讀多個(gè)字節(jié),那每經(jīng)過(guò)8個(gè)時(shí)鐘周期地址自動(dòng)加1,并且輸出相應(yīng)數(shù)據(jù),一直到CS拉高,時(shí)序圖如圖6-17所示。
圖6-17 讀數(shù)據(jù)時(shí)序圖
5、寫(xiě)入數(shù)據(jù)(頁(yè)編程)
W25Q128一次寫(xiě)入的數(shù)據(jù)只能小于等于256字節(jié),并且不能一次性跨頁(yè)寫(xiě)入。當(dāng)遇到跨頁(yè)時(shí),應(yīng)先寫(xiě)滿(mǎn)一頁(yè),等待BUSY位為0,再次往下一頁(yè)寫(xiě)。(如果寫(xiě)滿(mǎn)一頁(yè)繼續(xù)往下寫(xiě)則會(huì)跳到緩存區(qū)的頁(yè)首位置開(kāi)始寫(xiě),之前數(shù)據(jù)會(huì)被覆蓋)
在寫(xiě)入數(shù)據(jù)之前,該頁(yè)必須被擦除過(guò),然后根據(jù)寫(xiě)入地址和寫(xiě)入的字節(jié)數(shù)計(jì)算是否跨頁(yè)以及頁(yè)數(shù)。根據(jù)SPI的操作時(shí)序,首先通過(guò)寫(xiě)使能將WEL置1,然后寫(xiě)入指令代碼02H,而后緊跟著3個(gè)字節(jié)的地址,而后接著發(fā)送要存儲(chǔ)的數(shù)據(jù),時(shí)序圖如圖6-18所示。
圖6-18 頁(yè)編程時(shí)序圖
寫(xiě)入數(shù)據(jù)完畢后,W25Q128將數(shù)據(jù)從緩存搬移到非易失區(qū)所消耗的時(shí)間要了解一下,在手冊(cè)的84頁(yè)有介紹,大概是(30+(x-1)*2.5)us ~ (50+(x-1)*12) us之間(x為寫(xiě)入的字節(jié)),搬移完成后,WEL位會(huì)自動(dòng)清零,BUSY自動(dòng)清零。
6、扇區(qū)擦除、塊擦除
可以使用20H、52H和D8H分別對(duì)扇區(qū)擦除、32K塊擦除和64K塊擦除。根據(jù)SPI的操作時(shí)序,在寫(xiě)入擦除指令之前首先通過(guò)寫(xiě)使能將WEL置1,然后寫(xiě)入指令代碼20H/52H/D8H中的一個(gè),而后緊跟著3個(gè)字節(jié)的擦除首地址。
地址發(fā)送完畢后,必須將CS拉高,擦除指令才開(kāi)始執(zhí)行,并且需要一定的擦除時(shí)間,在這個(gè)時(shí)間內(nèi),只能讀狀態(tài)寄存器,其他操作均不能進(jìn)行。扇區(qū)、32K塊和64K的擦除典型時(shí)間分別是100ms、120ms和150ms,最大時(shí)間分別是400ms、1.6s、2s。當(dāng)擦除完成,WEL和BUSY位自動(dòng)清零,就可以再次接收新的操作指令,時(shí)序圖如圖6-19所示。
圖6-19 扇區(qū)和塊擦除時(shí)序圖
7、全片擦除
可以使用C7H/60H指令對(duì)整片進(jìn)行擦除操作。根據(jù)SPI的操作時(shí)序,在寫(xiě)入擦除指令之前首先通過(guò)寫(xiě)使能將WEL置1,然后寫(xiě)入指令代碼C7H或者60H,發(fā)送完畢拉高CS后,擦除指令開(kāi)始執(zhí)行。
整片擦除過(guò)程中,只能讀狀態(tài)寄存器,其他操作均不能進(jìn)行。整片擦除的典型時(shí)間是40秒,最大時(shí)間是200秒。當(dāng)擦除完成后,WEL和BUSY位自動(dòng)清零,就可以再次接收新的操作指令,時(shí)序圖如圖6-20所示。
圖6-20 全片擦除時(shí)序圖
接下來(lái)根據(jù)W25Q128的時(shí)序編寫(xiě)驅(qū)動(dòng)程序,該驅(qū)動(dòng)文件可以驅(qū)動(dòng)W25Qxx系列的Flash存儲(chǔ)芯片,不同型號(hào)的ID不同,W25Qxx初始化時(shí)會(huì)通過(guò)判斷芯片ID來(lái)識(shí)別是否通信成功。
6.9.3 串口控制Flash讀寫(xiě)實(shí)驗(yàn)
由于Flash與EEPROM實(shí)現(xiàn)的功能類(lèi)似,本節(jié)通過(guò)改寫(xiě)串口發(fā)送指令控制EEPROM讀寫(xiě)數(shù)據(jù)的例程,設(shè)計(jì)了串口發(fā)送指令控制Flash讀寫(xiě)。幫助大家更好的體會(huì)串口實(shí)用例程以及Flash讀寫(xiě)流程。
Flash讀數(shù)據(jù)指令格式:“f-read 地址 字節(jié)長(zhǎng)度”,其中地址范圍為0~1610241024,e2read、地址、字節(jié)長(zhǎng)度之間由空格隔開(kāi),比如從地址1開(kāi)始讀取5字節(jié)數(shù)據(jù):f-read 1 5。單片機(jī)收到指令后執(zhí)行多字節(jié)讀操作,通過(guò)串口助手返回讀出的數(shù)據(jù)。
Flash寫(xiě)數(shù)據(jù)指令格式:“f-write 地址 數(shù)據(jù)”,地址范圍為0~1610241024,f-write、地址、數(shù)據(jù)之間同樣由空格隔開(kāi),比如從地址1開(kāi)始寫(xiě)入hello:f-write 1 hello。單片機(jī)收到指令后執(zhí)行多字節(jié)寫(xiě)操作,寫(xiě)入成功后通過(guò)串口助手返回“f-write done.”
如果發(fā)送指令格式錯(cuò)誤,返回“bad parameter.”,如果發(fā)送指令錯(cuò)誤,將返回發(fā)送的數(shù)據(jù)。由于程序中設(shè)定的串口接收和發(fā)送緩沖區(qū)最大為256字節(jié),因此該實(shí)驗(yàn)單次讀取或者寫(xiě)入的字節(jié)數(shù)應(yīng)小于256字節(jié)。
106.10 邏輯分析儀測(cè)試SPI信號(hào)
當(dāng)進(jìn)行SPI通信出現(xiàn)異常時(shí),可以通過(guò)邏輯分析儀進(jìn)行通信時(shí)序上的問(wèn)題查找,如圖6-18所示。從圖上可以看出SCK空閑時(shí)是高電平,即CPOL=1;從CLK的跳沿箭頭上可以看出,是后沿讀取數(shù)據(jù),即CPHA=1。數(shù)據(jù)分析可以通過(guò)MISO和MOSI解析后的數(shù)據(jù)判斷出。通過(guò)分析儀的數(shù)據(jù)解析功能,可以直觀看到STM32與Flash之間的通信數(shù)據(jù),從而進(jìn)一步確定問(wèn)題所在。
圖6-21 Kingst LA5016邏輯分析儀解析SPI數(shù)據(jù)
-
單片機(jī)
+關(guān)注
關(guān)注
6037文章
44558瀏覽量
635394 -
SPI
+關(guān)注
關(guān)注
17文章
1706瀏覽量
91597 -
EEPROM
+關(guān)注
關(guān)注
9文章
1020瀏覽量
81613 -
IIC
+關(guān)注
關(guān)注
11文章
300瀏覽量
38339 -
uart
+關(guān)注
關(guān)注
22文章
1235瀏覽量
101404
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論