关于串口设备驱动fifo问题

发表在 内核学习营2019-4-23 19:36 [复制链接] 6 532

    目前在做高频数据采集分析,使用串口设备驱动(使用rs485),开启DMA+空闲中断,接收不定长数据,接收方式一对多,(即一个485接收4个设备的数据发送)。) h7 n. b6 e6 S, a" k
发送频率较快(触发式发送);数据最长的一帧有300对字节,最少37字节,DMA模式为循环模式,缓冲buf,自己理解的是DMA的buf就是serial.c中的fifo buf,
2 O# k) [" G5 G4 H! W# n4 wbuf的size设置为2048;问题:
9 y$ G# W6 s/ E0 i& ^  J  p& q; R8 l, B. U; G! g- T
         1、数据接收存在粘包现象,一包数据包含两包;
0 q3 K' @/ [4 d" X1 q+ l& S         2、大数据包出现断包现象,从未收到完整包;% d* F# j, @& u$ K/ W

$ R% z% ~: H0 H/ t         自己查看认为:串口设备驱动中的fifo不是环形buf,调用rt_serial_read();并没有把buf中的字节取出,buf依旧一直存,直到长度为DMA的设置size,标记初始为0,: x* Y+ P' Y+ y* Y$ Y
从头来过;个人认为fifo目前的设计问题太大,接收数据不为整数倍的长度就很容易出现问题。: M! j  F3 L6 E" Z# G+ o' C
4 _9 I2 }" _0 O
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-4-23 21:32:22 | 显示全部楼层
建议先了解下 DMA 串口接收的底层实现机制,然后再去考虑你说的断包及粘包问题。6 k6 `/ \( w1 `! E1 {3 C8 T! x
2 i: n9 M2 G/ q0 M
再者其实串口在 RT-Thread 中本来就是字符设备,包的概念是不存在的
使用道具 举报 回复
发表于 2019-4-23 22:32:24 | 显示全部楼层
你要的功能恰好我有实现,给你做个参考吧。我在公司的STM32F429平台上有实际使用过。* w7 E8 Q, s; N$ R
serial.rar (18.86 KB, 下载次数: 219)
使用道具 举报 回复
发表于 2019-4-24 10:53:57 | 显示全部楼层
armink 发表于 2019-4-23 21:32
' L0 [  }) v) \建议先了解下 DMA 串口接收的底层实现机制,然后再去考虑你说的断包及粘包问题。
1 D/ |4 n& \6 J& [8 c/ u- ^/ @9 x4 y1 k5 B' N, y2 o
再者其实串口在 RT-Threa ...

3 p) S3 \! A" b& O" _# o7 [表达的可能不是很清楚,使用空闲中断+串口字符设备的读回调,默认回调读到的数据就是一个完整的包,或者换个思路,回调后的数据不加判断,全存到消息队列,在处理的时候一个一个字符读取,再判断
使用道具 举报 回复
发表于 2019-4-24 10:57:10 | 显示全部楼层
yaomo718 发表于 2019-4-23 22:32
0 j* \9 i. s" j1 a6 `* Y9 G你要的功能恰好我有实现,给你做个参考吧。我在公司的STM32F429平台上有实际使用过。

  U2 p# F6 K2 c+ D, ~6 w谢谢你,看了一下内容,底层配置和驱动和我现在用的差不多,这点没什么问题,主要面临的是接收到数据的后续判断和处理,
使用道具 举报 回复
发表于 2019-4-24 11:21:31 | 显示全部楼层
CC-RTT 发表于 2019-4-24 10:57
* x4 q+ A0 i- d5 d1 g谢谢你,看了一下内容,底层配置和驱动和我现在用的差不多,这点没什么问题,主要面临的是接收到数据的后 ...
  A' Q3 T* }" R' N! G, v
字符设备保证接收可靠及通知,协议层再对报文进行缓存并分发就行了,一般都是这样做的。
使用道具 举报 回复
发表于 2019-4-24 11:44:29 | 显示全部楼层
CC-RTT 发表于 2019-4-24 10:57
7 t6 C# I" X) \1 E4 C) C( ~谢谢你,看了一下内容,底层配置和驱动和我现在用的差不多,这点没什么问题,主要面临的是接收到数据的后 ...

% X; ^+ Z# ]1 ?# X: Q4 m我使用的时候并未出现你说的粘包问题和断包的问题,接收到数据以后按照协议解析就可以了。
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表