关于UART-RS232在高波特率丢数据事件的秃头的一个月

3 篇文章 0 订阅

前情提要,不看也行:

最近做一个数字板连接一个转台的”题目“,外界设备是STM32控制的,数字板是K7的画的PCB板,两个设备的通信呢,是通过UART-RS232进行的,主要是数字板进行指令下发(18字节)给转台和数字板接收转台的回传数据(也是18字节),回传数据里有转台当前的位置信息和上次下发的指令信息等数据。

由于系统对实时性要求比较高,位置信息最低也要100Hz吧,100*(18+1)*8=15200,(18字节+1停止位)也就是波特率最低也得15200吧,临近就是19200。这个转台是厂家做的,寄过来的时候呢,波特率460800的,回传频率可以自己设定(100-500/1000不等哈)。

说正事:

我们用FPGA呢,通过串口和转台连接,发现发送数据和接收数据都不正常,现象是1.我在调试模式看不到理想的应该回传回来的数据,有丢数据现象;2.转台无法在我发指令正确的情况下做相应的运动,转台不响应。此时我的FPGA用到的UARTLITE ip核选择的是波特率460800,axi时钟线是100MHz,独写FIFO均没开,深度为0。奥对用的是ISE软件里面的核和界面都比较老旧了。

请教了师兄和我的同学们,认为应该先找是FPGA的问题还是FPGA外围线路的问题,看了看VIVADO里在时钟为100M情况下波特率最高也就230400,于是乎数字板-232usb线-电脑,用电脑的串口助手看结果总行了吧,在数字板发数据的过程中,串口助手均显示丢数据!直到波特率为38400才正常,丢的什么样子呢,很规律的每次都是变为另一组数据,但是出现的时间又没有规律下图:

不合理,受同学启发,这数字板上的UART-RS232芯片值得关注一下,芯片名MAX3232ipw,ipw是个后缀,现在带这个后缀快停产了,说明比较旧性能肯定也比不上现在在产的,官方手册显示,MAX3232系列最高的数据速率为250Kbps,也就是波特率最高也就用个230400吧。那么有问题的波特率范围变小了,变为了38400~230400.那中间缺失的是为啥啊。(烦死了要秃头了啊

又请教了热心网友,这个网友看似很懂,他本科毕业在一家养老国企,业余时间就玩玩板子,看起来是真爱啊。他用的好像是中断模式了,自发自收应该是。不过他说出了一个点:FIFO缓存。想来也有道理。如果数据传输特别快的话,有个FIFO缓存一下多少能有改善吧,但是改了没啥用啊,FIFO缓存0/32/512三个选项,没变化,放弃。

后来啊,把所有的线收起来了(此处有伏笔),因为去调别的了,当我再用的时候就随便换了一根线,然后当我烧上波特率为230400的程序时,用数字板给电脑发数据,我的串口调试助手的结果竟然正常了!我简直不敢相信我的眼睛,怀疑是不是还没睡醒出现幻觉了,反复确认程序确实是230400的波特率没错时,告诉了同门,这系统最后是他用,让他知道一下。。。然后发现变量只有那根RS232-USB线不一样。。。。。这不离谱呢?之前转台连电脑,串口助手结果正常啊???虽然用这根线烧STM32的时候,烧不进去,确实是线不行才烧不进去。然后在淘宝链接里发现这线支持最高波特率128000,行吧,烧程序波特率要115200,能烧才怪,但是转台波特率是460800竟然能传给电脑并且没有出错。也挺奇怪的。

紧接着赶紧有这个好一点的线测了FPGA,230400没问题,115200没问题,再低肯定也没问题了。索侧面反映MAX3232性能跟手册写的还挺一致哈。 

为啥呢?就挺秃然的。转台连电脑,就没有数据丢失呢?

看看电平。。。。(注意纵轴的刻度)

FPGA的输出电平低,猜测:垃圾线的驱动能力差吧。。连接转台,转台输出电平高,体现不出垃圾线的缺点,但FPGA电平低一点垃圾线的缺点就暴露了。

能看到垃圾线跟好线的电平差的有点多啊,此时回忆起了各种资料里RS232协议:

能看出这个便宜线确实不太行啊,电平没在规定里啊都,趁早扔掉,便宜没好货,同门买的线,这就去骂他。

行吧,总结一下就是由于设备本身RS232输出电平有差异,RS232-USB线的芯片不一样,驱动能力也不同,强弱组合看不出差距,但弱弱组合就是菜鸡了,跟我一样。。。还有就是买线要买好线啊。便宜线吃大亏啊/笑哭

还有一点存疑就是看了网上各种资料都说RS232协议最好用在速率20k以内,这个好像我用高了也没啥事啊?不知道是不是我理解的不对,但我不想管了、、、

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
串口通信是一种常见的电子设备之间数据传输的方式,常用于计算机和外部设备之间的数据传递。串口通信涉及到几个重要的概念,包括UARTRS232、RS422和RS485。 UART代表通用异步收发器(Universal Asynchronous Receiver/Transmitter),它是指一种硬件电路,用于实现串行数据传输。UART负责将并行数据转换为串行数据并进行传输,同时将接收到的串行数据转换为并行数据供主设备使用。UART通常使用两条线进行传输,一条用于发送数据,一条用于接收数据RS232是一种串口通信标准,常用于计算机和外部设备之间的数据传输。它使用串口连接并使用DB-9或DB-25连接器。RS232定义了传输数据的电气特性和信号电平,以及传输的协议。RS232支持全双工通信,即可以同时传输和接收数据。 RS422是一种更为先进的串口通信标准,用于在长距离和速传输的环境下进行数据传输。RS422可以同时传输数据和接收数据,并使用四线电缆进行传输。RS422使用差分信号来提传输的抗干扰能力和传输距离。 RS485是另一种串口通信标准,也适用于长距离和速传输环境。RS485可以连接多个设备,允许多个设备之间进行数据传输。RS485也使用差分信号进行传输,提供了更的传输距离和抗干扰能力。 在实际应用中,如果需要通过串口进行数据传输,首先需要确定要使用的串口标准。如果是较短距离和低速传输,可以选择RS232;如果是较长距离和速传输,RS422或RS485可能更适合。然后,需要配置对应的硬件设备和软件驱动程序来实现串口通信。在数据传输过程中,发送端将数据转换成串行数据,并通过所选的串口标准进行传输,然后接收端将串行数据转换为并行数据进行处理。 总之,串口通信是一种常见的数据传输方式,需要了解UARTRS232、RS422和RS485等概念。选择合适的串口标准来进行数据传输,并配置相应的硬件设备和软件驱动程序来实现串口通信

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dayana_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值