关于串口设备驱动fifo问题

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

    目前在做高频数据采集分析,使用串口设备驱动(使用rs485),开启DMA+空闲中断,接收不定长数据,接收方式一对多,(即一个485接收4个设备的数据发送)。
; B7 m9 p0 Y/ V# N4 ]发送频率较快(触发式发送);数据最长的一帧有300对字节,最少37字节,DMA模式为循环模式,缓冲buf,自己理解的是DMA的buf就是serial.c中的fifo buf,
% j9 E1 c3 Y* Tbuf的size设置为2048;问题:& H$ [- A7 Y0 o6 ^, {

; E$ Z0 t0 M; F. T! C* H         1、数据接收存在粘包现象,一包数据包含两包;4 v3 p: r6 E2 m# Y
         2、大数据包出现断包现象,从未收到完整包;5 M8 T( S2 l' E8 D

  @/ w3 ?3 T& M8 w" T. h7 X         自己查看认为:串口设备驱动中的fifo不是环形buf,调用rt_serial_read();并没有把buf中的字节取出,buf依旧一直存,直到长度为DMA的设置size,标记初始为0,6 k! M$ b. {9 [7 f$ L5 i
从头来过;个人认为fifo目前的设计问题太大,接收数据不为整数倍的长度就很容易出现问题。( v. f- l1 N  I5 ^$ p' }* K* ~
6 [8 a1 U" y0 h  z4 ]" O1 n& K
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-4-23 21:32:22 | 显示全部楼层
建议先了解下 DMA 串口接收的底层实现机制,然后再去考虑你说的断包及粘包问题。
7 ?) u4 s- l' O1 p
2 }4 m. A+ O  V, {. U再者其实串口在 RT-Thread 中本来就是字符设备,包的概念是不存在的
使用道具 举报 回复
发表于 2019-4-23 22:32:24 | 显示全部楼层
你要的功能恰好我有实现,给你做个参考吧。我在公司的STM32F429平台上有实际使用过。
' q3 m, U! ~7 s0 D, V serial.rar (18.86 KB, 下载次数: 111)
使用道具 举报 回复
发表于 2019-4-24 10:53:57 | 显示全部楼层
armink 发表于 2019-4-23 21:32
) z. V% B5 L: B- n% u+ {7 G建议先了解下 DMA 串口接收的底层实现机制,然后再去考虑你说的断包及粘包问题。
, J% V2 H! {# ~& f0 r9 r% w
' h8 S: M+ ]5 ]$ p再者其实串口在 RT-Threa ...

2 B* O& Y  p! d7 n$ b2 d# V表达的可能不是很清楚,使用空闲中断+串口字符设备的读回调,默认回调读到的数据就是一个完整的包,或者换个思路,回调后的数据不加判断,全存到消息队列,在处理的时候一个一个字符读取,再判断
使用道具 举报 回复
发表于 2019-4-24 10:57:10 | 显示全部楼层
yaomo718 发表于 2019-4-23 22:32
+ |& j+ y' W1 F4 W你要的功能恰好我有实现,给你做个参考吧。我在公司的STM32F429平台上有实际使用过。
4 z8 ^$ w! l* [0 }. w
谢谢你,看了一下内容,底层配置和驱动和我现在用的差不多,这点没什么问题,主要面临的是接收到数据的后续判断和处理,
使用道具 举报 回复
发表于 2019-4-24 11:21:31 | 显示全部楼层
CC-RTT 发表于 2019-4-24 10:57
& H$ K% |. i+ h7 K3 n; z4 D谢谢你,看了一下内容,底层配置和驱动和我现在用的差不多,这点没什么问题,主要面临的是接收到数据的后 ...

5 [- W; z$ ~# x% x1 D( H: x( {1 X字符设备保证接收可靠及通知,协议层再对报文进行缓存并分发就行了,一般都是这样做的。
使用道具 举报 回复
发表于 2019-4-24 11:44:29 | 显示全部楼层
CC-RTT 发表于 2019-4-24 10:57
# @6 H/ A. `' e0 {  Y3 `+ O谢谢你,看了一下内容,底层配置和驱动和我现在用的差不多,这点没什么问题,主要面临的是接收到数据的后 ...

6 A" r3 z$ j0 x8 I: U0 a- Y我使用的时候并未出现你说的粘包问题和断包的问题,接收到数据以后按照协议解析就可以了。
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区  

© 2013-2017 上海睿赛德电子科技有限公司 沪ICP备13014002号-1

Powered by RT-Thread

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