Я настраиваю связь UART с устройством, но не могу понять, как сгенерировать четырехбайтовую контрольную сумму, необходимую для проверки данных, которые я отправляю. В руководстве по инструменту говорится, что контрольная сумма является «32-разрядным значением без знака, которое суммирует все байты в заголовке данных и в полезной нагрузке данных. Переполнения контрольной суммы усекаются».
Я пытался среди прочего суммировать все байты данных и затем преобразовывать их в байты. Но независимо от того, что я пробую, все, что я получаю в ответ от устройства, - это сообщение об ошибке. Что я считаю из-за неправильной контрольной суммы.
Я пытаюсь использовать функцию ниже, чтобы объединить все необходимые байты. Я отправляю данные, используя библиотеку pyserial.
def empacota(flags, sequence, command, data):
cksumMsg = b""
uart_header = b"\x41\x42\x43\x44"
uart_end = b"\x44\x43\x42\x41"
data_len = bytes(len(data) + 2)
cksumMsg += flags + sequence + data_len + command + data
cksumMsg_array = bytearray(cksumMsg)
checksum_int = sum(cksumMsg_array)
checksum = checksum_int.to_bytes(5, "little")
package_data = uart_header + checksum + cksumMsg + uart_end
return(package_data)