【海东青电子原创文章,转载请注明出处: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” :
图五(完)
网友评论