STM32

STM32硬件基础--QaudSPI总线读写片外FLASH(三)

2019-11-07  本文已影响0人  海东青电子

【海东青电子原创文章,转载请注明出处:https://www.jianshu.com/p/3d8b6f2c95a3

N25Q是NOR FLASH,每次写入数据之前,需要先进行擦除。而且,在发送写数据指令之前,需要先“使能写”(见上一篇:STM32硬件基础--QaudSPI总线读写片外FLASH(二))。执行写之后,还需要查询FLASH的状态寄存器,看看是否写入完毕。

完整的示例代码的下载地址:https://github.com/haidongqing/qspi-writeflash

第一步是擦除:

图一

擦除之前,也需要先使能写。发出擦除指令后,要查询此指令是否完成,函数 QSPI_AutoPollingMemReady() 查询FLASH是否进入就绪状态:

图二

.Match、.Mask 的值为什么是0x00和0x01呢?来看看N25Q的数据手册中关于状态寄存器的说明:

图三

需要查询寄存器的bit0是否为0,所以屏蔽字是0x01,目标值是0x00。

第二步:写入。

图四

待写入的数据(字节类型)保存在 aTxBuffer 中,长度为 BUFFERSIZE,赋值给了 .NbDate 。执行写入后,调用函数 QSPI_AutoPollingMemReady() 查询FLASH是否写入完毕。

以上只是最简单的写FLASH示例,实际使用时,最重要的是要处理跨扇区写的问题,即 当BUFFERSIZE大于FLASH的扇区size时,写第二个扇区时,要重新设置 sCommand.Address(递增;之后的其他扇区照此类推),可参考ST官方的例程 -- “QSPI_ReadWrite_IT” :

图五

(完)

上一篇 下一篇

猜你喜欢

热点阅读