Replaces Orin↔ESP32-S3 BALANCE CAN comms (0x300-0x303 / 0x400-0x401)
with binary serial framing over CH343 USB-CDC at 460800 baud.
Protocol matches bd-wim1 (sl-perception) exactly:
Frame: [0xAA][LEN][TYPE][PAYLOAD][CRC8-SMBUS]
CRC covers LEN+TYPE+PAYLOAD, big-endian multi-byte fields.
Commands (Orin→ESP32): HEARTBEAT/DRIVE/ESTOP/ARM/PID
Telemetry (ESP32→Orin): TELEM_STATUS, TELEM_VESC_LEFT (ID 56),
TELEM_VESC_RIGHT (ID 68), ACK/NACK
VESC CAN TWAI kept for motor control; drive commands from Orin
forwarded to VESCs via SET_RPM. Hardware note: SN65HVD230
rewired from IO43/44 to IO2/IO1 to free IO43/44 for CH343.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
43 lines
2.0 KiB
C
43 lines
2.0 KiB
C
#pragma once
|
|
|
|
/* ── ESP32-S3 BALANCE board — bd-66hx pin/config definitions ───────────────
|
|
*
|
|
* Hardware change from pre-bd-66hx design:
|
|
* Previously: IO43/IO44 = CAN SN65HVD230 (shared Orin+VESC bus via CANable2)
|
|
* After bd-66hx: IO43/IO44 = CH343 UART0 (Orin serial comms)
|
|
* IO2/IO1 = CAN SN65HVD230 rewired (VESC-only bus)
|
|
*
|
|
* The SN65HVD230 transceiver physical wiring must be updated from IO43/44
|
|
* to IO2/IO1 when deploying this firmware. See docs/SAUL-TEE-SYSTEM-REFERENCE.md.
|
|
*/
|
|
|
|
/* ── Orin serial (CH343 USB-to-UART, 1a86:55d3 on Orin side) ── */
|
|
#define ORIN_UART_PORT UART_NUM_0
|
|
#define ORIN_UART_BAUD 460800
|
|
#define ORIN_UART_TX_GPIO 43 /* ESP32→CH343 RXD */
|
|
#define ORIN_UART_RX_GPIO 44 /* CH343 TXD→ESP32 */
|
|
#define ORIN_UART_RX_BUF 1024
|
|
#define ORIN_TX_QUEUE_DEPTH 16
|
|
|
|
/* ── VESC CAN TWAI (SN65HVD230 transceiver, rewired for bd-66hx) ── */
|
|
#define VESC_CAN_TX_GPIO 2 /* ESP32 TWAI TX → SN65HVD230 TXD */
|
|
#define VESC_CAN_RX_GPIO 1 /* SN65HVD230 RXD → ESP32 TWAI RX */
|
|
#define VESC_CAN_RX_QUEUE 32
|
|
|
|
/* VESC node IDs — matched to bd-wim1 TELEM_VESC_LEFT/RIGHT mapping */
|
|
#define VESC_ID_A 56u /* TELEM_VESC_LEFT (0x81) */
|
|
#define VESC_ID_B 68u /* TELEM_VESC_RIGHT (0x82) */
|
|
|
|
/* ── Safety / timing ── */
|
|
#define HB_TIMEOUT_MS 500u /* heartbeat watchdog: disarm if exceeded */
|
|
#define DRIVE_TIMEOUT_MS 500u /* drive command staleness timeout */
|
|
#define TELEM_STATUS_PERIOD_MS 100u /* 10 Hz status telemetry to Orin */
|
|
#define TELEM_VESC_PERIOD_MS 100u /* 10 Hz VESC telemetry to Orin */
|
|
|
|
/* ── Drive → VESC RPM scaling ── */
|
|
#define RPM_PER_SPEED_UNIT 5 /* speed_units=1000 → 5000 ERPM */
|
|
#define RPM_PER_STEER_UNIT 3 /* steer differential scale */
|
|
|
|
/* ── Tilt cutoff ── */
|
|
#define TILT_CUTOFF_DEG 25.0f
|