Fix CRC from read data
This commit is contained in:
parent
1122c97008
commit
fca10d4140
4 changed files with 124 additions and 13 deletions
|
@ -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}")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue