CANEmu/README.md

7.4 KiB
Raw Blame History

Устройство эмуляции CAN-ошибок

Устройство предназначено для генерации CAN-кадров с возможностью намеренного внесения ошибок в различные поля кадра. Это позволяет тестировать устойчивость и обработку ошибок в CAN-сетях, а также проверять поведение принимающих устройств.


Основные возможности

В папке can_emul_term находится терминалка для генерации CAN-кадров

В вкладке setup настраивается обмен по Modbus:

  • Выбирается COM порт для общения с STM
  • Выбирается период опроса Modbus
  • Скорость 115200 bps, 1 stop bit, none parity, none flow control

В вкладке CAN EMULATOR настраивается скорость CAN, период посылок и CAN фрейм.

Возможности:

  • Передача данных по регистрам океана.
  • Генерация рандомного ID в CAN-кадре.
  • Генерация стандартных (11-бит ID) и расширенных (29-бит ID) CAN-кадров.
  • Передача данных с заданным битрейтом (напр. 125 / 250 / 500 / 1000 Кбит/с).
  • Возможность внесения ошибок:
    • Инверсия полей IDE, RTR, SRR, r1, r0.
    • Инверсия одного бита данных или ID.
    • Ошибка CRC.
    • Отключение бит-стаффинга (stuff bits).
  • Работа в двух режимах: одиночный кадр или периодическая отправка.

Для разработчика

Структура управления

Устройство управляется через Modbus-регистр, состоящий из:

  • Коилов (флагов) — включение функций и ошибок.
  • Холдинг-регистров — задание параметров кадра.

Холдинг-регистры

Настройка параметров CAN:

Название поля Адрес Описание
CAN_BITRATE_KBPS 0 Битрейт CAN в Кбит/с
CAN_PERIOD 1 Интервал отправки в мс (если включен START_POLLING)

Настройка CAN-кадра:

Название поля Адрес Описание
CAN_ID_HI 2 Старшая часть CAN ID
CAN_ID_LO 3 Младшая часть CAN ID
CAN_DLC 4 Длина данных (08 байт)
CAN_DATA_0 ... CAN_DATA_7 1623 Данные для передачи (до 8 байт)

На будущее:

Название поля Адрес Описание
DATA_UNIX_HI 64 Время в системе UNIX (старшое слово)
DATA_UNIX_LO 65 Время в системе UNIX (младшее слово)

Адреса коилов

Для управления CAN:

Название поля Адрес Описание
START_POLLING 0 Запуск периодической отправки
START_SINGLE_FRAME 1 Однократная отправка кадра
HEADER_IDE 2 Режим кадра: 0 = стандартный, 1 = расширенный
HEADER_RTR 3 Remote Transmission Request (1 = запрос)

Для выставления ошибок:

Название поля Адрес Описание
FLIP_SRS 16 Инвертировать SRR-бит
FLIP_IDE 17 Инвертировать IDE
FLIP_RTR 18 Инвертировать RTR
FLIP_R1 19 Инвертировать r1
FLIP_R0 20 Инвертировать r0
FLIP_MSGID_BIT 21 Инвертировать старший бит ID
FLIP_DATA_BIT 22 Инвертировать один бит данных
FLIP_CRC_BIT 23 Инвертировать CRC
DISABLE_STUFF_BITS 24 Отключить вставку stuff-битов

Как пользоваться

Шаг 1. Настройка параметров кадра

Заполните следующие поля:

  • CAN_BITRATE_KBPS — битрейт шины (например, 500).
  • CAN_ID_HI, CAN_ID_LO — идентификатор кадра.
  • HEADER_IDE — выбор типа кадра:
    • 0 — стандартный (11 бит).
    • 1 — расширенный (29 бит).
  • HEADER_RTR — тип кадра:
    • 0 — data frame.
    • 1 — remote request.
  • CAN_DLC — количество байт данных (08).
  • CAN_DATA_0 ... CAN_DATA_7 — данные кадра.

Шаг 2. Включение ошибок (опционально)

Установите нужные флаги в коилах:

  • Для инверсии полей (например, IDE, CRC и др.).
  • Для отключения бит-стаффинга.

Шаг 3. Отправка кадра

Выберите один из вариантов:

  • Установите START_SINGLE_FRAME в 1 — для однократной отправки кадра.
  • Установите START_POLLING в 1 — для периодической отправки.
    • Задайте интервал через CAN_PERIOD.

Примечание: Если задан слишком маленький CAN_PERIOD, он автоматически будет ограничен минимальным значением (CAN_MIN_PERIOD в прошивке).


Примеры

Пример 1: Стандартный кадр, ID = 0x123, 2 байта данных

CAN_BITRATE_KBPS      = 500
CAN_ID_HI             = 0x0000
CAN_ID_LO             = 0x0123
HEADER_IDE            = 0
HEADER_RTR            = 0
CAN_DLC               = 2
CAN_DATA_0            = 0x11
CAN_DATA_1            = 0x22
START_SINGLE_FRAME    = 1

Пример 2: Расширенный кадр с ошибкой CRC и отключенным стаффингом

CAN_BITRATE_KBPS      = 500
CAN_ID_HI             = 0x001D
CAN_ID_LO             = 0xABCD
HEADER_IDE            = 1
HEADER_RTR            = 0
CAN_DLC               = 8
CAN_DATA_0...7        = 0xAA, 0xBB, ...
FLIP_CRC_BIT          = 1
DISABLE_STUFF_BITS    = 1
START_SINGLE_FRAME    = 1