華邦W25Q16存儲(chǔ)器顆粒SPI編程_第1頁
華邦W25Q16存儲(chǔ)器顆粒SPI編程_第2頁
華邦W25Q16存儲(chǔ)器顆粒SPI編程_第3頁
華邦W25Q16存儲(chǔ)器顆粒SPI編程_第4頁
華邦W25Q16存儲(chǔ)器顆粒SPI編程_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

-.z.華邦W25Q16存儲(chǔ)器顆粒SPI編程W25*16、W25*32和W25*64系列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é)省空間"型的。W25*16、W25*32和W25*64分別有8192、16384和32768可編程頁,每頁256字節(jié)。用"頁編程指令"每次就可以編程256個(gè)字節(jié)。用"扇區(qū)(sector)擦除指令"每次可以擦除16頁,用“塊(block)擦除指令〞每次可以擦除256頁,用“整片擦除指令〞即可以擦除整個(gè)芯片。W25*16、W25*32和W25*64分別有512、1024和2048個(gè)可擦除"扇區(qū)"或32、64和128個(gè)可擦除“塊〞。W25*16、W25*32和W25*64支持標(biāo)準(zhǔn)的SPI接口,傳輸速率最大75MHz。四線制:①:串行時(shí)鐘引腳CLK;②:芯片選擇引腳CS;③:串行數(shù)據(jù)輸出引腳DO;④:串行數(shù)據(jù)輸入輸出引腳DIO。(注意:第④引腳“串行數(shù)據(jù)輸入輸出引腳DIO〞的解釋:在普通情況下,這根引腳是“串行輸入引腳(DI),當(dāng)使用了快讀雙輸出指令(FastReadDualOutputinstruction)時(shí),這根引腳就變成了DO引腳,這種情況下,芯片就有了兩個(gè)DO引腳了,所以叫做雙輸出,這時(shí),如果與芯片通信的速率相當(dāng)于翻了一倍,所以傳輸速度更快。)另外,芯片還具有保持引腳(HOLD)、寫保護(hù)引腳(WP)、可編程寫保護(hù)位(位于狀態(tài)存放器bit1)、頂部和底部塊的控制等特征,使得控制芯片更具靈活性。芯片支持JEDEC工業(yè)標(biāo)準(zhǔn)。引腳排布:原理圖:控制和狀態(tài)存放器說明S7S6S5S4S3S2S1S0SPRd)TBP2P1P0ELBY通過"讀狀態(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)?,表示芯片可以接收其它指令了。寫保護(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)BP2\BP1\BP0位是可讀可寫位,分別位于狀態(tài)存放器的S4\S3\S2。可以用"寫狀態(tài)存放器"命令置位這些塊區(qū)保護(hù)位。在默認(rèn)狀態(tài)下,這些位都為0,即塊區(qū)處于未保護(hù)狀態(tài)下??梢栽O(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)下??梢杂?寫狀態(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í)序圖〔指令:0*06〕:“寫使能〞指令將會(huì)使“狀態(tài)存放器〞WEL位置位。在執(zhí)行每個(gè)“頁編程〞、“扇區(qū)擦除〞、“塊區(qū)擦除〞、“芯片擦除〞、和“寫狀態(tài)存放器〞命令之前,都要先置位WEL。/CS引腳先拉低之后,“寫使能〞指令代碼06h從DI引腳輸入,在CLK上升沿采集,然后再拉高/CS引腳。程序設(shè)計(jì)流程:使能片選位,拉低CS引腳;CLK起始狀態(tài)或高電平或低平,配置數(shù)據(jù)采集從CLK第一個(gè)上升沿開場(chǎng);等待發(fā)送緩沖區(qū)是否為空,SPI_SR的T*E位;將數(shù)據(jù)賦值給SPI_DR存放器;等待接收緩沖區(qū)是否為空,SPI_SR的R*NE位;返回接收到的數(shù)據(jù);禁能片選位,拉高CS引腳。例程:unsignedcharSPI_SendByte(unsignedcharbyte){while(!(SPI_SR&0*02)); //等待發(fā)送緩沖區(qū)為空SPI_DR=byte; //送值到數(shù)據(jù)存放器whlie(!(SPI_SR&0*01)); //等待接收緩沖區(qū)為空returnSPI_DR; //返回接收的容}unsignedcharSPI_WriteEnable(){Flash_CS=0; //使能CS引腳SPI_SendByte(0*06) //寫使能指令Flash_CS=1; //禁能片選引腳}2、寫禁能時(shí)序圖〔指令:0*04〕:“寫能〞指將使EL位變?yōu)?。CS腳低之,把04h從DO腳送芯片之,拉高CS就完了這指令在執(zhí)完“寫狀存放器〞、“編程〞扇擦除〞、“塊擦芯擦指令后EL位會(huì)動(dòng)為0。程序設(shè)計(jì)流程:使能片選位,拉低CS引腳;CLK起始狀態(tài)或高電平或低平,配置數(shù)據(jù)采集從CLK第一個(gè)上升沿開場(chǎng);等待發(fā)送緩沖區(qū)是否為空,SPI_SR的T*E位;將數(shù)據(jù)賦值給SPI_DR存放器;等待接收緩沖區(qū)是否為空,SPI_SR的R*NE位;返回接收到的數(shù)據(jù);禁能片選位,拉高CS引腳。例程:unsignedcharSPI_SendByte(unsignedcharbyte){Flash_CS=0; //使能CS引腳while(!(SPI_SR&0*02)); //等待發(fā)送緩沖區(qū)為空SPI_DR=byte; //送值到數(shù)據(jù)存放器whlie(!(SPI_SR&0*01)); //等待接收緩沖區(qū)為空returnSPI_DR; //返回接收的容Flash_CS=1; //禁能片選引腳}unsignedcharSPI_WriteEnable(){Flash_CS=0; //使能CS引腳SPI_SendByte(0*04) //寫禁能指令Flash_CS=1; //禁能片選引腳}3、讀狀態(tài)時(shí)序〔指令:0*05〕:當(dāng)CS拉之把5h從DO腳到片在CK的上升沿?fù)?jù)片采,當(dāng)芯認(rèn)采到數(shù)時(shí)05h時(shí)芯就狀態(tài)值從O引腳出數(shù)據(jù)在CK的下降沿出位在?!白x態(tài)令任何候可用甚在編擦和寫態(tài)器程中也以,樣就以從態(tài)的UY位判編、除寫態(tài)存放器期有沒完畢而我知道片否以收一條令果S拉高狀存放器值一從O腳輸。S高后讀指完畢。程序設(shè)計(jì)流程:使能片選,拉低CS引腳;發(fā)送讀取指令0*04; 循環(huán)發(fā)送讀偽指令0*FF,等待非忙時(shí)跳出循環(huán); 禁能片選,拉高CS引腳。例程:voidSPI_ReadStatus(){unsignedcharFlash_Status;FLASH_CS=0; //使能片選引腳SPI_SendByte(0*05); //發(fā)送讀狀態(tài)指令do{Flash_Status=SPI_SendByte(0*FF); //發(fā)送偽指令維持時(shí)鐘等待非空跳出循環(huán),偽指令任意寫。}while(!(Flash_Status&0*01));FLASH_CS=1; //禁能片選引腳}4、寫狀態(tài)時(shí)序〔指令:0*01〕在執(zhí)行“寫狀態(tài)存放器〞指令之前,需要先執(zhí)行“寫使能〞指令。先拉低/CS引腳,然后把01h從DIO引腳送到芯片,然后再把你想要設(shè)置的狀態(tài)存放器值通過DIO引腳送到芯片,拉高/CS引腳,指令完畢,如果此時(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)?,WEL位也自動(dòng)變?yōu)?。通過對(duì)“TB〞、“BP2〞、“BP1〞、“BP0〞位寫1,就可以實(shí)現(xiàn)將芯片的局部或全部存儲(chǔ)區(qū)域設(shè)置為只讀。通過對(duì)“SRP位〞寫1,再把/WP引腳拉低,就可以實(shí)現(xiàn)制止寫入狀態(tài)存放器的功能。程序設(shè)計(jì)流程:使能片選,CS引腳拉低;發(fā)送寫狀態(tài)指令0*01;發(fā)送讀取指令0*04禁能片選,CS引腳拉高。例程:voidSPI_FLASH_WriteStatus(){FLASH_CS=0; //使能片選引腳SPI_SendByte(0*06); //寫使能指令SPI_SendByte(0*01); //寫狀態(tài)指令SPI_SendByte(0*00); //寫入狀態(tài)的數(shù)據(jù)FLASH_CS=1; //禁能片選引腳}5、讀數(shù)據(jù)時(shí)序圖〔指令:0*03〕:“讀數(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ù)〞指令完畢。當(dāng)芯片在執(zhí)行編程、擦除和讀狀態(tài)存放器指令的周期,“讀數(shù)據(jù)〞指令不起作用。程序設(shè)計(jì)流程〔指令:0*03〕:使能片選,拉低CS引腳;發(fā)送讀數(shù)據(jù)指令0*03,緊接著發(fā)送24位地址;讀以SPI_DR存放器數(shù)據(jù)禁能片選,拉高CS引腳例程:voidSPI_FLASH_BufferRead(unsignedchar*pBuffer,unsignedintReadAddr,unsignedlongintNumByteToRead){FLASH_CS=0; //拉低片選線選中芯片SPI_SendByte(READ);//發(fā)送讀數(shù)據(jù)命令SPI_SendByte((ReadAddr&0*FF0000)>>16); //發(fā)送24位FLASH地址,先發(fā)高8位SPI_SendByte((ReadAddr&0*00FF00)>>8); //再發(fā)中間8位SPI_SendByte(ReadAddr&0*0000FF); //最后發(fā)低8位while(NumByteToRead--)//計(jì)數(shù){*pBuffer=SPI_SendByte(Dummy_Byte); //讀一個(gè)字節(jié)的數(shù)據(jù)pBuffer++; //指向下一個(gè)要讀取的數(shù)據(jù)}FLASH_CS=1; //拉高片選線不選中芯片}6、快讀時(shí)序圖〔指令:0*0B〕:“快讀〞指令和“讀數(shù)據(jù)〞指令很相似,不過,“快讀〞指令可以運(yùn)行在更高的傳輸速率下。先把/CS引腳拉低,然后把0Bh通過引腳DIO送到芯片,然后把24位地址通過DIO引腳送到芯片,接著等待8個(gè)時(shí)鐘,之后數(shù)據(jù)將會(huì)從DO引腳送出去。程序設(shè)計(jì)流程〔指令:0*0B〕:使能片選,拉低CS引腳;發(fā)送快讀數(shù)據(jù)指令0*0B,緊接著發(fā)送24位地址;發(fā)送8個(gè)字節(jié)偽指令等待8個(gè)時(shí)鐘讀以SPI_DR存放器數(shù)據(jù)禁能片選,拉高CS引腳例程:voidSPI_FLASH_BufferRead(unsignedchar*pBuffer,unsignedintReadAddr,unsignedlongintNumByteToRead){FLASH_CS=0; //拉低片選線選中芯片SPI_SendByte(READ);//發(fā)送讀數(shù)據(jù)命令SPI_SendByte((ReadAddr&0*FF0000)>>16); //發(fā)送24位FLASH地址,先發(fā)高8位SPI_SendByte((ReadAddr&0*00FF00)>>8); //再發(fā)中間8位SPI_SendByte(ReadAddr&0*0000FF); //最后發(fā)低8位SPI_SendByte(0*FF); //發(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、快速讀雙輸出〔指令:0*3B〕:“快讀雙輸出〞指令和“快讀〞指令很相似,不過,“快讀雙輸出〞指令是從兩個(gè)引腳上輸出數(shù)據(jù):DI和DIO。這樣,傳輸速率就相當(dāng)于兩倍于標(biāo)準(zhǔn)的SP看傳輸速率了。這個(gè)指令特別適合于需要在一上電就把代碼從芯片下載到存中的情況或者緩存代碼段到存中運(yùn)行的情況。“快讀雙輸出〞指令和“快讀〞指令的時(shí)序差不多。先把/CS引腳拉低,然后把3Bh通過引腳DIO送到芯片,然后把24位地址通過DIO引腳送到芯片,接著等待8個(gè)時(shí)鐘,之后數(shù)據(jù)將會(huì)分別從DO引腳和DIO引腳送出去,DIO送偶數(shù)位,DO送寄數(shù)位。程序設(shè)計(jì)流程:使能片選,拉低CS引腳;寫快讀雙輸出指令0*3B,緊接著寫24位地址;寫1個(gè)字節(jié)的偽指令,等待8個(gè)時(shí)鐘;讀取SPI_DR存放器禁能片選,拉高CS引腳例程〔參考完整例程〕:暫無。8、頁編程時(shí)序圖〔指令:0*02〕:執(zhí)行“頁編程〞指令之前,需要先執(zhí)行“寫使能〞指令,而且要求待寫入的區(qū)域位都為1,也就是需要先把待寫入的區(qū)域擦除。先把/CS引腳拉低,然后把代碼02h通過DIO引腳送到芯片,然后再把24位地址送到芯片,然后接著送要寫的字節(jié)到芯片。在寫完數(shù)據(jù)之后,把/CS引腳拉高。寫完一頁(256個(gè)字節(jié))之后,必須把地址改為0,不然的話,如果時(shí)鐘還在繼續(xù),地址將自動(dòng)變?yōu)轫摰拈_場(chǎng)地址。在*些時(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ì)流程:寫使能指令0*06,將芯片WEL位置0;擦除芯片需要寫入的區(qū)域,可以用扇區(qū)、塊、芯片擦除指令;使能片選,拉低CS引腳;發(fā)送“頁編程〞指令0*02,接著發(fā)送24位地址、發(fā)送要寫入的數(shù)據(jù);發(fā)讀狀態(tài)指令0*05檢查芯片BUSY位操作是否完畢禁能片選,拉高CS引腳。例程:voidSPI_FLASH_PageWrite(unsignedchar*pBuffer,unsignedlongintWriteAddr,unsignedintNumByteToWrite){SPI_FLASH_WriteEnable(); //先使能對(duì)FLASH芯片的操作FLASH_CS=0; //拉低片選線選中芯片SPI_SendByte(WRITE);//發(fā)送頁寫命令SPI_SendByte((WriteAddr&0*FF0000)>>16); //發(fā)送24位FLASH地址,先發(fā)高8位SPI_SendByte((WriteAddr&0*FF00)>>8); //再發(fā)中間8位SPI_SendByte(WriteAddr&0*FF); //最后發(fā)低8位while(NumByteToWrite--) //發(fā)送地址后緊跟欲寫入數(shù)據(jù){SPI_SendByte(*pBuffer); //發(fā)送欲寫入FLASH的數(shù)據(jù)pBuffer++; //指向下一個(gè)要寫入的數(shù)據(jù)}FLASH_CS=1; //拉高片選線不選中芯片SPI_FLASH_WaitForWriteEnd(); //等待寫操作完畢}程序說明:*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開場(chǎng),最前面寫入的數(shù)據(jù)會(huì)被破壞,寫入的數(shù)據(jù)大于256Byte時(shí),重新用下一頁的起始地址來寫剩余的數(shù)據(jù)〔處理翻頁問題請(qǐng)?jiān)诒菊履┪膊榭赐暾獭场m摼幊掏暾鞒虉D:W25Q16總共有16Mbit空間,合計(jì)2MByte,共8192個(gè)頁,每頁256Byte。因?yàn)槊宽撌且粋€(gè)獨(dú)立的單元,所以在寫入數(shù)據(jù)時(shí)不支持自動(dòng)翻頁,如果寫入的數(shù)據(jù)超出256Byte,則頁地址就溢出歸零,數(shù)據(jù)又從零開場(chǎng)寫,也就是說最先寫入的數(shù)據(jù)會(huì)被破壞。數(shù)據(jù)寫入時(shí)可能碰到有幾種情況,一種情況是:頁地址對(duì)齊的情況,就是頁地址可以被256整除,且寫入的數(shù)據(jù)不夠256Byte,這種情況直接寫入即可,不需要考慮翻頁問題;第二種情況是:寫入的數(shù)據(jù)剛好是256Byte或者多一點(diǎn)點(diǎn),這種情況寫完一整頁的數(shù)據(jù)后,就要把頁地址加256跳到下一頁的開場(chǎng)位置寫剩余的數(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í)序圖〔指令:0*20〕:“扇區(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ì)流程:先執(zhí)行寫使能指令;使能片選,拉低CS引腳;發(fā)送扇區(qū)擦除指令0*20,緊接著發(fā)送擦除的24位地址;等待擦除指令完畢,發(fā)送讀狀態(tài)指令查看BUSY位狀態(tài)是否為0;禁能片選,拉高CS引腳。例程:voidSPI_FLASH_BlockErase(unsignedlongintBlockAddr){SPI_FLASH_WriteEnable(); //FLASH寫使能〔該函數(shù)請(qǐng)查閱完整例程〕FLASH_CS=0; //拉低片選線選中芯片SPI_SendByte(0*D8); //發(fā)送塊或扇區(qū)〔0*20〕擦除命令 SPI_SendByte((BlockAddr&0*FF0000)>>16);//發(fā)送24位FLASH擦除地址,先發(fā)高8位SPI_SendByte((BlockAddr&0*00FF00)>>8); //再發(fā)中間8位SPI_SendByte(BlockAddr&0*0000FF); //最后發(fā)低8位FLASH_CS=1; //拉高片選線不選中芯片SPI_FLASH_WaitForWriteEnd(); //等待塊去除操作完成〔該函數(shù)請(qǐng)查閱完整例程〕}10、芯片擦除時(shí)序圖〔指令:0*C7〕:“芯片擦除〞指令將會(huì)使整個(gè)芯片的存儲(chǔ)區(qū)位都變?yōu)?,即字節(jié)都變位FFh。在執(zhí)行“芯片擦除〞指令之前需要先執(zhí)行"寫使能"指令。先把/CS引腳拉低,然后再把指令代碼C7h通過DIO引腳送到芯片,然后拉高/CS引腳。如果沒有及時(shí)拉高/CS引腳,指令無效。在“芯片擦除〞指令執(zhí)行周期,可以執(zhí)行“讀狀態(tài)存放器〞指令訪問BUSY位,這時(shí)BUSY位為1,當(dāng)“芯片擦除〞指令執(zhí)行完畢,BUSY變?yōu)?,WEL位也變?yōu)?。任何一個(gè)塊區(qū)處于保護(hù)狀態(tài)(BP2\BP1\BP0),指令都會(huì)失效。程序設(shè)計(jì)流程:發(fā)送0*06寫使能;使能片選,拉低CS引腳;發(fā)送擦除指令0*C7,緊接著發(fā)送24位擦除地址;禁能片選,拉高CS引腳等待操作完成。例程:voidSPI_FLASH_ChipErase(void){SPI_FLASH_WriteEnable(); //FLASH寫使能FLASH_CS=0; //拉低片選線選中芯片SPI_SendByte(Chip_E); //發(fā)送芯片擦除命令FLASH_CS=1; //拉高片選線不選中芯片SPI_FLASH_WaitForWriteEnd(); //等待寫操作完成}11、“釋放掉電/器件ID〞指令〔命令:0*AB〕:這個(gè)指令有兩個(gè)作用。一個(gè)是“釋放掉電〞,一個(gè)是讀出“器件ID〞。當(dāng)只需要發(fā)揮“釋放掉電〞用途時(shí),指令時(shí)序是:先把/CS引腳拉低,然后把代碼“ABh〞通過DIO引腳送到芯片,然后拉高/CS引腳。然后經(jīng)過tRES1時(shí)間間隔,芯片恢復(fù)正常工作狀態(tài)。在編程、擦除和寫狀態(tài)存放器指令執(zhí)行周期,執(zhí)行該指令無效。程序設(shè)計(jì)流程:暫無例程:暫無12、掉電指令(指令:0*B9):盡管在待機(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論