Проект

Общее

Профиль

Отправить сообщение в шину (COMMAND_MESSAGE 0x40)

Отправка сообщения в шину происходит с помощью следующей структуры:

enum FLAG_MESSAGE_CHANNELS {
    FLAG_MESSAGE_CHANNEL_1 = 0x2000,
    FLAG_MESSAGE_CHANNEL_2 = 0x4000,
    FLAG_MESSAGE_CHANNEL_3 = 0x6000,
    FLAG_MESSAGE_CHANNEL_4 = 0x8000,
    FLAG_MESSAGE_CHANNEL_5 = 0xA000,
    FLAG_MESSAGE_CHANNEL_6 = 0xC000,
    FLAG_MESSAGE_CHANNEL_7 = 0xE000
};

// CAN 29-bit message identifier
#define FLAG_MESSAGE_EXTID              0x0800U
// CAN Remote frame
#define FLAG_MESSAGE_RTR                0x0400U
// Confirm required
#define FLAG_MESSAGE_CONFIRM_REQUIRED   0x0001U

typedef struct {
    uint32_t msgID;
    uint8_t dlc;
    uint8_t data[8];
} __attribute__((packed)) ToBusMessage;

typedef struct {
    MsgCommandHeader header;
    ToBusMessage message;
} __attribute__((packed)) SendMessage;

Если в поле message.dlc указывается длина передаваемых данных меньше 8 байт, то поле data может соответствовать количеству данных, указанных в message.dlc. Тогда header.dSize уменьшается на величину реально передаваемых данных.

Запрос

Поле Значение
header.command 0x40
header.sequence порядковый номер запроса
header.flags FLAG_MESSAGE_CHANNEL_x + FLAG_MESSAGE_xxxx
header.dSize 0x0D
message.msgID идентификатор отправляемого сообщения
message.dlc размер передаваемых данных в шину
message.data данные, передаваемые в шину

Ответ
Если выставлен флаг FLAG_MESSAGE_CONFIRM_REQUIRED и запрос успешно обработан.

Поле Значение
command 0xC0
sequence порядковый номер запроса
flags 0x00
dSize 0x00

Если запрос не обработан.

Поле Значение
command 0xFF
sequence порядковый номер запроса
flags 0x00
dSize 0x00

Пример
Передача 4 байт данных в шину с 29 битным идентификатором сообщения 0x1FF00000.

⇒ 40 xx 28 00 00 09 1F F0 00 00 04 00 00 07 F0

Передача RTR запроса в шину с 11 битным идентификатором сообщения 0x2FF.

⇒ 40 xx 24 00 00 05 00 00 02 FF 04