lift_indicator_suite/tests/target/hil_can
2026-07-09 10:07:04 +03:00
..
CMakeLists.txt # Created HIL and HOST tests for bsp_can module 2026-03-31 13:07:39 +03:00
main.c # Created HIL and HOST tests for bsp_can module 2026-03-31 13:07:39 +03:00
README.md # bootloader: target test docs 2026-07-09 10:07:04 +03:00

test_hil_can

Модуль под тестом

bsp/can — HIL-прошивка test_hil_can (main.c), поднимающая CLI (CAN_SEND, CAN_RECV, CAN_FILTER, CAN_ACCEPT_ALL, CAN_RX_EVENTS, CAN_LAST_RX, CAN_RESET_EVENTS) поверх реальной CAN-шины (трансивер SN65HVD230D на таргете). Прошивка не содержит проверок — она исполняет команды и передаёт/принимает фреймы на физической шине; assert'ы находятся в pytest на хосте.

Категория

HIL, требует стенд M5StampPLC (трансивер SIT1044) как второй узел на общей CAN-шине 125 kbit/s. M5 также управляет питанием таргета (RLY1).

bsp_can_init() вызывается с disableSelfReception=true — таргет не слышит собственные фреймы. Сценарий «таргет TX → таргет RX» без ретрансляции через M5 не тестируется напрямую.

Моки

Программных моков нет — тестируется реальная передача по физической шине. Роль второго узла играет M5StampPLC под управлением MicroPython-агента (tools/hil/m5/agent.py): pytest дистанционно отправляет/принимает CAN-фреймы через JSON-команды по USB CDC (m5.can_send(), m5.can_recv(), фикстура m5 в conftest.py). Все проверки — в tools/hil/03_test_can.py.

Что проверяется

  • Connectivity — таргет отвечает на PING, M5-агент отвечает на ping и сообщает can_ok=true.
  • M5 → таргет — приём STD/EXT фрейма с верным ID и данными, максимальный DLC=8, DLC=0, инкремент счётчика RX-событий на каждый принятый фрейм.
  • Таргет → M5 — отправка STD/EXT фрейма, граничные ID (0x000, 0x7FF, 0x1FFFFFFF), целостность всех 8 байт данных без искажений.
  • ФильтрацияCAN_ACCEPT_ALL принимает любой ID; точная маска (0x7FF) пропускает только совпадающий ID и блокирует остальные; маска по группе старших бит (0x7F0) пропускает всю группу; повторный CAN_ACCEPT_ALL снимает ранее установленный фильтр.
  • Типы фреймов — STD и EXT не путаются друг с другом ни в одну, ни в другую сторону, включая граничные значения ID.

Гарантии

  • Фреймы передаются по физической шине в обе стороны без потери и искажения ID/данных, включая граничные STD (0x7FF) и EXT (0x1FFFFFFF) идентификаторы.
  • Аппаратная фильтрация по ID/маске работает корректно: точное совпадение, совпадение по группе бит, полное открытие через accept_all.
  • Счётчик принятых фреймов увеличивается ровно на каждый физически принятый фрейм.
  • STD- и EXT-фреймы всегда различимы (is_extended не искажается при передаче по шине).

Запуск

just build::build-hil    # в devcontainer: собрать HIL-прошивки
just host::m5-deploy     # один раз / после правок agent.py: залить агент на M5
just host::hil-can       # на хосте: прошить по SWD и прогнать тест

Требует MicroPython v1.25 на M5StampPLC (tools/hil/m5/firmware/v1.25/) — в v1.27 модуль CAN недоступен.