Проект

Общее

Профиль

Открытие канала (COMMAND_CHANNEL_OPEN 0x18)

Доступна настройка канала в момент его открытия. Настройки передаются по аналогии с получением информации об устройстве.
Для обратной совместимости с программным обеспечением, использующим наши устройства, временно оставлен старой механизм настройки каналов.
После посылки данной команды начнётся обмен данными с шиной.

// Используемые структуры

typedef struct {
    uint16_t Prescaler;
    uint16_t tqSeg1;
    uint16_t tqSeg2;
    uint16_t SyncJW;
} __attribute__((packed)) BusCustomBaudRate;

// Если установлен старший бит, то в 0x00FF0000U выставляется количество элементов с дополнительной информацией.
#define CC_MULTIWORD           0x80000000U

// Выставление номинальной скорости канала
#define CC_BUS_SPEED_N         0x01000000U
// Выставление скорости канала для данных. Применимо для CAN-FD
#define CC_BUS_SPEED_D         0x02000000U
// Режим работы CAN/CAN-FD канала
#define CC_CAN_MODE            0x11000000U
// Режим отправки данных в CAN-FD шину
#define CC_CAN_FRAME           0x12000000U
// Автоматически переотправлять сообщения, которые не ушли в шину. 
// Отслеживание идёт на уровне процессора, что может привести к зависанию аппаратного модуля CAN, если не шине не будет принимающих узлов
// не в режиме слушателя.
#define CC_CAN_RETRANSMIT      0x13000000U
// Настройка формата отправляемых сообщений: ISO/NonISO. Доступно в прошивке с версей 2.2.4 или новее.
#define CC_CAN_FRAME_FORMAT    0x14000000U
// Зедержка перевода LIN шины в состояния IDLE.
#define CC_LIN_IDLE_DELAY      0x21000000U

/**************************************************************************************************/
// CC_BUS_SPEED_N - Задание номинальной скорости CAN
// Данная настройка может принимать индекс заранее предопределённой скорости шины и настройки скорости шины исходя из типа используемого устройства
// (36МГц для устройств с классическим CAN / 120МГц для устройств, поддерживающих CAN-FD).
// Для использования индекса скорости флаг CC_MULTIWORD не выставляется и в младшем байте задаётся индекс скорости из следующего перечисления:
enum nominalCanBitrate {
    NOMINAL_BITRATE_10K = 0,
    NOMINAL_BITRATE_20K,
    NOMINAL_BITRATE_33_3K,
    NOMINAL_BITRATE_50K,
    NOMINAL_BITRATE_62_5K,
    NOMINAL_BITRATE_83_3K,
    NOMINAL_BITRATE_95_2K,
    NOMINAL_BITRATE_100K,
    NOMINAL_BITRATE_125K,
    NOMINAL_BITRATE_250K,
    NOMINAL_BITRATE_400K,
    NOMINAL_BITRATE_500K,
    NOMINAL_BITRATE_800K,
    NOMINAL_BITRATE_1000K,
    NOMINAL_BITRATE_DETECT = 0xFF // Если канал поддерживает механизм определения скорости шины
};
// При выставлении флага DI_MULTIWORD в следующем байте за старшим ожидается указани длины данных в 32-битных словах.
// При этом в следующих словах ожидается структура BusCustomBaudRate.
// Пример: 0x0100000B
// Представление в памяти: 0B 00 00 01
// Описание: Задать предопределённую скорость в 500кб/с.
// Пример: 0x81020000 0x000F0004 0x00010002
// Представление в памяти: 00 00 02 81 04 00 0F 00 02 00 01 00 
// Описание: Задать скорость в 500кб/с для устройства с классическим CAN. 
// Здесь Prescaler = 4 / tqSeg1 = 15 / tqSeg2 = 2 / SyncJW = 1

/**************************************************************************************************/
// CC_BUS_SPEED_D - Задание скорости данных для CAN-FD
// Данная настройка может принимать индекс заранее предопределённой скорости шины и настройки скорости шины исходя из частоты 120МГц.
// Для использования индекса скорости флаг CC_MULTIWORD не выставляется и в младшем байте задаётся индекс скорости из следующего перечисления:
enum dataCanBitrate {
    DATA_BITRATE_500K = 0,
    DATA_BITRATE_1000K,
    DATA_BITRATE_2000K,
    DATA_BITRATE_4000K,
    DATA_BITRATE_5000K
};
// При выставлении флага DI_MULTIWORD в следующем байте за старшим ожидается указани длины данных в 32-битных словах.
// При этом в следующих словах ожидается структура BusCustomBaudRate.
// Пример: 0x02000002
// Представление в памяти: 02 00 00 02
// Описание: Задать предопределённую скорость в 2000кб/с для данных.
// Пример: 0x82020000 0x00070006 0x00010002
// Представление в памяти: 00 00 02 82 06 00 07 00 02 00 01 00 
// Описание: Задать скорость в 500кб/с для устройства с классическим CAN. 
// Здесь Prescaler = 6 / tqSeg1 = 7 / tqSeg2 = 2 / SyncJW = 1

