打印

串口波特率为115200,是否一定要rts,cts才保证没有接收错误

[复制链接]
2719|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
snakeemail|  楼主 | 2020-1-1 20:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.上位机跑的是linux,子模块通过串口和上位机通讯,波特率115200.结果发现linux接收有overrun。
具体的要求为挂机三天,不能出现overrun。

2.我的看法是,由于linux不是实时操作系统,所以一旦波特率过高,linux是没法保证一定没有overrun。即使上位机的cpu频率很高,也没有用。
只能靠rts和cts这些硬件控制。

另外我看以前的拨号moden也是用rts和cts,所以我觉得要加硬件流控。

请大家说说我的看法对吗?


使用特权

评论回复

相关帖子

沙发
gx_huang| | 2020-1-1 21:33 | 只看该作者
自己大致计算一下,串口的FIFO有多大,串口是否中断处理,是否有更高级的中断占据较长的时间。

使用特权

评论回复
板凳
steelen| | 2020-1-2 11:29 | 只看该作者
没有听说过

使用特权

评论回复
地板
forrest11| | 2020-1-6 18:51 | 只看该作者
可以硬件流控制,或者增加buffer,算清楚一个轮询cycle到buffer的时间,以及处理buffer需要的时间,就能理论上算出不会overflow的buffer大小

使用特权

评论回复
5
snakeemail|  楼主 | 2020-1-6 18:57 | 只看该作者
大侠们,我这是linux的上位机,怎么算?

使用特权

评论回复
6
yklstudent| | 2020-1-7 22:03 | 只看该作者
主机也会overrun?

使用特权

评论回复
7
m564522634| | 2020-1-11 22:31 | 只看该作者
不是你说的原因

使用特权

评论回复
8
叶春勇| | 2020-1-13 08:26 | 只看该作者
fifo可以调整的

使用特权

评论回复
9
ayb_ice| | 2020-1-13 10:32 | 只看该作者
这个波特率不高,

使用特权

评论回复
10
chunyang| | 2020-1-14 16:46 | 只看该作者
不是必须,关键在于收发双方的波特率要准确,传输线缆满足要求,距离有限。至于接收端来不及处理溢出的问题,那跟软件编制有关,内存中开个接收缓存区即可。别说Windows下了,即使是在Linux下,有大量基于串口的工控设备,若是天然需要流控,早都该是“标准”了。既然无此“标准”,显然根本不需要。

使用特权

评论回复
11
QQ877789857| | 2020-2-8 11:43 | 只看该作者
不带了解,先顶一下,

使用特权

评论回复
12
publicrtos| | 2020-2-9 20:35 | 只看该作者
现在主机的运行速度足够快的,完全不需要进行rts和cts流控。如果仍然有溢出,说明驱动程序参数没调好或驱动程序本身问题多。当然也有可能是主机的uart接口性能差,例如uart没有fifo也不支持dma,每接收一个字节都需要中断服务程序处理,如果这样的话,用流控也于事无补。

使用特权

评论回复
13
wooda| | 2020-3-2 16:17 | 只看该作者
buf一次开足就没事了,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:提供500W线性 交流电源。0~300VAC,45~500Hz 提供10KW,0-330V直流电源,具体见http://blog.21ic.com/user1/3639/archives/2012/88528.html

547

主题

1910

帖子

8

粉丝