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

[复制链接]
613|10
 楼主 | 2020-1-1 20:34 | 显示全部楼层 |阅读模式
1.上位机跑的是linux,子模块通过串口和上位机通讯,波特率115200.结果发现linux接收有overrun。
具体的要求为挂机三天,不能出现overrun。

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

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

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


使用特权

评论回复
| 2020-1-1 21:33 | 显示全部楼层
自己大致计算一下,串口的FIFO有多大,串口是否中断处理,是否有更高级的中断占据较长的时间。

使用特权

评论回复
| 2020-1-1 22:01 | 显示全部楼层
如果串口一直接收就一直中断,环形缓冲区就会满,然后就禁止中断,然后就错过一些数据…

使用特权

评论回复
| 2020-1-2 11:29 | 显示全部楼层
没有听说过

使用特权

评论回复
| 2020-1-6 18:51 | 显示全部楼层
可以硬件流控制,或者增加buffer,算清楚一个轮询cycle到buffer的时间,以及处理buffer需要的时间,就能理论上算出不会overflow的buffer大小

使用特权

评论回复
 楼主 | 2020-1-6 18:57 | 显示全部楼层
大侠们,我这是linux的上位机,怎么算?

使用特权

评论回复
| 2020-1-7 22:03 | 显示全部楼层
主机也会overrun?

使用特权

评论回复
| 2020-1-11 22:31 | 显示全部楼层
不是你说的原因

使用特权

评论回复
| 2020-1-13 08:26 | 显示全部楼层
fifo可以调整的

使用特权

评论回复
| 2020-1-13 10:32 | 显示全部楼层
这个波特率不高,

使用特权

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

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /2 下一条

在线客服 快速回复 返回顶部 返回列表