По причине того, что из китая идет невообразимое колличество бракованных модулей 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]