許昌建設(shè)網(wǎng)站哪家好關(guān)鍵詞提取工具app
W25Q64簡(jiǎn)介
W25Qxx系列是一種低成本、小型化、使用簡(jiǎn)單(使用SPI通信協(xié)議)的非易失性(掉電不丟失)存儲(chǔ)器,常用于數(shù)據(jù)存儲(chǔ)、字庫(kù)存儲(chǔ)、固件程序存儲(chǔ)等場(chǎng)景。
【注意】W25Qxx芯片只支持SPI的模式0和模式3。
存儲(chǔ)介質(zhì):Nor Flash(閃存)
時(shí)鐘頻率:80MHz/160MHz(Dual SPI)/320MHz(Quad SPI)
----------拓展----------
上述Dual SPI指雙重SPI,當(dāng)SPI通信只發(fā)送或只接收時(shí)有點(diǎn)浪費(fèi)資源,但W25Qxx芯片的廠商不忍心浪費(fèi),對(duì)SPI做出了一些改進(jìn):在只發(fā)送時(shí),可以同時(shí)用MOSI和MISO發(fā)送;在接收時(shí),也可以同時(shí)用MOSI和MISO發(fā)送。即MOSI和MISO既可以發(fā)送又可以接收,一個(gè)SCK時(shí)鐘同時(shí)發(fā)送或接收兩位數(shù)據(jù)。
Quad SPI指四重SPI,對(duì)于W25Qxx芯片,除了SPI通信引腳,還有兩個(gè)引腳:一個(gè)是WP寫(xiě)保護(hù)、一個(gè)是HOLD。這兩個(gè)引腳,如果不需要的話也可以充當(dāng)數(shù)據(jù)傳輸引腳。(加上MISO和MOSI,一共4個(gè)數(shù)據(jù)傳輸引腳)
有點(diǎn)并行傳輸?shù)囊馑肌?/p>
對(duì)于W25Qxx芯片,共有以下這些型號(hào):
W25Q40 | 4Mbit | 512KByte |
W25Q80 | 8Mbit | 1MByte |
W25Q16 | 16Mbit | 2MByte |
W25Q32 | 32Mbit | 4MByte |
W25Q64 | 64Mbit | 8MByte |
W25Q128 | 128Mbit | 16MByte |
W25Q256 | 256Mbit | 32MByte |
【注意】其存儲(chǔ)容量的地址為24位地址(最大分配16MB),因?yàn)槊總€(gè)字節(jié)都要分配一個(gè)地址,這樣才能找到它們。但對(duì)于W25Q256芯片,24位地址是不夠的。根據(jù)數(shù)據(jù)手冊(cè),其分為3字節(jié)地址模式和4字節(jié)地址模式,在3字節(jié)地址模式下,只能讀寫(xiě)前16MB的數(shù)據(jù);
模塊硬件電路
如上為W25Q64模塊的原理圖,其各引腳功能如下:
引腳 | 功能 |
VCC、GND | 電源(2.7~3.6V) |
CS(SS) | SPI從機(jī)選擇 |
CLK(SCK) | SPI時(shí)鐘 |
DI(MOSI) | 主機(jī)輸出從機(jī)輸入 |
DO(MISO) | 主機(jī)輸入從機(jī)輸出 |
WP | 寫(xiě)保護(hù)(數(shù)據(jù)能否被寫(xiě)入) |
HOLD | 數(shù)據(jù)保持 |
可以看出,此模塊不使用WP和HOLD引腳(均為高電平) 。
【注意】關(guān)于HOLD,當(dāng)你正常讀寫(xiě)時(shí)突然產(chǎn)生中斷,然后要用SPI去操控其他器件。這時(shí)如果把CS置回高電平,那時(shí)序就終止了。但如果你不想終止時(shí)序,又想操控其他器件,可以將HOLD引腳置低電平,這樣芯片就hold住了:芯片釋放總線,但芯片時(shí)序不會(huì)終止,而是會(huì)記住當(dāng)前狀態(tài)。HOLD置回高電平后,又會(huì)繼續(xù)之前的時(shí)序。
W25Qxx內(nèi)部結(jié)構(gòu)
存儲(chǔ)器劃分:①對(duì)于一整個(gè)存儲(chǔ)空間(以8MB為例),分為128塊(一個(gè)塊64KB)。對(duì)于每個(gè)塊,又劃分為16個(gè)扇區(qū)(一個(gè)扇區(qū)4KB);②對(duì)于整個(gè)空間,又可以劃分成很多頁(yè),每頁(yè)256字節(jié)(一個(gè)頁(yè)包括:xxxx00~xxxxFF)。
塊 | xx0000~xxFFFF |
扇區(qū) | xxx000~xxxFFF |
頁(yè) | xxxxx0~xxxxxF |
SPI控制邏輯:芯片內(nèi)部進(jìn)行地址鎖存、數(shù)據(jù)讀寫(xiě)等操作都可以由控制邏輯來(lái)自動(dòng)完成,控制邏輯就相當(dāng)于整個(gè)芯片的管理員。
狀態(tài)寄存器:芯片是否忙碌、是否寫(xiě)使能、是否寫(xiě)保護(hù)都可以在狀態(tài)寄存器里體現(xiàn)。
寫(xiě)控制邏輯:配合WP引腳實(shí)現(xiàn)硬件寫(xiě)保護(hù)。
高電壓生成器:用于實(shí)現(xiàn)掉電不丟失。
頁(yè)地址鎖存/計(jì)數(shù)器:用于指定頁(yè)地址,3位地址的前兩位進(jìn)入頁(yè)地址鎖存/計(jì)數(shù)器里
字節(jié)地址鎖存/計(jì)數(shù)器:用于指定字節(jié)地址,3位地址的最后一位進(jìn)入字節(jié)地址鎖存/計(jì)數(shù)器里
頁(yè)地址通過(guò)寫(xiě)保護(hù)和行解碼來(lái)選擇操作哪一頁(yè),字節(jié)地址通過(guò)列解碼和256字節(jié)頁(yè)緩存來(lái)進(jìn)行指定地址的讀寫(xiě)操作。又因?yàn)榈刂锋i存都有計(jì)數(shù)器,地址指針在讀寫(xiě)之后,自動(dòng)加1。
對(duì)于256字節(jié)頁(yè)緩存區(qū),實(shí)際是一個(gè)256字節(jié)的RAM存儲(chǔ)器。數(shù)據(jù)讀寫(xiě)就是通過(guò)這個(gè)RAM緩存器來(lái)進(jìn)行的。我們寫(xiě)數(shù)據(jù),先將數(shù)據(jù)放到緩存區(qū)里,等時(shí)序結(jié)束,芯片再將緩存區(qū)的數(shù)據(jù)復(fù)制到對(duì)應(yīng)的Flash里面(放入具體某一頁(yè)里面),進(jìn)行永久保存。
為什么要有緩存區(qū)呢,而不進(jìn)行直接讀寫(xiě)?這是因?yàn)镾PI的寫(xiě)入頻率是非常高的,而Flash的寫(xiě)入是比較慢的(而RAM的速度非???#xff09;,所以先放RAM里面存著。但由于RAM緩存區(qū)只有256個(gè)字節(jié),因此連續(xù)的寫(xiě)入量不能超過(guò)256個(gè)字節(jié)。因此當(dāng)時(shí)序結(jié)束后,芯片又要將RAM里的數(shù)據(jù)移入Flash里,這需要一定的時(shí)間,所以芯片會(huì)進(jìn)入一段忙的狀態(tài)。
Flash操作注意事項(xiàng)
因?yàn)镕lash作為一種掉電不丟失的存儲(chǔ)器,為了保證掉電不丟失這個(gè)特性,同時(shí)還要保證存儲(chǔ)容量足夠大、成本足夠低,所以Flash存儲(chǔ)器會(huì)在其他地方(如操作便攜性等)作出一些妥協(xié)和讓步。
寫(xiě)操作時(shí):
1、寫(xiě)入操作時(shí),必須先進(jìn)行寫(xiě)使能。用SPI發(fā)生一個(gè)寫(xiě)使能指令即可。通過(guò)查詢狀態(tài)寄存器的WEL位來(lái)確定能否進(jìn)行寫(xiě)入操作(1代表寫(xiě)使能)。
2、每個(gè)數(shù)據(jù)位只能由1改寫(xiě)為0,不能由0改寫(xiě)為1(成本原因或技術(shù)原因)。
3、寫(xiě)入數(shù)據(jù)前必須先擦除,擦除后,所有數(shù)據(jù)位變?yōu)?。發(fā)出擦除指令后,芯片也會(huì)進(jìn)入忙狀態(tài)。
4、擦除必須按最小擦除單元(整個(gè)存儲(chǔ)區(qū)/按塊擦除/按扇區(qū)擦除)進(jìn)行,若只想擦除某一個(gè)字節(jié),只能將其所在的最小擦除單元全部擦除。
5、連續(xù)寫(xiě)入多字節(jié)時(shí),最多寫(xiě)入一頁(yè)的數(shù)據(jù),超過(guò)頁(yè)尾位置的數(shù)據(jù),會(huì)回到頁(yè)首覆蓋寫(xiě)入。
6、寫(xiě)操作結(jié)束后,芯片會(huì)進(jìn)入忙狀態(tài),不響應(yīng)新的讀寫(xiě)操作。通過(guò)讀取狀態(tài)寄存器的BUSY位來(lái)判斷芯片是否忙碌(BUSY為0代表不忙)。
讀操作時(shí):
1、直接調(diào)用讀取時(shí)序,無(wú)需使能,沒(méi)有頁(yè)的限制。
2、讀取操作后不會(huì)進(jìn)入忙狀態(tài),但不能在忙狀態(tài)時(shí)讀取。
一些SPI指令集
寫(xiě)使能:指令碼---0x06;
寫(xiě)失能:指令碼---0x04;
讀取狀態(tài)寄存器:指令碼---0x05;數(shù)據(jù)位---S7~S0(寄存器8位中的某一位);
頁(yè)編程(數(shù)據(jù)寫(xiě)入):指令碼---0x02;數(shù)據(jù)位---3字節(jié)地址碼、數(shù)據(jù)...
扇區(qū)擦除:指令碼---0x20;數(shù)據(jù)位---3字節(jié)地址碼;(此地址對(duì)應(yīng)某個(gè)字節(jié),芯片會(huì)直接對(duì)應(yīng)到該字節(jié)所在扇區(qū),并對(duì)該扇區(qū)進(jìn)行擦除)
讀取數(shù)據(jù):指令碼---0x03;數(shù)據(jù)位---3字節(jié)地址、數(shù)據(jù)...