По причине того, что из китая идет невообразимое колличество бракованных модулей USB-UART на базе CH340, PL2303 и прочих, вот вам python-скрипт для их проверки.
Аргументами задается число проверок для каждой из частот и адрес тестируемого устройства.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import argparse
import serial
parser = argparse.ArgumentParser()
parser.add_argument('-d', dest='dev', default='/dev/ttyUSB0', help='serial device')
parser.add_argument('-c', dest='checks', default=3, type=int, help='checks')
args = parser.parse_args()
for baudrate in [256000, 128000, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200]:
BUFFSIZE = baudrate
TIMEOUT = BUFFSIZE/(baudrate/8)
with serial.Serial(args.dev, baudrate, timeout=TIMEOUT) as ser:
ser.flushInput()
ser.flushOutput()
print('* rate:%s timeout:%s buffsize:%s' % (ser.baudrate, ser.timeout, BUFFSIZE))
for C in range(0, args.checks):
SENDDATA = ''.join(random.choice('0123456789ABCDEF') for i in range(BUFFSIZE)).encode()
ser.write(SENDDATA)
RECVDATA = ser.read(BUFFSIZE)
print(' %02i result=[%s]' % (C, SENDDATA == RECVDATA))
Скрипт проходит по набору BAUDRATEs, а именно
256000, 128000, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200, пытаясь записать и считать из модуля случайным образом сгенерированный набор байт, размер которого расчитывается изсходя из текущей установленной частоты приема/передачи.
Перед тестированием модуля нужно замкнуть перемычкой контакты RX/TX друг на друга, чтобы все, что вылетало из TX попадало на RX, кстати, таким образом можно вполне однозначно тестировать например витую пару, но это на ваше усмотрение.
Возможно для доступа к устройству потребуются права администратора, если, конечно, текущий пользователь не входит в соответствующую группу, например tty.
Ниже вывод успешного тестирования модуля на базе PL2303
* rate:256000 timeout:8.0 buffsize:256000 00 result=[True] 01 result=[True] 02 result=[True] * rate:128000 timeout:8.0 buffsize:128000 00 result=[True] 01 result=[True] 02 result=[True] * rate:115200 timeout:8.0 buffsize:115200 00 result=[True] 01 result=[True] 02 result=[True] * rate:57600 timeout:8.0 buffsize:57600 00 result=[True] 01 result=[True] 02 result=[True] * rate:38400 timeout:8.0 buffsize:38400 00 result=[True] 01 result=[True] 02 result=[True] * rate:19200 timeout:8.0 buffsize:19200 00 result=[True] 01 result=[True] 02 result=[True] * rate:9600 timeout:8.0 buffsize:9600 00 result=[True] 01 result=[True] 02 result=[True] * rate:4800 timeout:8.0 buffsize:4800 00 result=[True] 01 result=[True] 02 result=[True] * rate:2400 timeout:8.0 buffsize:2400 00 result=[True] 01 result=[True] 02 result=[True] * rate:1200 timeout:8.0 buffsize:1200 00 result=[True] 01 result=[True] 02 result=[True]