Проект

Общее

Профиль

Задание скорости взаимодействия с шиной (FLAG_CONFIG_BUS_SPEED 0x00)

Для настройки скорости канала устройства используется структура:

typedef struct {
    CommandHeader header;
    uint8_t speed;
} __attribute__((packed)) ChannelConfigureSpeed;

Здесь в поле speed заносится индекс предзаданной скорости. В зависимости от типа устройства этот индекс свой.

Для устройств, в названии которых есть идентификатор FDL, используется следующие индексы:

enum CAN_BITRATE_FDL {
    CAN_BITRATE_FDL_10K = 0,
    CAN_BITRATE_FDL_20K,
    CAN_BITRATE_FDL_33_3K,
    CAN_BITRATE_FDL_50K,
    CAN_BITRATE_FDL_62_5K,
    CAN_BITRATE_FDL_83_3K,
    CAN_BITRATE_FDL_100K,
    CAN_BITRATE_FDL_125K,
    CAN_BITRATE_FDL_250K,
    CAN_BITRATE_FDL_400K,
    CAN_BITRATE_FDL_500K,
    CAN_BITRATE_FDL_800K,
    CAN_BITRATE_FDL_1000K
};

Для остальных устройств из линейки CAN-Hacker используются следующие индексы:
enum CAN_BITRATE {
    CAN_BITRATE_10K = 0,
    CAN_BITRATE_20K,
    CAN_BITRATE_33_3K,
    CAN_BITRATE_50K,
    CAN_BITRATE_62_5K,
    CAN_BITRATE_83_3K,
    CAN_BITRATE_95K,
    CAN_BITRATE_100K,
    CAN_BITRATE_125K,
    CAN_BITRATE_250K,
    CAN_BITRATE_400K,
    CAN_BITRATE_500K,
    CAN_BITRATE_800K,
    CAN_BITRATE_1000K
};

Запрос

Поле Значение
header.command 0x11
header.sequence порядковый номер запроса
header.flags FLAG_CHANNEL_x + FLAG_CONFIG_BUS_SPEED
header.dSize 0x01
speed значение из CAN_BITRATE или CAN_BITRATE_FDL, в зависимости от типа устройства

Ответ
Если запрос успешно обработан и значение индекса скорости в поле speed задано из допустимого диапазона значений.

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

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

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

Пример
Настройка канала 2 на скорость 20Кбит.

⇒ 11 xx 40 01 01
⇐ 91 xx 00 00

Настройка канала 2 с заданием неверного индекса скорости.

⇒ 11 xx 40 01 10
⇐ FF xx 00 00