Очень просто использовать реализацию протокола XMODEM, найденную в PyPi. Несколько вещей, которые следует отметить в приведенном выше примере: есть вещи, которые не нужны. (Может быть, это сработало для автора или с предыдущей версией модуля?)
Документация , найденная здесь , чрезвычайно полезна, поэтому не позволяйте ей пугать вас. Понятно, что вам понадобятся отправитель и получатель, и, поскольку я не знаю, каким будет скрипт Python, вот два примера, которые я протестировал и работаю ниже. (в основном скопировано и вставлено из примеров на PyPi)
import serial
from xmodem import XMODEM
ser = serial.Serial(port='COM56')
def getc(size, timeout=8):
gbytes = ser.read(size)
print(f'Read Byte: {gbytes}')
return gbytes or None
def putc(data, timeout=8):
pbytes = ser.write(data)
print(f'Put Byte: {pbytes}')
return pbytes or None
if __name__ == '__main__':
modem = XMODEM(getc, putc)
Для получения от последовательного устройства:
stream = open('output', 'wb')
modem.recv(stream, crc_mode=0)
Для отправки на последовательное устройство:
stream = open('input', 'rb')
modem.send(stream)
Главное здесь - убедиться, что скорость передачи данных установлена с обеих сторон (здесь по умолчанию). НЕ добавляйте задержку или режим сна, так как это не время, а транзакция. распечатки позволят вам видеть транзакцию в режиме реального времени, когда данные поступают в / из файла / последовательного порта.