打印
[应用相关]

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

[复制链接]
399|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
【海东青电子原创**,转载请注明出处:https://www.jianshu.com/p/3d8b6f2c95a3】
N25Q是NOR FLASH,每次写入数据之前,需要先进行擦除。而且,在发送写数据指令之前,需要先“使能写”(见上一篇:STM32硬件基础--QaudSPI总线读写片外FLASH(二)https://www.jianshu.com/p/77f7bd0817e9)。执行写之后,还需要查询FLASH的状态寄存器,看看是否写入完毕。
完整的示例代码的下载地址:https://github.com/haidongqing/qspi-writeflash。



作者:海东青电子
链接:https://www.jianshu.com/p/3d8b6f2c95a3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用特权

评论回复
沙发
parameters|  楼主 | 2020-6-26 14:42 | 只看该作者
第一步是擦除:

使用特权

评论回复
板凳
parameters|  楼主 | 2020-6-26 14:44 | 只看该作者
擦除之前,也需要先使能写。发出擦除指令后,要查询此指令是否完成,函数 QSPI_AutoPollingMemReady() 查询FLASH是否进入就绪状态:

使用特权

评论回复
地板
parameters|  楼主 | 2020-6-26 14:44 | 只看该作者
.Match、.Mask 的值为什么是0x00和0x01呢?来看看N25Q的数据手册中关于状态寄存器的说明:

使用特权

评论回复
5
parameters|  楼主 | 2020-6-26 14:46 | 只看该作者
需要查询寄存器的bit0是否为0,所以屏蔽字是0x01,目标值是0x00。

使用特权

评论回复
6
parameters|  楼主 | 2020-6-26 14:47 | 只看该作者
第二步:写入。

使用特权

评论回复
7
parameters|  楼主 | 2020-6-26 14:47 | 只看该作者
待写入的数据(字节类型)保存在 aTxBuffer 中,长度为 BUFFERSIZE,赋值给了 .NbDate 。执行写入后,调用函数 QSPI_AutoPollingMemReady() 查询FLASH是否写入完毕。

使用特权

评论回复
8
parameters|  楼主 | 2020-6-26 14:48 | 只看该作者
以上只是最简单的写FLASH示例,实际使用时,最重要的是要处理跨扇区写的问题,即 当BUFFERSIZE大于FLASH的扇区size时,写第二个扇区时,要重新设置 sCommand.Address(递增;之后的其他扇区照此类推),可参考ST官方的例程 -- “QSPI_ReadWrite_IT” :

使用特权

评论回复
9
parameters|  楼主 | 2020-6-26 14:48 | 只看该作者

作者:海东青电子
链接:https://www.jianshu.com/p/3d8b6f2c95a3
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用特权

评论回复
10
renzheshengui| | 2020-7-10 16:45 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
11
wakayi| | 2020-7-10 16:45 | 只看该作者
资料很不错

使用特权

评论回复
12
wowu| | 2020-7-10 16:46 | 只看该作者
楼主辛苦啦

使用特权

评论回复
13
xiaoqizi| | 2020-7-10 16:46 | 只看该作者
支持楼主 呵呵

使用特权

评论回复
14
木木guainv| | 2020-7-10 16:46 | 只看该作者
长知识了 呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

361

帖子

0

粉丝