/**************************************************************************************************/
// CC_CAN_MODE - режим работы канала
// Активный режим (Normal), когда доступен и приём и передача данных, или пассивный режим (Listen only), 
// когда устройство только слушает шину данных. Значение режима передаётся в младшем байте.
enum CHANNEL_MODES {
    MODE_NORMAL   = 0x00,
    MODE_LISTEN   = 0x01,
    MODE_LOOPBACK = 0x02
};
// Пример: 0x11000001
// Представление в памяти: 01 00 00 11
// Описание: Канал настроен в режиме только прослушивания шины.

/**************************************************************************************************/
// CC_CAN_FRAME - режим отправки данных в шину.
// Для устройств, поддерживающих работу с CAN-FD можно указать режим отправки данных в шину. 
// Значение режима передаётся в младшем байте.
enum CHANNEL_CAN_FRAME {
    CAN_FRAME_CLASSIC    = 0x00,
    CAN_FRAME_FDF_NO_BRS = 0x01,
    CAN_FRAME_FDF_BRS    = 0x02
};
// Пример: 0x12000002
// Представление в памяти: 02 00 00 12
// Описание: Канал настроен в режиме передачи данных с переключением скорости.

/**************************************************************************************************/
// CC_CAN_RETRANSMIT - перепосылка данных
// Можно включить механизм автоматической, на уровне "железа", перепосылки сообщения в шину, если не 
// пришло подтверждения получения сообщения другим устройством на шине. 
// Не рекомендуется использовать, тк это может заблокировать отправку сообщений в шину.
// Включается/отключается настройка выставлением младшего бита в младшем байте.
// Пример: 0x13000001
// Представление в памяти: 01 00 00 13
// Описание: Включить автоматическую перепосылку сообщений в шину.

/**************************************************************************************************/
// CC_CAN_FRAME_FORMAT - формат передаваемых данных в шину
// Начиная с прошивки 2.2.4 есть возможность включения передачи данных для CAN-FD в формате Bosch
// Specification v1.0 (NonISO);
// Включается/отключается настройка выставлением младшего бита в младшем байте.
// Пример: 0x14000001
// Представление в памяти: 01 00 00 14
// Описание: Включить передачу данных в шину в формате NonISO.

/**************************************************************************************************/
// CC_BUS_SPEED_N - Задание номинальной скорости LIN
// Для LIN шины скорость задаётся в двух младших байтах
// Пример: 0x01004B00
// Представление в памяти: 00 4B 00 01
// Описание: Задание скорости LIN шины в 19200 б/с

/**************************************************************************************************/
// CC_LIN_IDLE_DELAY - задержка перевода LIN шины в состояние IDLE
// В младшем байте передаётся индекс предопределённого значения из списка
enum LIN_IDLE_DELAY {
    LIN_IDLE_DELAY_None = 0,
    LIN_IDLE_DELAY_100us,
    LIN_IDLE_DELAY_200us,
    LIN_IDLE_DELAY_250us,
    LIN_IDLE_DELAY_500us,
    LIN_IDLE_DELAY_750us,
    LIN_IDLE_DELAY_1000us,
    LIN_IDLE_DELAY_1500us,
    LIN_IDLE_DELAY_2000us
};
// Пример: 0x21000003
// Представление в памяти: 03 00 00 21
// Описание: Перевод шины LIN в состояние IDLE через 250 мкс.

Запрос

Поле Значение
command 0x18
sequence порядковый номер запроса
flags FLAG_CHANNEL_x
header.dSize кратное 4 количество байт
data[] настройки канала

Ответ

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

Пример
Открытие канала 1 с CAN-FD и BRS на скорости 500/2000.

⇒ 18 xx 20 20 00 00 00 11 02 00 00 12 00 00 02 81 0F 00 0C 00 03 00 01 00 00 00 02 82 06 00 07 00 02 00 01 00
⇐ 98 xx 00 00

Открытие канала 1 с CAN-FD и BRS на скорости 500/2000 с предопределёнными индексами скоростей.

⇒ 18 xx 20 20 00 00 00 11 02 00 00 12 0B 00 00 01 02 00 00 02
⇐ 98 xx 00 00

Открытие канала 2 с классическим CAN и скорость 500 кб/с на устройстве, поддерживающем CAN-FD.

⇒ 18 xx 40 14 00 00 00 11 00 00 00 12 00 00 02 81 0F 00 0C 00 03 00 01 00
⇐ 98 xx 00 00

Попытка открытия канала 5, который не предусмотрен в устройстве, с классическим CAN на скорости 500кб/с.

⇒ 18 xx A0 08 01 00 00 11 0B 00 00 01
⇐ FF xx 00 00