Fix CRC from read data

This commit is contained in:
Valentin Dabstep 2025-05-13 19:05:54 +03:00
parent 1122c97008
commit fca10d4140
4 changed files with 124 additions and 13 deletions

View file

@ -3,7 +3,7 @@ import time
# Конфигурация
CAN_INTERFACE = 'can0'
OLD_DEVICE_ID = 0x00
OLD_DEVICE_ID = 0x03
NEW_DEVICE_ID = 0x69
REG_WRITE = 0x8
REG_READ = 0x7
@ -24,7 +24,7 @@ def send_can_message(bus, can_id, data):
print(f"Ошибка CAN: {e}")
return False
def receive_response(bus, timeout=2.0):
def receive_response(bus, timeout=1.0):
"""Ожидание ответа"""
start_time = time.time()
while time.time() - start_time < timeout:
@ -73,7 +73,7 @@ print("Отправляем: команда изменить ID + CRC:", packet_
# Отправляем с `OLD_DEVICE_ID` в качестве адреса
send_can_message(bus, (OLD_DEVICE_ID << 4) | REG_WRITE, packet_write)
time.sleep(0.5)
time.sleep(1.0)
# ======= 2. Запрашиваем текущий ID (используем новый адрес) =======
@ -98,10 +98,13 @@ if response:
if len(data) < 4:
print("Ответ слишком короткий")
else:
id_bytes = response.arbitration_id.to_bytes(1,byteorder='little')
#buff with id and data without CRC
full_data = list(id_bytes) + list(data[:-2])
print(f"Received full_data: {list(full_data)}")
received_crc = int.from_bytes(data[-2:], byteorder='little')
print("Полученный CRC: ", received_crc)
# Расчет CRC по всему пакету без CRC
calc_crc = validate_crc16(data[:-2])
#calc CRC
calc_crc = validate_crc16(full_data)
if received_crc == calc_crc:
if data[0] == ord('I') and data[1] == NEW_DEVICE_ID:
print(f"\nУСПЕХ! ID устройства изменен на 0x{NEW_DEVICE_ID:02X}")