У меня есть компьютер с Windows, на котором я использую Pyserial для записи и чтения нескольких COM-портов с помощью многопоточной программы.
Работает в настройках у меня. Когда я запускаюсь на другом компьютере, после записи ответа на поток UART не вижу.
EDIT:
Я использовал функцию mtrace для отслеживания в Linux, он говорит, что возвращают None, это ничего не значит читать.
serialposix.py(483): ready, _, _ = select.select([self.fd, self.pipe_abort_read_r], [], [], timeout.time_left())
--- modulename: serialutil, funcname: time_left
serialutil.py(139): if self.is_non_blocking:
serialutil.py(141): elif self.is_infinite:
serialutil.py(142): return None
Хотите знать, что может вызвать проблему?
Я проверил эхо rx и tx путем укорачивания, и я вижу, что выводы правильные.
Я только что добавил ввод и сброс данных перед записью и чтением. Я проверил темы также без условий гонки.
Хотите знать, что некоторые буферы в UART неправильно очищены?
- Есть ли у python какой-либо эквивалент Strace для отслеживания того, что происходит на fd?
Несмотря на то, что запись блокирует вызов для безопасной стороны, многопоточность добавила задержку 0,5 секунды.
Мой серийный код:
def serial_io():
device = serial.Serial(COM1, baudrate=115200, bytesize=8, parity='N', stopbits=1,
timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
#reseting the ouput buffer here
reset_output_buffer()
packet = bytearray()
packet.append(0x5A)
packet.append(0xA5)
packet.append(0x01)
packet.append(0x20)
packet.append(0x3D)
packet.append(0xFF)
packet.append(0x01)
packet.append(0x00)
packet.append(0xA1)
packet.append(0xFE)
device.write(packet)
time.sleep(0.5)
#resetting the input buffer here
reset_input_buffer()
run = True
while run:
data=device.readline()
print(data)
if (data == TEST_END):
print("TEST DONE")
run = False
device.close()