Налаштувати обмін данними між jetson nano та іншим пристроєм по can шині за допомогою RS485 CAN документація і приклади тут:
https://www.waveshare.com/wiki/RS485_CAN_for_Jetson_Nano
Пакет даних, що передаються розбивається на фрейми розміром по 8 байт, кодування перших 7 байт фрейму - ASCII,
в останньому байті зворотній лічильник фреймів integer - що не конвертується в ASCII.
З даних що є у пакеті генерується контрольна сума і підствляється в кінці пакету:
Функцій для генерації контрольної суми:
uint16_t crc_chk_value(uint8_t *data, uint16_t size)
{
uint16_t crc = 0;
while (size--)
{
crc ^= *data++;
for (unsigned k = 0; k < 8; k++)
crc = crc & 1 ? (crc >> 1) ^ 0xa001 : crc >> 1;
}
return crc;
}
Якщо в останньому фреймі залишається вільне місце, він заповнюється нулями.
Приклад пакету:
50.4109268:30.4138508:1:3.4409263:2.7047162:12.2390471:-0.0229414:0.0026540:0.0615221:12:
Контрольна сума:
50205
Всього в нас виходить 6 фреймів
1 фрейм (побайтово):
0x35, 0x30, 0x2e, 0x34, 0x31, 0x30, 0x39, x5 - лічильник фреймів, у останнього він x0
Задача:
1)Прийняти пакет з Can шини;
2)Перевірити чи вірна контрольна сума;
3)Якщо контрольна сума вірна, надати відповідь в кен шину "all is clear:crc"
де crc - контрольний підпис - пакет розбити так само на фрейми;
4)Врахувати необхідність збереження даних у буфер, адже проміжок між пакетами дуже маленький.