TI中文支持网
TI专业的中文技术问题搜集分享网站

SM470R1B1M-HT: SCI3+DMA数据接收异常——字节错位

Part Number:SM470R1B1M-HT

       SM470通过SCI3与外部设备进行串行通信,采用DMA方式控制。在程序中配置了两个DMA package(package0、package1),package0(控制SCI3 TX)用于向外部设备发送数据回传命令,package1(控制SCI3 RX)用于自动接收外部设备的应答数据(数据总长4字节)。启动DMA后,package0先工作,完成数据回传命令发送;package1后工作,用于等待接收外部设备的应答数据。上述交互过程每秒执行128次,在大多数情况下能工作正常,但有时候会出现如下异常:

0、系统复位;

1、启动第一次与外部设备数据交互:外部设备正常回传4个字节数据;DMA本应该在外部设备应答4个字节后,触发DMA接收完成中断,实际却在接收完成第3个字节后就触发了接收完成中断;同时SCI3完成了第四个字节的接收,缓存在RXBUF中;

2、启动第二次与外部设备数据交互:在外部设备还未开始回传数据时,DMA立刻读入SCI3 RXBUF内缓存的上一帧数据的最后一个字节;随后,外部设备开始回传4个字节;当回传3个字节后,DMA因为读入了1+3=4个字节而触发接收完成中断;应答数据的第4个字节被SCI3接收并缓存在RXBUF中;

3、上述交互过程反复执行,但收发双方永远都不能同步,始终偏移一个字节;

4、尝试在DMA交互之前执行RXBUF读操作,试图提前清空RXBUF可能的残留数据,避免对本次DMA接收造成影响,但没有效果;

       请问,这种异常是如何产生的?

Yale Li:

我已经咨询了相关工程师,请关注下方链接:

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1311671/sm470r1b1m-ht-sci3-dma-data-reception-exception—byte-misalignment

,

user1127444:

感谢,已关注。系统上电重启后,要么一直正常,要么一直异常。

,

Yale Li:

客气了。除此之外,在不能对齐时,SCI模块是否会有错误产生?比如overrun?

除了这两个SCI3使用的DMA外,是否还有其它的DMA?

能否让RX的优先级高于TX?会有什么不一样的地方吗?

实验一下,如果将传入数据从128次/秒减慢到64次/秒,会不会还有不同步的情况发生?

有可能是DMA接收来自SCI的RX DMA请求的速度太快。 意思就是DMA可能在读取第3个字节之前就已收到第4个字节的DMA请求。

赞(0)
未经允许不得转载:TI中文支持网 » SM470R1B1M-HT: SCI3+DMA数据接收异常——字节错位
分享到: 更多 (0)