| .. | ||
| CMakeLists.txt | ||
| main.c | ||
| README.md | ||
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 недоступен.