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

[复制链接]
1407|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配置、代码和内存问题等
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

118

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部