Candump показывает 29-битные идентификаторы вместо 11-битных - не может воспроизводить коды

Попытка воспроизвести коды CAN для Dodge Promaster 2018 с помощью can-utils. Из того, что я прочитал, они используют 11-битный CAN ID. Однако, когда я использую:

candump -L can0 > can.log

Журнал показывает 29-битные идентификаторы

(1519238827.107818) can0 04394100#00000000F0006000
(1519238827.122395) can0 063D4000#4652000080FE0000
(1519238827.126761) can0 04394000#000000AB
(1519238827.147822) can0 03029000#0000000000000000
(1519238827.152676) can0 06254000#00FFFF00FFFFFF00
(1519238827.157823) can0 03029100#0000000000000000
(1519238827.207842) can0 04394100#00000000F0006000
(1519238827.222727) can0 06314000#0000000000000000
(1519238827.226953) can0 04394000#000000AB
(1519238827.244633) can0 0E094000#001A00000409
(1519238827.247843) can0 03029000#0000000000000000
(1519238827.249614) can0 0E094003#001A
(1519238827.251375) can0 0E094020#000A
(1519238827.253121) can0 0E09400A#001A
(1519238827.254935) can0 0621400A#0000
(1519238827.257940) can0 03029100#0000000000000000
(1519238827.262128) can0 06314020#100000BC

Я думаю, именно поэтому воспроизведение с canplayer не работает. Кто-нибудь знает, как я могу заставить Candump использовать 11-битные идентификаторы?

0 ответов

Вы не можете принудительно использовать 11-битные идентификаторы, поскольку формат фрейма определяется битом в поле арбитража (см. Википедия - шина CAN, подраздел "Фрейм данных"). После быстрого просмотра статьи, на которую вы ссылались, я увидел, что модель автомобиля 2000-х годов, а ваша машина 2018 года. За это время, вероятно, было сделано много изменений.

В заключение: ваша проблема не одна, ваша статья слишком старая и не соответствует вашей машине.

Вы можете использовать команду Candump с параметром фильтра, как показано ниже:

  Up to 16 CAN interfaces with optional filter sets can be specified
    on the commandline in the form: <ifname>[,filter]*

    Comma separated filters can be specified for each given CAN interface:
     <can_id>:<can_mask> (matches when <received_can_id> & mask == can_id & mask)
     <can_id>~<can_mask> (matches when <received_can_id> & mask != can_id & mask)
     #<error_mask>       (set error frame filter, see include/linux/can/error.h)
     [j|J]               (join the given CAN filters - logical AND semantic)

    CAN IDs, masks and data content are given and expected in hexadecimal values.
    When can_id and can_mask are both 8 digits, they are assumed to be 29 bit EFF.
    Without any given filter all data frames are received ('0:0' default filter).

    Use interface name 'any' to receive from all CAN interfaces.

    Examples:
    candump -c -c -ta can0,123:7FF,400:700,#000000FF can2,400~7F0 can3 can8
    candump -l any,0~0,#FFFFFFFF    (log only error frames but no(!) data frames)
    candump -l any,0:0,#FFFFFFFF    (log error frames and also all data frames)
    candump vcan2,92345678:DFFFFFFF (match only for extended CAN ID 12345678)
    candump vcan2,123:7FF (matches CAN ID 123 - including EFF and RTR frames)
    candump vcan2,123:C00007FF (matches CAN ID 123 - only SFF and non-RTR frames)
Другие вопросы по тегам