RT-Thread论坛
直播中

张玲

8年用户 1348经验值
私信 关注
[问答]

求助,关于串口设备驱动fifo问题

目前在做高频数据采集分析,使用串口设备驱动(使用rs485),开启DMA+空闲中断,接收不定长数据,接收方式一对多,(即一个485接收4个设备的数据发送)。
发送频率较快(触发式发送);
数据最长的一帧有300对字节,最少37字节,DMA模式为循环模式,缓冲buf,自己理解的是DMA的buf就是serial.c中的fifo buf,buf的size设置为2048;
问题:

  • 1、数据接收存在粘包现象,一包数据包含两包;
  • 2、大数据包出现断包现象,从未收到完整包;
自己查看认为:串口设备驱动中的fifo不是环形buf,调用rt_serial_read();并没有把buf中的字节取出,buf依旧一直存,直到长度为DMA的设置size,标记初始为0,
从头来过;个人认为fifo目前的设计问题太大,接收数据不为整数倍的长度就很容易出现问题。


回帖(1)

潘璐

2025-9-12 17:39:23
 建议先了解下 DMA 串口接收的底层实现机制,然后再去考虑你说的断包及粘包问题。
再者其实串口在 RT-Thread 中本来就是字符设备,包的概念是不存在的          
举报

更多回帖

发帖
×
20
完善资料,
赚取积分