snakeemail 发表于 2020-1-1 20:34

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

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大小

snakeemail 发表于 2020-1-6 18:57

大侠们,我这是linux的上位机,怎么算?

yklstudent 发表于 2020-1-7 22:03

主机也会overrun?

m564522634 发表于 2020-1-11 22:31

不是你说的原因

叶春勇 发表于 2020-1-13 08:26

fifo可以调整的

ayb_ice 发表于 2020-1-13 10:32

这个波特率不高,

chunyang 发表于 2020-1-14 16:46

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

QQ877789857 发表于 2020-2-8 11:43

不带了解,先顶一下,

publicrtos 发表于 2020-2-9 20:35

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

wooda 发表于 2020-3-2 16:17

buf一次开足就没事了,
页: [1]
查看完整版本: 串口波特率为115200,是否一定要rts,cts才保证没有接收错误