




免費(fèi)預(yù)覽已結(jié)束,剩余21頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
華邦W25Q16存儲(chǔ)器顆粒SPI編程W25X16、W25X32 和 W25X64 系列 FLASH 存儲(chǔ)器可以為用戶提供存儲(chǔ)解決方案,具有“PCB 板占用空間少”、“引腳數(shù)量少”、“功耗低”等特點(diǎn)。與普通串行 FLASH 相比,使 用更靈活,性能更出色。它非常適合做代碼下載應(yīng)用,例如存儲(chǔ)聲音,文本和數(shù)據(jù)。工作電 壓在 2.7V-3.6V 之間,正常工作狀態(tài)下電流消耗 0.5 毫安,掉電狀態(tài)下電流消耗 1 微安。所 有的封裝都是節(jié)省空間型的。W25X16、W25X32 和 W25X64 分別有 8192、16384 和 32768 可編程頁,每頁 256 字節(jié)。 用頁編程指令每次就可以編程256個(gè)字節(jié)。用扇區(qū)(sector)擦除指令每次可以擦除 16 頁,用“塊(block)擦除指令”每次可以擦除 256 頁,用“整片擦除指令”即可以擦除 整個(gè)芯片。W25X16、W25X32 和 W25X64 分別有 512、1024 和 2048 個(gè)可擦除扇區(qū)或 32、64 和 128 個(gè)可擦除“塊”。W25X16、W25X32 和 W25X64 支持標(biāo)準(zhǔn)的 SPI 接口,傳輸速率最大 75MHz。四線制:串行時(shí)鐘引腳 CLK;:芯片選擇引腳 CS;:串行數(shù)據(jù)輸出引腳 DO;:串行數(shù)據(jù)輸入輸出引腳 DIO。(注意:第引腳“串行數(shù)據(jù)輸入輸出引腳 DIO”的解釋:在普通情況下,這根引腳是“串行輸入引腳(DI),當(dāng)使用了快讀雙輸出指令(Fast Read Dual Output instruction)時(shí),這根引腳就變成了 DO 引腳,這種情況下,芯片就有了兩個(gè) DO 引腳了,所以叫做雙輸出,這時(shí),如果與芯片通信的速率相當(dāng)于翻了一倍,所以傳輸速度更快。)另外,芯片還具有保持引腳(HOLD)、寫保護(hù)引腳(WP)、可編程寫保護(hù)位(位于狀 態(tài)寄存器 bit1)、頂部和底部塊的控制等特征,使得控制芯片更具靈活性。芯片支持 JEDEC 工業(yè)標(biāo)準(zhǔn)。引腳排布:原理圖:控制和狀態(tài)寄存器說明S7S6S5S4S3S2S1S0SRP(Reservd)TBBP2BP1BP0WELBUSY通過讀狀態(tài)寄存器指令讀出的狀態(tài)數(shù)據(jù)可以知道芯片存儲(chǔ)器陣列是否可寫或不可寫,或是否處于寫保護(hù)狀態(tài)。通過寫狀態(tài)寄存器指令可以配置芯片寫保護(hù)特征。狀態(tài)寄存器:忙位(BUSY)BUSY 位是個(gè)只讀位,位于狀態(tài)寄存器中的 S0。當(dāng)器件在執(zhí)行頁編程、扇區(qū)擦除、 塊區(qū)擦除、芯片擦除、寫狀態(tài)寄存器指令時(shí),該位自動(dòng)置 1。這時(shí),除了讀狀態(tài)寄 存器指令,其它指令部忽略。當(dāng)編程、擦除和寫狀態(tài)寄存器指令執(zhí)行完畢之后,該位自動(dòng) 變?yōu)?0,表示芯片可以接收其它指令了。寫保護(hù)位(WEL)WEL 位是個(gè)只讀位,位于狀態(tài)寄存器中的 S1。執(zhí)行完寫使能指令后,該位置 1。 當(dāng)芯片處于寫保護(hù)狀態(tài)下,該位為0。在下面兩種情況下,會(huì)進(jìn)入寫保護(hù)狀態(tài) 掉電后 執(zhí)行以下指令后寫禁能、頁編程、扇區(qū)擦除、塊區(qū)擦除、芯片擦除和寫狀態(tài)寄存器塊區(qū)保護(hù)位(BP2,BP1,BP0)BP2BP1BP0 位是可讀可寫位,分別位于狀態(tài)寄存器的 S4S3S2??梢杂脤憼顟B(tài)寄存器命令置位這些塊區(qū)保護(hù)位。在默認(rèn)狀態(tài)下,這些位都為 0,即塊區(qū)處于未保護(hù)狀態(tài)下。 可以設(shè)置塊區(qū)沒有保護(hù)、部分保護(hù)或者是全部處于保護(hù)狀態(tài)下。當(dāng) SPR 位為 1 或/WP 引腳 為低的時(shí)候,這些位不可以被更改。底部和頂部塊區(qū)保護(hù)位(TB)TB 位是可讀可寫位,位于狀態(tài)寄存器的 S5。該位默認(rèn)為 0,表明頂部和底部塊區(qū)處于未被保護(hù)狀態(tài)下??梢杂脤憼顟B(tài)寄存器命令置位該位。當(dāng) SPR 位為 1 或/WP 引腳為低 的時(shí)候,這些位不可以被更改。保留位狀態(tài)寄存器的 S6 為保留位,讀出狀態(tài)寄存器值時(shí),該位為 0。建議讀狀態(tài)寄存器值用于測(cè)試時(shí)將該位屏蔽。狀態(tài)寄存器果護(hù)位(SRP)SRP 位是可讀可寫位,位于狀態(tài)寄存器的 S7。該位結(jié)合/WP 引腳可以實(shí)現(xiàn)禁能寫狀態(tài)寄存器功能。該位默認(rèn)值為 0。當(dāng) SRP 位=0 時(shí),/WP 引腳不能控制狀態(tài)寄存器的寫禁能。當(dāng) SRP 位=1,/WP 引腳=0 時(shí),寫狀態(tài)寄存器命令失效。當(dāng) SRP 位=1,/WP 引腳=1 時(shí),可以執(zhí)行寫狀態(tài)寄存器命令。狀態(tài)寄存器存儲(chǔ)保護(hù)模塊:1、寫使能時(shí)序圖(指令:0x06):“寫使能”指令將會(huì)使“狀態(tài)寄存器”WEL位置位。在執(zhí)行每個(gè)“頁編程”、“扇區(qū)擦除”、“塊區(qū)擦除”、“芯片擦除”、和“寫狀態(tài)寄存器”命令之前,都要先置位 WEL。/CS 引腳先拉低之后,“寫使能”指令代碼06h 從DI引腳輸入,在CLK 上升沿采集,然后再拉高/CS 引腳 。程序設(shè)計(jì)流程:1、 使能片選位,拉低CS引腳;2、 CLK起始狀態(tài)或高電平或低平,配置數(shù)據(jù)采集從CLK第一個(gè)上升沿開始;3、 等待發(fā)送緩沖區(qū)是否為空,SPI_SR的TXE位;4、 將數(shù)據(jù)賦值給SPI_DR寄存器;5、 等待接收緩沖區(qū)是否為空,SPI_SR的RXNE位;6、 返回接收到的數(shù)據(jù);7、 禁能片選位,拉高CS引腳。例程:unsigned char SPI_SendByte(unsigned char byte)while(!(SPI_SR&0x02);/等待發(fā)送緩沖區(qū)為空SPI_DR=byte;/送值到數(shù)據(jù)寄存器whlie(!(SPI_SR&0x01);/等待接收緩沖區(qū)為空return SPI_DR;/返回接收的內(nèi)容unsigned char SPI_WriteEnable()Flash_CS=0;/使能CS引腳SPI_SendByte(0x06)/寫使能指令Flash_CS=1;/禁能片選引腳2、寫禁能時(shí)序圖(指令:0x04):“寫禁能”指令將會(huì)使WEL位變?yōu)?。/CS引腳拉低之后,把04h 從DIO引腳送到芯片之后,拉高/CS,就完成了這個(gè)指令。在執(zhí)行完“寫狀態(tài)寄存器”、“頁編程”、“ 扇區(qū)擦除”、“塊區(qū)擦除”、“芯片擦除”指令之后,WEL位就會(huì)自動(dòng)變?yōu)?。程序設(shè)計(jì)流程:1、 使能片選位,拉低CS引腳;2、 CLK起始狀態(tài)或高電平或低平,配置數(shù)據(jù)采集從CLK第一個(gè)上升沿開始;3、 等待發(fā)送緩沖區(qū)是否為空,SPI_SR的TXE位;4、 將數(shù)據(jù)賦值給SPI_DR寄存器;5、 等待接收緩沖區(qū)是否為空,SPI_SR的RXNE位;6、 返回接收到的數(shù)據(jù);7、 禁能片選位,拉高CS引腳。例程:unsigned char SPI_SendByte(unsigned char byte)Flash_CS=0;/使能CS引腳while(!(SPI_SR&0x02);/等待發(fā)送緩沖區(qū)為空SPI_DR=byte;/送值到數(shù)據(jù)寄存器whlie(!(SPI_SR&0x01);/等待接收緩沖區(qū)為空return SPI_DR;/返回接收的內(nèi)容Flash_CS=1;/禁能片選引腳unsigned char SPI_WriteEnable()Flash_CS=0;/使能CS引腳SPI_SendByte(0x04)/寫禁能指令Flash_CS=1;/禁能片選引腳3、讀狀態(tài)時(shí)序(指令:0x05):當(dāng)/CS 拉低之后,開始把 05h 從DIO引腳送到芯片,在 CLK 的上升沿?cái)?shù)據(jù)被芯片采集,當(dāng)芯片認(rèn)出采集到的數(shù)據(jù)時(shí)05h 時(shí),芯片就會(huì)把“狀態(tài)寄存器”的值從DO引腳輸出,數(shù)據(jù)在CLK 的下降沿輸出,高位在前?!白x狀態(tài)寄存器”指令在任何時(shí)候都可以用,甚至在編程、擦除和寫狀態(tài)寄存器的過程中也可以用,這樣,就可以從狀態(tài)寄存器的BUSY位判斷編程、擦除和寫狀態(tài)寄存器周期有沒有結(jié)束,從而讓我們知道芯片是否可以接收下一條指令了。如果/CS 不被拉高,狀態(tài)寄存器的值將一直從DO引腳輸出。/CS 拉高之后,讀指令結(jié)束。程序設(shè)計(jì)流程:1、 使能片選,拉低CS引腳;2、 發(fā)送讀取指令0x04;3、 循環(huán)發(fā)送讀偽指令0xFF,等待非忙時(shí)跳出循環(huán);4、 禁能片選,拉高CS引腳。例程:void SPI_ReadStatus()unsigned char Flash_Status;FLASH_CS=0;/使能片選引腳SPI_SendByte(0x05);/發(fā)送讀狀態(tài)指令doFlash_Status=SPI_SendByte(0xFF);/發(fā)送偽指令維持時(shí)鐘等待非空跳出循環(huán),偽指令任意寫。while(!(Flash_Status&0x01);FLASH_CS=1;/禁能片選引腳4、寫狀態(tài)時(shí)序(指令:0x01)在執(zhí)行“寫狀態(tài)寄存器”指令之前,需要先執(zhí)行“寫使能”指令。先拉低/CS 引腳,然 后把 01h 從 DIO 引腳送到芯片,然后再把你想要設(shè)置的狀態(tài)寄存器值通過 DIO 引腳送到芯 片,拉高/CS 引腳,指令結(jié)束,如果此時(shí)沒有把/CS 引腳拉高,或者是拉的晚了,值將不會(huì) 被寫入,指令無效。只有“狀態(tài)寄存器”當(dāng)中的“SRP、TB、BP2、BP1、BP0 位”可以被寫入,其它“只讀位”值不會(huì)變。在該指令執(zhí)行的過程中,狀態(tài)寄存器中的 BUSY 位為 1,這時(shí)候可以用“讀狀態(tài)寄存器”指令讀出狀態(tài)寄存器的值判斷,當(dāng)指令執(zhí)行完畢,BUSY 位將自動(dòng)變?yōu)?0, WEL位也自動(dòng)變?yōu)?0。通過對(duì)“TB”、“BP2”、“BP1”、“BP0”位寫 1,就可以實(shí)現(xiàn)將芯片的部分或全部存儲(chǔ)區(qū)域 設(shè)置為只讀。通過對(duì)“SRP 位”寫 1,再把/WP引腳拉低,就可以實(shí)現(xiàn)禁止寫入狀態(tài)寄存器的功能。程序設(shè)計(jì)流程:1、 使能片選,CS引腳拉低;2、 發(fā)送寫狀態(tài)指令0x01;3、 發(fā)送讀取指令0x044、 禁能片選,CS引腳拉高。例程:void SPI_FLASH_WriteStatus()FLASH_CS=0;/使能片選引腳SPI_SendByte(0x06);/寫使能指令SPI_SendByte(0x01);/寫狀態(tài)指令SPI_SendByte(0x00);/寫入狀態(tài)的數(shù)據(jù)FLASH_CS=1;/禁能片選引腳5、讀數(shù)據(jù)時(shí)序圖(指令:0x03):“讀數(shù)據(jù)”指令允許讀出一個(gè)字節(jié)或一個(gè)以上的字節(jié)被讀出。先把/CS 引腳拉低,然后把03h通過DIO引腳送到芯片,之后再送入24位的地址,這些數(shù)據(jù)在CLK的上升沿被芯片采集。芯片接收完24位地址之后,就會(huì)把相應(yīng)地址的數(shù)據(jù)在 CLK 引腳的下降沿從 DO 引腳送出去,高位在前。當(dāng)讀完這個(gè)地址的數(shù)據(jù)之后,地址自動(dòng)增加,然后通過DO引腳把下一個(gè)地址的數(shù)據(jù)送出去,形成一個(gè)數(shù)據(jù)流。也就是說,只要時(shí)鐘在工作,通過一條讀指令,就可 以把整個(gè)芯片存儲(chǔ)區(qū)的數(shù)據(jù)讀出來。把/CS 引腳拉高,“讀數(shù)據(jù)”指令結(jié)束。當(dāng)芯片在執(zhí)行編程、擦除和讀狀態(tài)寄存器指令的周期內(nèi),“讀數(shù)據(jù)”指令不起作用。程序設(shè)計(jì)流程(指令:0x03):1、 使能片選,拉低CS引腳;2、 發(fā)送讀數(shù)據(jù)指令0x03,緊接著發(fā)送24位地址; 3、 讀以SPI_DR寄存器數(shù)據(jù)4、 禁能片選,拉高CS引腳例程:void SPI_FLASH_BufferRead(unsigned char* pBuffer, unsigned int ReadAddr, unsigned long int NumByteToRead) FLASH_CS=0;/拉低片選線選中芯片 SPI_SendByte(READ);/發(fā)送讀數(shù)據(jù)命令 SPI_SendByte(ReadAddr & 0xFF0000)16);/發(fā)送24位FLASH地址,先發(fā)高8位 SPI_SendByte(ReadAddr & 0x00FF00)8);/再發(fā)中間8位 SPI_SendByte(ReadAddr &0x0000FF);/最后發(fā)低8位 while(NumByteToRead-)/計(jì)數(shù) *pBuffer = SPI_SendByte(Dummy_Byte);/讀一個(gè)字節(jié)的數(shù)據(jù) pBuffer+;/指向下一個(gè)要讀取的數(shù)據(jù) FLASH_CS=1;/拉高片選線不選中芯片6、快讀時(shí)序圖(指令:0x0B):“快讀”指令和“讀數(shù)據(jù)”指令很相似,不過,“快讀”指令可以運(yùn)行在更高的傳輸速率下。先把/CS 引腳拉低,然后把 0Bh 通過引腳 DIO 送到芯片,然后把 24 位地址通過 DIO 引腳送到芯片,接著等待8個(gè)時(shí)鐘,之后數(shù)據(jù)將會(huì)從 DO 引腳送出去。程序設(shè)計(jì)流程(指令:0x0B):1、 使能片選,拉低CS引腳;2、 發(fā)送快讀數(shù)據(jù)指令0x0B,緊接著發(fā)送24位地址; 3、 發(fā)送8個(gè)字節(jié)偽指令等待8個(gè)時(shí)鐘4、 讀以SPI_DR寄存器數(shù)據(jù)5、 禁能片選,拉高CS引腳例程:void SPI_FLASH_BufferRead(unsigned char* pBuffer, unsigned int ReadAddr, unsigned long int NumByteToRead) FLASH_CS=0;/拉低片選線選中芯片 SPI_SendByte(READ);/發(fā)送讀數(shù)據(jù)命令 SPI_SendByte(ReadAddr & 0xFF0000)16);/發(fā)送24位FLASH地址,先發(fā)高8位 SPI_SendByte(ReadAddr & 0x00FF00)8);/再發(fā)中間8位 SPI_SendByte(ReadAddr &0x0000FF);/最后發(fā)低8位SPI_SendByte(0xFF);/發(fā)送8個(gè)字節(jié)偽指令,等待8個(gè)時(shí)鐘。 while(NumByteToRead-)/計(jì)數(shù) *pBuffer = SPI_SendByte(Dummy_Byte);/發(fā)送偽指令讀出一個(gè)字節(jié)的數(shù)據(jù) pBuffer+;/指向下一個(gè)要讀取的數(shù)據(jù) FLASH_CS=1;/拉高片選線不選中芯片7、快速讀雙輸出(指令:0x3B):“快讀雙輸出”指令和“快讀”指令很相似,不過,“快讀雙輸出”指令是從兩個(gè)引腳上輸出數(shù)據(jù):DI和DIO。這樣,傳輸速率就相當(dāng)于兩倍于標(biāo)準(zhǔn)的SP看傳輸速率了。這個(gè)指令特別適合于需要在一上電就把代碼從芯片下載到內(nèi)存中的情況或者緩存代碼段到內(nèi)存中運(yùn)行的情況。“快讀雙輸出”指令和“快讀”指令的時(shí)序差不多。先把/CS引腳拉低,然后把 3Bh通過引腳 DIO送到芯片,然后把 24 位地址通過 DIO 引腳送到芯片,接著等待8個(gè)時(shí)鐘,之后數(shù)據(jù)將會(huì)分別從DO 引腳和 DIO 引腳送出去,DIO 送偶數(shù)位,DO 送寄數(shù)位。程序設(shè)計(jì)流程:1、 使能片選,拉低CS引腳;2、 寫快讀雙輸出指令0x3B,緊接著寫24位地址;3、 寫1個(gè)字節(jié)的偽指令,等待8個(gè)時(shí)鐘;4、 讀取SPI_DR寄存器5、 禁能片選,拉高CS引腳例程(參考完整例程):暫無。8、頁編程時(shí)序圖(指令:0x02):執(zhí)行“頁編程”指令之前,需要先執(zhí)行“寫使能”指令,而且要求待寫入的區(qū)域位都為1,也就是需要先把待寫入的區(qū)域擦除。先把/CS引腳拉低,然后把代碼02h通過DIO引腳送到芯片,然后再把24位地址送到芯片,然后接著送要寫的字節(jié)到芯片。在寫完數(shù)據(jù)之后,把/CS引腳拉高。寫完一頁(256個(gè)字節(jié))之后,必須把地址改為0,不然的話,如果時(shí)鐘還在繼續(xù),地址將自動(dòng)變?yōu)轫摰拈_始地址。在某些時(shí)候,需要寫入的字節(jié)不足256個(gè)字節(jié)的話,其它寫入的字節(jié)都是無意義的。如果寫入的字節(jié)大于了256個(gè)字節(jié),多余的字節(jié)將會(huì)加上無用的字節(jié)覆蓋剛剛寫入的的256個(gè)字節(jié)。所以需要保證寫入的字節(jié)小于等于256個(gè)字節(jié)。在指令執(zhí)行過程中,用“讀狀態(tài)寄存器”可以發(fā)現(xiàn)BUSY位為1,當(dāng)指令執(zhí)行完畢,BUSY位自動(dòng)變?yōu)?。如果需要寫入的地址處于“寫保護(hù)”狀態(tài),“頁編程”指令無效。程序設(shè)計(jì)流程:1、 寫使能指令0x06,將芯片WEL位置0;2、 擦除芯片需要寫入的區(qū)域,可以用扇區(qū)、塊、芯片擦除指令; 3、 使能片選,拉低CS引腳 ;4、 發(fā)送“頁編程”指令0x02,接著發(fā)送24位地址、發(fā)送要寫入的數(shù)據(jù);5、 發(fā)讀狀態(tài)指令0x05檢查芯片BUSY位操作是否結(jié)束6、 禁能片選,拉高CS引腳。例程:void SPI_FLASH_PageWrite(unsigned char* pBuffer, unsigned long int WriteAddr, unsigned int NumByteToWrite) SPI_FLASH_WriteEnable();/先使能對(duì)FLASH芯片的操作 FLASH_CS=0;/拉低片選線選中芯片 SPI_SendByte(WRITE);/發(fā)送頁寫命令 SPI_SendByte(WriteAddr&0xFF0000)16);/發(fā)送24位FLASH地址,先發(fā)高8位 SPI_SendByte(WriteAddr&0xFF00)8);/再發(fā)中間8位 SPI_SendByte(WriteAddr&0xFF);/最后發(fā)低8位 while(NumByteToWrite-)/發(fā)送地址后緊跟欲寫入數(shù)據(jù) SPI_SendByte(*pBuffer);/發(fā)送欲寫入FLASH的數(shù)據(jù) pBuffer+;/指向下一個(gè)要寫入的數(shù)據(jù) FLASH_CS=1;/拉高片選線不選中芯片 SPI_FLASH_WaitForWriteEnd();/等待寫操作結(jié)束程序說明:* pBuffer是一個(gè)指針,是讀取數(shù)據(jù)后的存儲(chǔ)區(qū),通常指向一個(gè)數(shù)組;WriteAddr是24位芯片地址,需要把數(shù)據(jù)寫到芯片什么位置就靠它了。NumByteToWrite是寫入字節(jié)的數(shù)量,例如需要寫入50個(gè)字節(jié),這里就給50。寫入的數(shù)據(jù)不可以大于256Byte,否則頁地址會(huì)溢出,地址會(huì)從0開始,最前面寫入的數(shù)據(jù)會(huì)被破壞,寫入的數(shù)據(jù)大于256Byte時(shí),重新用下一頁的起始地址來寫剩余的數(shù)據(jù)(處理翻頁問題請(qǐng)?jiān)诒菊履┪膊榭赐暾蹋?。頁編程完整流程圖:W25Q16總共有16Mbit空間,合計(jì)2MByte,共8192個(gè)頁,每頁256Byte。因?yàn)槊宽撌且粋€(gè)獨(dú)立的單元,所以在寫入數(shù)據(jù)時(shí)不支持自動(dòng)翻頁,如果寫入的數(shù)據(jù)超出256Byte,那么頁地址就溢出歸零,數(shù)據(jù)又從零開始寫,也就是說最先寫入的數(shù)據(jù)會(huì)被破壞。數(shù)據(jù)寫入時(shí)可能碰到有幾種情況,一種情況是:頁地址對(duì)齊的情況,就是頁地址可以被256整除,且寫入的數(shù)據(jù)不夠256Byte,這種情況直接寫入即可,不需要考慮翻頁問題;第二種情況是:寫入的數(shù)據(jù)剛好是256Byte或者多一點(diǎn)點(diǎn),這種情況寫完一整頁的數(shù)據(jù)后,就要把頁地址加256跳到下一頁的開始位置寫剩余的數(shù)據(jù);第三種情況是:頁地址不對(duì)齊情況,也就是頁地址不能被256整除,這種情況說明,某頁被用掉一部分,現(xiàn)在從剩余的空間繼續(xù)向下寫,如果空間夠?qū)懢椭苯訉懭耄恍枰紤]翻頁問題,如果空間不夠?qū)懢鸵獙㈨摰刂芳由鲜S嗫臻g的數(shù)跳轉(zhuǎn)到下一頁寫剩余的數(shù)據(jù),如果剩余的數(shù)據(jù)等于或大于256Byte,頁地址還需要 加256再向下進(jìn)行翻頁。9、扇區(qū)擦除時(shí)序圖(指令:0x20):“扇區(qū)擦除”指令將一個(gè)扇區(qū)C4K字節(jié))擦除,擦除后扇區(qū)位都為1,扇區(qū)字節(jié)都為FFh。在執(zhí)行“扇區(qū)擦除”指令之前,需要先執(zhí)行“寫使能”指令,保證WEL位為1。先拉低屬CS引腳,然后把指令代碼20h通過DIO引腳送到芯片,然后接著把24位扇區(qū)地址送到芯片,然后拉高屬CS引腳。如果沒有及時(shí)把屬CS引腳拉高,指令將不會(huì)起作用。在指令執(zhí)行期間,BUSY位為1,可以通過“讀狀態(tài)寄存器”指令觀察。當(dāng)指令執(zhí)行完畢,BUSY位變?yōu)?,WEL位也會(huì)變?yōu)?。如果需要擦除的地址處于只讀狀態(tài),指令將不會(huì)起作用。程序設(shè)計(jì)流程:1、 先執(zhí)行寫使能指令;2、 使能片選,拉低CS引腳;3、 發(fā)送扇區(qū)擦除指令0x20,緊接著發(fā)送擦除的24位地址;4、 等待擦除指令結(jié)束,發(fā)送讀狀態(tài)指令查看BUSY位狀態(tài)是否為0;5、 禁能片選,拉高CS引腳。例程:void SPI_FLASH_BlockErase(unsigned long int BlockAddr) SPI_FLASH_WriteEnable();/FLASH寫使能(該函數(shù)請(qǐng)查閱完整例程) FLASH_CS=0;/拉低片選線選中芯片 SPI_SendByte(0xD8);/發(fā)送塊或扇區(qū)(0x20)擦除命令 SPI_SendByte(BlockAddr&0xFF0000)16);/發(fā)送24位FLASH擦除地址,先發(fā)高8位 SPI_SendByte(BlockAddr&0x00FF00)8);/再發(fā)中間8位 SPI_SendByte(BlockAddr&0x0000FF);/最后發(fā)低8位 FLASH_CS=1;/拉高片選線不選中芯片 SPI_FLASH_WaitForWriteEnd();/等待塊清除操作完成(該函數(shù)請(qǐng)查閱完整例程)10、芯片擦除時(shí)序圖(指令:0xC7):“芯片擦除”指令將會(huì)使整個(gè)芯片的存儲(chǔ)區(qū)位都變?yōu)?1,即字節(jié)都變位 FFh。在執(zhí)行“芯片擦除”指令之前需要先執(zhí)行寫使能指令。先把/CS 引腳拉低,然后再把指令代碼 C7h 通過 DIO 引腳送到芯片,然后拉高/CS 引腳。 如果沒有及時(shí)拉高/CS 引腳,指令無效。在“芯片擦除”指令執(zhí)行周期內(nèi),可以執(zhí)行“讀狀態(tài)寄存器”指令訪問 BUSY 位,這時(shí) BUSY 位為 1,當(dāng)“芯片擦除”指令執(zhí)行完畢,BUSY 變?yōu)?,WEL位也變?yōu)?0。任何一個(gè)塊區(qū)處于保護(hù)狀態(tài)(BP2BP1BP0),指令都會(huì)失效。程序設(shè)計(jì)流程:1、 發(fā)送0x06寫使能;2、 使能片選,拉低CS引腳;3、 發(fā)送擦除指令0xC7,緊接著發(fā)送24位擦除地址;4、 禁能片選,拉高CS引腳5、 等待操作完成。例程:void SPI_FLASH_ChipErase(void) SPI_FLASH_WriteEnable();/FLASH寫使能 FLASH_CS=0;/拉低片選線選中芯片 SPI_SendByte(Chip_E);/發(fā)送芯片擦除命令 FLASH_CS=1;/拉高片選線不選中芯片 SPI_FLASH_WaitForWriteEnd();/等待寫操作完成11、“釋放掉電/器件ID”指令(命令:0xAB):這個(gè)指令有兩個(gè)作用。一個(gè)是“釋放掉電”,一個(gè)是讀出“器件ID”。 當(dāng)只需要發(fā)揮“釋放掉電”用途時(shí),指令時(shí)序是:先把/CS引腳拉低,然后把代碼“ABh”通過 DIO 引腳送到芯片,然后拉高/CS引腳。然后經(jīng)過tRES1時(shí)間間隔,芯片恢復(fù)正常工作狀態(tài)。在編程、擦除和寫狀態(tài)寄存器指令執(zhí)行周期內(nèi),執(zhí)行該指令無效。程序設(shè)計(jì)流程:暫無例程:暫無12、掉電指令(指令:0xB9):盡管在待機(jī)狀態(tài)下的電流消耗己經(jīng)很低了,但“掉電”指令可以使得待機(jī)電流消耗更低。這個(gè)指令很適合在電池供電的場(chǎng)合。先把屬CS 引腳拉低,然后把指令代碼
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)升級(jí)項(xiàng)目合同借款協(xié)議
- 合同管理培訓(xùn)與人才培養(yǎng)的建議
- 餐飲業(yè)原料采購合同(安全食品專用)
- 勞動(dòng)合同范本:外來專業(yè)技術(shù)人才
- 商業(yè)地皮交易合同書
- 蘇州市模范勞動(dòng)合同樣本
- 四人合作創(chuàng)業(yè)股份分配合同范本
- 年度合作合同:速記服務(wù)條款
- 液化氣采購框架合同
- 購物中心投資合同樣本
- 復(fù)變函數(shù)論 鐘玉泉 第四版 課后習(xí)題答案詳解解析
- 焊接與熱切割作業(yè)實(shí)操培訓(xùn)
- 《學(xué)習(xí)地圖》課件
- 《輕鋼建筑》課件
- 尿源性膿毒血癥護(hù)理
- 【MOOC】數(shù)據(jù)庫系統(tǒng)(下):管理與技術(shù)-哈爾濱工業(yè)大學(xué) 中國大學(xué)慕課MOOC答案
- 日本留學(xué)中介簽約合同
- 《地區(qū)智能電網(wǎng)調(diào)度技術(shù)支持系統(tǒng)應(yīng)用功能規(guī)范》
- 框架借款協(xié)議書(2篇)
- 鐵路安全應(yīng)急預(yù)案
- 《城市軌道交通車輛構(gòu)造》 課件 2.2 不銹鋼車體結(jié)構(gòu)認(rèn)知
評(píng)論
0/150
提交評(píng)論