MCU的QSPI 控制器使用DMA方式读写flash丢失最后一个字节数据问题和解决方法

最近调试QSPI控制器的flash驱动,遇到了一个问题:使用DMA方式读写flash,在写成功后,读校验阶段一直返回错误,发现错误的原因是读每页的最后一个字节数据丢失。
分析过程如下:

  1. 在读校验报错的地方,打断点或者加LOG找到报错的原因是按页读取操作,每页的最后一个字节数据一直是0
  2. 使用逻辑分析仪抓数据,发现QSPI写的数据和读出来的数据都是一样的,这个和代码报错的现象不同,说明QSPI总线上的数据收发是正确的,但是到代码这里buffer丢失了最后一个字节
  3. 不使用DMA方式的话,读写flash正常。

至此,问题到了buffer上,会不会是从DMA读到buffer过程中出现问题的呢?好在最后我们主管比我有经验,将问题放到了QSPI的时序上,虽然FLASH的手册上有时序图,但是没有注明发送地址和Dummy Clock之间需要加延时

winbond flash QSPI Fast Read Cmd

然后找到了另一个FLASH的时序图做参考,虽然命令不同,但是看到在Dummy Cycles和Data之间有个tv保证了时序

在这里插入图片描述

于是在代码中加了一个delay的操作,这下DMA方式读QPSI flash没有丢失最后一个字节的数据,问题解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天的烂柯人9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值