feat: CAN bus watchdog and error recovery (Issue #694) #708

Merged
sl-jetson merged 1 commits from sl-firmware/issue-694-can-watchdog into main 2026-03-20 17:59:02 -04:00
Collaborator

Summary

  • CAN1_SCE_IRQHandler: detects bus-off/error-passive/error-warning from ESR register
  • can_driver_watchdog_tick(): polls ESR each main-loop cycle, auto-restarts after CAN_WDOG_RESTART_MS (200 ms)
  • can_wdog_t: tracks restart/busoff/errpassive/errwarn counts, TEC, REC
  • JLink TLM code 0x8F (JLINK_TLM_CAN_WDOG) sent at 1 Hz via jlink_send_can_wdog_tlm()
  • busoff_pending flag fixes t=0 sentinel ambiguity in restart logic
  • 23 unit tests in test/test_can_watchdog.c, all pass

Test plan

  • gcc -I include -I test/stubs -DTEST_HOST -Wall -Wextra -Werror -o /tmp/test_can_watchdog test/test_can_watchdog.c && /tmp/test_can_watchdog → 23 passed, 0 failed
  • Flash on STM32F7, inject bus fault, verify auto-restart within 200 ms
  • Check JLink RTT for TLM code 0x8F telemetry frames

🤖 Generated with Claude Code

## Summary - `CAN1_SCE_IRQHandler`: detects bus-off/error-passive/error-warning from ESR register - `can_driver_watchdog_tick()`: polls ESR each main-loop cycle, auto-restarts after `CAN_WDOG_RESTART_MS` (200 ms) - `can_wdog_t`: tracks restart/busoff/errpassive/errwarn counts, TEC, REC - JLink TLM code `0x8F` (`JLINK_TLM_CAN_WDOG`) sent at 1 Hz via `jlink_send_can_wdog_tlm()` - `busoff_pending` flag fixes t=0 sentinel ambiguity in restart logic - 23 unit tests in `test/test_can_watchdog.c`, all pass ## Test plan - [ ] `gcc -I include -I test/stubs -DTEST_HOST -Wall -Wextra -Werror -o /tmp/test_can_watchdog test/test_can_watchdog.c && /tmp/test_can_watchdog` → 23 passed, 0 failed - [ ] Flash on STM32F7, inject bus fault, verify auto-restart within 200 ms - [ ] Check JLink RTT for TLM code 0x8F telemetry frames 🤖 Generated with [Claude Code](https://claude.com/claude-code)
sl-jetson added 1 commit 2026-03-20 16:50:02 -04:00
- CAN1_SCE_IRQHandler: detects bus-off/error-passive/error-warning from ESR
- can_driver_watchdog_tick(): polls ESR each cycle, auto-restarts after CAN_WDOG_RESTART_MS (200ms)
- can_wdog_t: tracks restart_count, busoff_count, errpassive_count, errwarn_count, tec, rec
- JLink TLM code 0x8F (JLINK_TLM_CAN_WDOG) with jlink_send_can_wdog_tlm()
- main.c: calls watchdog_tick() each loop, sends CAN wdog TLM at 1 Hz
- TEST_HOST: inject_esr() stub + busoff_pending flag fixes t=0 sentinel ambiguity
- test/test_can_watchdog.c: 23 unit tests, all pass

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
sl-jetson force-pushed sl-firmware/issue-694-can-watchdog from f600aa98e7 to f59bc9931e 2026-03-20 17:39:05 -04:00 Compare
sl-jetson merged commit e220797c07 into main 2026-03-20 17:59:02 -04:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: seb/saltylab-firmware#708
No description provided.