Запрос информации об устройстве (COMMAND_DEVICE_INFO 0x06)¶
Вместо формирования нескольких запросов для получения информации об устройстве можно отправить единую команду, по которой будет отправлена полная информация о версии прошивки, аппаратного обеспечения, серийном номере и прочее.
Результатом запроса будет массив из uint32_t элементов.
// Если установлен старший бит, то в 0x00FF0000U выставляется количество элементов с дополнительной информацией.
#define DI_MULTIWORD 0x80000000U
// Информация о типе устройства. Хранится в младшем байте. Возможные значения представлены в HWIdentifiers.
#define DI_HARDWARE_ID 0x01000000U
// Версия прошивки. Используется с флагом DI_MULTIWORD. Версия прошивки сохраняется в дополнительных элементах
// в виде ASCII строки, которая ограничивается 0x0 или длиной массива, выделенного под этот параметр.
#define DI_FIRMWARE_VERSION 0x02000000U
// Серийный номер устройства. Используется с флагом DI_MULTIWORD. Серийный номер представлен в бинарном виде.
#define DI_DEVICE_SERIAL 0x03000000U
// Битовая маска поддерживаемых дополнительных функций устройства. Описание ниже.
#define DI_FEATURES 0x11000000U
// Карта поддерживаемых каналов и их типов. Может использоваться с флагом DI_MULTIWORD. Тогда описание каланов
// располагается в дополнительных элементах. Младший байт отвечает за первый канал, старший за максимальный.
// Без флага DI_MULTIWORD используется 3 младших байта. Описание ниже.
#define DI_CHANNEL_MAP 0x12000000U
// Доступные опции по каналам.
#define DI_CHANNEL_FEATURES 0x13000000U
// Настройки доступных фильтров по каналам.
#define DI_FILTER 0x14000000U
// Настройки шлюза по каналам.
#define DI_GATEWAY 0x15000000U
// Информация, на какой частоте работает CAN/CAN-FD модуль.
#define DI_CHANNEL_FREQUENCY 0x16000000U
// Информация о размере буфера для поддержки протокола ISO-TP.
#define DI_ISOTP 0x21000000U
// Информация о размере буфера для трейсера.
#define DI_TX_BUFFER 0x22000000U
// Информация о количестве заданий на периодическую отправку в шину.
#define DI_TX_TASK 0x23000000U
/**************************************************************************************************/
// DI_HARDWARE_ID - Идентификатор устройства
enum HWIdentifiers {
HW_CH30 = 0xFF, /* Old identifier for CAN-Hacker on F105 mcu with dual CAN channels and single LIN channel */
HW_ODB_OLD = 0x02, /* Old identifier for CAN-Hacker in ODB interface with single CAN channel and single LIN channel */
HW_CH32 = 0x01, /* CAN-Hacker 3.2 on F105 mcu with dual CAN channels and single LIN channel */
HW_ODB = 0x04, /* CAN-Hacker in ODB interface on F105 mcu with single CAN channel and single LIN channel */
HW_CHP = 0x03, /* CAN-Hacker CH-P on F105 mcu with dual CAN channels and single LIN channel */
HW_CH33 = 0x11, /* CAN-Hacker 3.3 on F407 mcu with dual CAN channels and single LIN channel */
HW_CHPM03 = 0x13, /* CAN-Hacker CH-P on F407 mcu with dual CAN channels and single LIN channel */
HW_ODB_FD = 0x14, /* CAN-Hacker in ODB interface on G431 mcu with single CANFD channel and single LIN channel */
HW_FDL2_M02 = 0x06 /* CAN-Hacker CH-P on G473 mcu with dual CANFD channels and single LIN channel */
HW_FDL2_M05 = 0x16 /* CAN-Hacker CH-P on G473 mcu with dual CANFD channels and single LIN channel */
};
// Пример: 0x01000001
// Представление в памяти: 01 00 00 01
// Описание: Идентификатор устройства 0x01, что соответствует HW_CH32.
/**************************************************************************************************/
// DI_FIRMWARE_VERSION - Версия используемой прошивки
// Пример 1: 0x82020000 0x2E322E32 0x00392E30
// Представление в памяти: 00 00 02 82 32 2E 32 2E 30 2E 39 00
// Описание: Содержит версию прошивки 2.2.0.9
// Пример 2: 0x82020000 0x2E322E32 0x30312E30
// Представление в памяти: 00 00 02 82 32 2E 32 2E 30 2E 31 30
// Описание: Содержит версию прошивки 2.2.0.10
/**************************************************************************************************/
// DI_DEVICE_SERIAL - Серийный номер устройства
// Пример: 0x83020000 0x00000000 0x01000000
// Представление в памяти: 00 00 02 83 00 00 00 00 00 00 00 01
// Описание: Серийный номер устройства 00 00 00 00 00 00 00 01
/**************************************************************************************************/
// DI_FEATURES - Флаги доступных функций устройства
// Поддерживается шлюз между каналами. Если данный флаг установлен, то дополнительно будет информация
// о настройках шлюза в DI_GATEWAY.
#define DI_FEATURE_GATEWAY 0x00000001U
// Устройство поддерживает возможность отправки и приёма сообщений в формате ISO-TP (ISO 15765-2).
#define DI_FEATURE_ISOTP 0x00000002U
// Поддерживается буфер передачи данных из трейсера для выдерживания таймингов.
// Если данный флаг установлен, то дополнительно будет информация о размере буфера в DI_TX_BUFFER.
#define DI_FEATURE_TX_BUFFER 0x00000004U
// Поддерживается периодическая отправку данных в шину с заданными интервалами.
// Если данный флаг установлен, то дополнительно будет информация о количестве заданий, которое может
// обработать устройство в DI_TX_TASK.
#define DI_FEATURE_TX_TASK 0x00000008U
// Пример: 0x11000009
// Представление в памяти: 09 00 00 11
// Описание: Доступны функции шлюза и периодическая отправка на CAN шине.
/**************************************************************************************************/
// DI_CHANNEL_MAP - Карта каналов устройства
enum ChannelTypeEnum {
CTE_None = 0x00, /* Канал не используется и дальше ничего нет */
CTE_CAN = 0x01,
CTE_CANFD = 0x02,
CTE_LIN = 0x10
};
// Пример: 0x12100101
// Представление в памяти: 01 01 10 12
// Описание: 3 канала: 1-CAN, 2-CAN и 3-LIN.
/**************************************************************************************************/
// DI_CHANNEL_FEATURES - Доступные опции для канала. Для каждого канала своя запись.
// Маска канала, для которого пришло описание опций. Каналы нумеруются с 1.
#define DI_CHANNEL_CHANNEL_MASK 0x00FF0000U
#define DI_CHANNEL_CHANNEL_SHIFT 16
// На канале есть контроль Arbitration Lost
#define DI_CHANNEL_FEATURE_ALC 0x00000001U
// На канале есть возможность управлять подключением терминирующего резистора для CAN
#define DI_CHANNEL_FEATURE_TERMINATOR 0x00000002U
// На канале есть возможность управлять подтяжкой линии данных для LIN
#define DI_CHANNEL_FEATURE_PULLUP 0x00000004U
// На канале поддерживается определение скорости шины классического CAN
#define DI_CHANNEL_FEATURE_CSD 0x00000008U
// Для LIN шины можно установить задёржку определения IDLE
#define DI_CHANNEL_FEATURE_IDLE 0x00000010U
// На канале поддерживается определение скорости шины CANFD
#define DI_CHANNEL_FEATURE_DSD 0x00000020U
// На канале возможно выставление формата CANFD фреймов в стиле NonISO
#define DI_CHANNEL_FEATURE_NONISO 0x00000040U
// Пример: 0x13010002
// Представление в памяти: 02 00 01 13
// Описание: Для первого канала доступно управление подключением терминирующим резистором.
/**************************************************************************************************/
// DI_FILTER - Настройки фильтров. Для каждого канала может быть несколько посылок.
// Маска канала, для которого пришло описание фильтра. Каналы нумеруются с 1.
#define DI_FILTER_CHANNEL_MASK 0x00FF0000U
#define DI_FILTER_CHANNEL_SHIFT 16
// Маска типа фильтра.
#define DI_FILTER_TYPE_MASK 0x0000FF00U
#define DI_FILTER_TYPE_SHIFT 8
// Фильтр 8 бит
#define DI_FILTER_TYPE_8BIT 0x00000001U
// Фильтр 11 бит
#define DI_FILTER_TYPE_11BIT 0x00000002U
// Фильтр 29 бит
#define DI_FILTER_TYPE_29BIT 0x00000004U
// Маска количества фильтров.
#define DI_FILTER_SIZE_MASK 0x000000FFU
#define DI_FILTER_SIZE_SHIFT 0
// Пример: 0x1401060E
// Представление в памяти: 0E 06 01 14
// Описание: Фильтр для канала 1 в количестве 14 штук, которые являются 11- и 29- битными.
// Пример: 0x1401021С 0x14010408
// Представление в памяти: 1С 02 01 14 08 04 01 14
// Описание: Фильтры для канала 1, где с 0 по 27 являются 11-битрыми, а с 28 по 35 являются 29-битными.
/**************************************************************************************************/
// DI_GATEWAY - Описание возможных пробросов сообщений между каналами и количество фильтров.
// Маска исходного канала (нумерация c 1)
#define DI_GATEWAY_SRC_MASK 0x00FF0000U
#define DI_GATEWAY_SRC_SHIFT 16
// Маска канала назначения (нумерация c 1)
#define DI_GATEWAY_DST_MASK 0x0000FF00U
#define DI_GATEWAY_DST_SHIFT 8
// Маска количества фильтров шлюза
#define DI_GATEWAY_FILTER_MASK 0x000000FFU
#define DI_GATEWAY_FILTER_SHIFT 0
// Пример: 0x15010210
// Представление в памяти: 10 02 01 15
// Описание: Возможен проброс сообщений из канала 1 в канал 2 и установкой 16 фильтров.
/**************************************************************************************************/
// DI_CHANNEL_FREQUENCY - Частота, на которой работает модуль для работы с CAN/CAN-FD, и которую
// необходимо учитывать для расчёта параметров задания скорости шины.
// Пример: 0x15010078
// Представление в памяти: 78 00 01 15
// Описание: Частота работы модуля CAN/CAN-FD на первом канале 120МГц.
/**************************************************************************************************/
// DI_TX_BUFFER - Размер буфера отправки сообщений в шину для трейсера.
// Размер буфера указывается в количестве сообщений, которые будут отправляться с заданными интервалами.
// Пример: 0x22000010
// Представление в памяти: 10 00 00 22
// Описание: Буфер рассчитан на 16 сообщений.
/**************************************************************************************************/
// DI_TX_TASK - Количество ячеек памяти, в которые можно поместить задания на периодическую отправку сообщений.
// Пример: 0x23000010
// Представление в памяти: 10 00 00 23
// Описание: Буфер рассчитан на 16 сообщений.
Запрос
Поле | Значение |
command | 0x06 |
sequence | порядковый номер запроса |
flags | 0x00 |
dSize | 0x00 |
Ответ
Поле | Значение |
header.command | 0x06 |
header.sequence | порядковый номер запроса |
header.flags | 0x00 |
header.dSize | кратное 4 количество байт |
data[] | данные с информацией об устройстве |
Пример
⇒ 06 xx 00 00
⇐ 06 xx 00 38 01 00 00 01 00 00 02 82 32 2E 32 2E 30 2E 39 00 00 00 02 83 00 00 00 00 00 00 00 00 01 00 00 11 01 01 10 12 0E 06 01 14 0E 06 02 14 08 01 03 14 20 02 01 15 20 01 02 15