STM32硬件基礎(chǔ)--QaudSPI總線(xiàn)讀寫(xiě)片外FLASH(三)

【海東青電子原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處:http://www.itdecent.cn/p/3d8b6f2c95a3

N25Q是NOR FLASH,每次寫(xiě)入數(shù)據(jù)之前,需要先進(jìn)行擦除。而且,在發(fā)送寫(xiě)數(shù)據(jù)指令之前,需要先“使能寫(xiě)”(見(jiàn)上一篇:STM32硬件基礎(chǔ)--QaudSPI總線(xiàn)讀寫(xiě)片外FLASH(二))。執(zhí)行寫(xiě)之后,還需要查詢(xún)FLASH的狀態(tài)寄存器,看看是否寫(xiě)入完畢。

完整的示例代碼的下載地址:https://github.com/haidongqing/qspi-writeflash。

第一步是擦除:


圖一

擦除之前,也需要先使能寫(xiě)。發(fā)出擦除指令后,要查詢(xún)此指令是否完成,函數(shù)?QSPI_AutoPollingMemReady() 查詢(xún)FLASH是否進(jìn)入就緒狀態(tài):


圖二

.Match、.Mask 的值為什么是0x00和0x01呢?來(lái)看看N25Q的數(shù)據(jù)手冊(cè)中關(guān)于狀態(tài)寄存器的說(shuō)明:


圖三

需要查詢(xún)寄存器的bit0是否為0,所以屏蔽字是0x01,目標(biāo)值是0x00。

第二步:寫(xiě)入。


圖四

待寫(xiě)入的數(shù)據(jù)(字節(jié)類(lèi)型)保存在 aTxBuffer 中,長(zhǎng)度為 BUFFERSIZE,賦值給了 .NbDate 。執(zhí)行寫(xiě)入后,調(diào)用函數(shù)?QSPI_AutoPollingMemReady() 查詢(xún)FLASH是否寫(xiě)入完畢。

以上只是最簡(jiǎn)單的寫(xiě)FLASH示例,實(shí)際使用時(shí),最重要的是要處理跨扇區(qū)寫(xiě)的問(wèn)題,即 當(dāng)BUFFERSIZE大于FLASH的扇區(qū)size時(shí),寫(xiě)第二個(gè)扇區(qū)時(shí),要重新設(shè)置?sCommand.Address(遞增;之后的其他扇區(qū)照此類(lèi)推),可參考ST官方的例程 -- “QSPI_ReadWrite_IT” :


圖五

(完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容