因为论坛里偶有抱怨串口在高波特率下误码率很高的问题,我今天做了一次测试:
用WCH LinkE与CH340相连,程序如下:
from serial import Serial
from random import randint, randbytes
from time import sleep
#BAUD = 921600
BAUD = 115200*4
ser1 = Serial('/dev/ttyUSB0', BAUD, timeout=1)
ser2 = Serial('/dev/ttyACM0', BAUD, timeout=1)
err_1_2 = 0
err_2_1 = 0
for i in range(10000):
print('Round', i)
l = randint(1, 300)
tx_buf = randbytes(l)
ser1.write(tx_buf)
ser1.flush()
rx_buf1 = ser2.read(l)
if tx_buf != rx_buf1:
err_1_2+=1
print(f'Error comminication 1->2 {err_1_2}, tlen={l}, rlen={len(rx_buf1)}')
sleep(1)
ser2.reset_input_buffer()
ser2.write(tx_buf)
ser2.flush()
rx_buf2 = ser1.read(l)
if tx_buf != rx_buf2:
err_2_1+=1
print(f'Error comminication 2->1 {err_2_1}, tlen={l}, rlen={len(rx_buf1)}')
sleep(1)
ser1.reset_input_buffer()
print(f'Total: err_1_2 {err_1_2}, err_2_1 {err_2_1}')
经测试,在921600bps下会有100次里面1、2次的错误,在460800、115200下10000次均无错误。
当然,我只是用一个WCH LinkE,不一定具有代表性,但是可以作为一个测试思路分享给各位。