В блоге:

2015-05-22

Suzuki и размер данных CAN

Начиная с версии W1-2014-12-10 SZ-Viewer (для Windows) поддерживает работу с CAN через K+CAN-адаптеры. Но работа довольно нестабильная. К некоторым блокам подключается, а с другими не хочет работать.

Полгода не мог понять причину. Все усложнялось тем, что проверять надо было в чужих машинах, а на эмуляторе все работало.

Сперва о проблеме. В пакете CAN можно передать максимум 8 байтов данных. Для атомарной передачи больших данных обычно используется стандарт ISO15765-2. Он определяет разбитие больших данных на мелкие пакеты. И вот некоторые блоки в ответ на запросы моей программы присылали только первый пакет. Это касалось подключения через K+CAN, тогда как с PassThru и ELM327 все было нормально.

Сперва думал, что проблема с таймаутами. Всяко разно крутил, но ничего не помогало. И вот решил очень внимательно вычитать программный код. И нашел подозрительное место: везде отправляемые CAN-пакеты добивалась до 8-байт данных, но пакет "Flow Control" отправлялся "неполным".

Посмотрел трассировку, так и есть. Например, при подключении через K+CAN отправлялись три байта данных в CAN-пакете:

30 00 08

А при подключении через PassThru и ELM327 отправлялись восемь байтов (хотя смысл имеют только первые три, остальные - это незначащие нули):

30 00 08 00 00 00 00 00

Получается, что некоторые блоки (например, многие блоки АКПП) не понимают такой неполный "Flow Control" пакет, поэтому не продолжали отправку пакетов ответа, ограничившись только первым.

Легко исправил, проверил - все отлично. K-CAN теперь работает со всеми сузуковскими CAN-блоками, на которых удалось потестировать. В следующей версии будет это изменение.


Еще по этой теме:

0 comments:

Post a Comment

Blog Archive