打印
[PSoC™]

经验调试分享_关于PSOC6347的SPI_DMA发送数据不全问题

[复制链接]
902|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Burnon_FAE_2|  楼主 | 2023-11-14 17:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Bug现象:采用SPI-DMA读写外部FLash,在Transmit端,发送260个字节的数据包,最后只发送了256个字节后,就执行了下一条指令。

问题分析:PSoC采用Descriptor作为容器来传递数据,每个Descriptor的容量为256字节,我们需要传输超过256个字节的数据,所以需要两个Descriptor级联,才能够进行传输。
目前的Bug现象,表示DMA只完成了一个Descriptor的传输,没有链接到第二个Descriptor。

问题排查:
    ​1.通过英飞凌Descriptor的例程,把程序改成和例程一模一样后,通过观察波形,发现能够传输两个Descriptor的数据。
    ​2.一句一句的,在现在的例程上面,恢复原来的程序,进行问题点的定位,定位问题在DMA_RX的中断配置问题。(客户TX与RX的传输,均依赖于DMA_RX中断)
    ​3.问题定位在,仅传输单个的Descriptor(<256字节)的程序中,DMA_RX中断的interruptType属性配置问题,中断类型客户采用的是Trigger on descriptor completion,例程采用的是Trigger on completion of entire descriptor chain。
    ​    ​采用 Trigger on descriptor completion,则第一个Descriptor传输完毕之后,DMA传输就会停止;
       ​ ​采用 Trigger on completion of entire descriptor chain,则一个 Descriptor chain(Descriptor1+Descriptor2)传输完毕之后,DMA的传输才会停止;
    ​
所以问题在于我们目前的 SPI-DMA程序中,DMA的配置中 interruptType这一项设置错了,而导致的问题,修改完毕即可进行正常传输。

使用特权

评论回复
沙发
Jacquetry| | 2023-11-25 08:11 | 只看该作者
这是配置的问题吗

使用特权

评论回复
板凳
jcky001| | 2023-12-26 11:29 | 只看该作者
引起这种问题的因素有点多啊

使用特权

评论回复
地板
jcky001| | 2023-12-26 11:30 | 只看该作者
如SPI配置、DMA配置、代码和内存问题等

使用特权

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

本版积分规则

27

主题

41

帖子

3

粉丝