saltylab-firmware/docs/wiring-diagram.md
sl-mechanical a2c554c232 cleanup: remove all Mamba/F722S/STM32F722 refs — replace with ESP32-S3 BALANCE/IO
- docs/: rewrite AGENTS.md, wiring-diagram.md (SAUL-TEE arch); update
  SALTYLAB.md, FACE_LCD_ANIMATION.md, board-viz.html, SALTYLAB-DETAILED refs
- cad/: dimensions.scad FC params → ESP32-S3 BALANCE params
- chassis/: ASSEMBLY.md, BOM.md, ip54_BOM.md, *.scad — FC_MOUNT_SPACING/
  FC_PITCH → TBD ESP32-S3; Drone FC → MCU mount throughout
- CLAUDE.md, TEAM.md: project desc → SAUL-TEE; hardware table → ESP32-S3/VESC
- USB_CDC_BUG.md: marked ARCHIVED (legacy STM32 era)
- AUTONOMOUS_ARMING.md: USB CDC → inter-board UART (ESP32-S3 BALANCE)
- projects/saltybot/SLAM-SETUP-PLAN.md: FC/STM32F722 → BALANCE/CAN
- jetson/docs/pinout.md, power-budget.md, README.md: STM32 bridge → CAN bridge
- jetson/config/RECOVERY_BEHAVIORS.md: FC+Hoverboard → BALANCE+VESC
- jetson/ros2_ws: stm32_protocol.py → esp32_protocol.py,
  stm32_cmd_node.py → esp32_cmd_node.py,
  mamba_protocol.py → balance_protocol.py; can_bridge_node imports updated
- scripts/flash_firmware.py: DFU/STM32 → pio run -t upload
- src/ include/: ARCHIVED headers added (legacy code preserved)
- test/: ARCHIVED notices; STM32F722 comments marked LEGACY
- ui/diagnostics_panel.html: Board/STM32 → ESP32-S3

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 09:06:09 -04:00

8.5 KiB
Raw Blame History

SAUL-TEE Wiring Reference

Authoritative reference: docs/SAUL-TEE-SYSTEM-REFERENCE.md

This document is a quick-access wiring summary. For pin assignments, CAN frame formats, RC channel mapping, and serial commands, see the full reference doc.


System Block Diagram

                    ┌──────────────────────────────────────────────────────────┐
                    │               JETSON ORIN NANO SUPER                     │
                    │                  (Top plate, 25W)                        │
                    │                                                          │
                    │  USB-A ──── CANable 2.0 USB↔CAN (can0, 500 kbps)       │
                    │  USB-A ──── RealSense D435i (USB 3.1)                  │
                    │  USB-A ──── RPLIDAR A1M8 (CP2102, 115200)              │
                    │  USB-C ──── SIM7600A 4G/LTE modem                      │
                    │  CSI-A ─── 2× IMX219 cameras (front + left)            │
                    │  CSI-B ─── 2× IMX219 cameras (rear + right)            │
                    │  40-pin ── ReSpeaker 2-Mic HAT                          │
                    └──────────────────────┬───────────────────────────────────┘
                                           │ USB-A → CANable 2.0
                                           │ can0, 500 kbps
          ┌────────────────────────────────┴──────────────────────────────────┐
          │                    CAN BUS  (CANH / CANL / GND)                   │
          │              120 Ω ─┤                     ├─ 120 Ω               │
          └───────────┬──────────────────────────────────────────┬────────────┘
                      │                                          │
          ┌───────────┴────────────┐              ┌─────────────┴──────────┐
          │  ESP32-S3 BALANCE      │              │  VESC left  (ID 68)    │
          │  Waveshare Touch LCD   │              │  VESC right (ID 56)    │
          │  1.28 — CH343 USB      │              │  FSESC 6.7 Pro Mini    │
          │                        │              │  Dual                  │
          │  QMI8658 IMU (I2C)     │              └──────┬─────────────────┘
          │  SN65HVD230 (CAN)      │                     │ Phase wires
          │                        │            ┌────────┴─────────────┐
          │  UART ──────────────┐  │            │  Hub motors (4×)     │
          └────────────────────────┘            │  FL / FR / RL / RR   │
            ↕ 460800 baud binary │              └──────────────────────┘
              inter-board proto  │
          ┌───────────────────────┘
          │  ESP32-S3 IO (bare board)
          │  JTAG USB
          │
          │  UART0 ── TBS Crossfire RX (CRSF @ 420000)
          │  UART2 ── ELRS receiver (CRSF failover @ 420000)
          │  PWM ──── 4× BTS7960 H-bridge motor drivers
          │  I2C ──── NFC + Barometer + ToF (shared bus)
          │  RMT ──── WS2812B LED strip
          │  GPIO ─── Horn / Headlight / Fan / Buzzer
          └──────────────────────────────────────────────

Wire-by-Wire Connections

1. Orin ↔ CAN Bus (via CANable 2.0)

From To Notes
Orin USB-A CANable 2.0 USB /dev/canable0can0
CANable CANH CAN bus CANH Twisted pair
CANable CANL CAN bus CANL Twisted pair
CANable GND CAN GND Common

Setup: ip link set can0 up type can bitrate 500000

2. ESP32-S3 BALANCE ↔ CAN Bus

Signal GPIO CAN bus
CAN TX TBD → SN65HVD230 D pin
CAN RX TBD ← SN65HVD230 R pin

TBD pins — confirm in esp32/balance/src/config.h

3. ESP32-S3 BALANCE ↔ ESP32-S3 IO (Inter-Board UART)

Signal BALANCE GPIO IO GPIO Baud
TX TBD TBD (RX) 460800
RX TBD (RX) TBD (TX) 460800
GND GND GND

Frame: [0xAA][LEN][TYPE][PAYLOAD…][CRC8] — see esp32/shared/protocol.h

4. ESP32-S3 IO ↔ TBS Crossfire RX (UART0)

IO GPIO Signal Crossfire pin Notes
GPIO43 TX RX CRSF telemetry to TX module
GPIO44 RX TX CRSF RC frames in
GND GND GND
5V VCC Power from 5V bus

Baud: 420000 (CRSF). Failsafe: disarm after 300 ms without frame.

5. ESP32-S3 IO ↔ ELRS Receiver (UART2, failover)

IO GPIO Signal ELRS pin
TBD TX RX
TBD RX TX
GND GND GND
5V VCC

Baud: 420000 (CRSF). Activates automatically if Crossfire link lost >300 ms.

6. ESP32-S3 IO ↔ BTS7960 Motor Drivers (4×)

TBD GPIO assignments — see esp32/io/src/config.h.

Signal Per-driver Notes
RPWM GPIO TBD Forward PWM
LPWM GPIO TBD Reverse PWM
R_EN GPIO TBD Enable H
L_EN GPIO TBD Enable H
Motor+ / Motor Hub motor 36V via B+ / B on BTS7960

7. ESP32-S3 IO I2C Sensors

Device I2C Address Notes
NFC (PN532) 0x24 NFC tag read/write
Barometer (BMP280/388) 0x76 Altitude + temp
ToF range (VL53L0X) 0x29 Proximity/obstacle

SDA / SCL GPIOs TBD — confirm in esp32/io/src/config.h

8. Power Distribution

36V BATTERY
  │
  ├── VESC left  (36V) ─── Front-left + Rear-left hub motors
  ├── VESC right (36V) ─── Front-right + Rear-right hub motors
  ├── BTS7960 boards (B+/B) — 36V motor power
  │
  ├── DC-DC 12V ──── Fan / Headlight / Accessories
  │
  └── DC-DC 5V ─┬── Jetson Orin (USB-C PD)
                 ├── ESP32-S3 BALANCE (USB 5V)
                 ├── ESP32-S3 IO (USB 5V)
                 ├── TBS Crossfire RX (5V)
                 ├── ELRS RX (5V)
                 ├── WS2812B strip (5V)
                 ├── RPLIDAR A1M8 (5V via USB)
                 └── Sensors (3.3V from ESP32-IO LDO)

Orin USB Peripherals

Device Interface Node
CANable 2.0 USB-A can0 (after ip link set can0 up type can bitrate 500000)
RealSense D435i USB 3.1 /dev/bus/usb/...
RPLIDAR A1M8 USB-UART /dev/rplidar
SIM7600A 4G USB /dev/ttyUSB02
ESP32-S3 BALANCE debug USB-A (CH343) /dev/esp32-balance
ESP32-S3 IO debug USB-A (JTAG/CDC) /dev/esp32-io

ReSpeaker 2-Mic HAT (Orin 40-pin)

Orin Pin Signal Function
Pin 12 (GPIO 18) I2S BCLK Audio bit clock
Pin 35 (GPIO 19) I2S LRCLK Audio left/right clock
Pin 38 (GPIO 20) I2S DIN Audio data in (from mics)
Pin 40 (GPIO 21) I2S DOUT Audio data out (to speaker)
Pin 3 (GPIO 2) I2C SDA WM8960 codec (i2c-7)
Pin 5 (GPIO 3) I2C SCL WM8960 codec (i2c-7)
Pin 2, 4 5V Power
Pin 6, 9 GND Ground

Codec: Wolfson WM8960 (0x1A). Use: voice commands, wake word, audio feedback.


SIM7600A 4G/LTE HAT (Orin USB)

Connection Detail
Interface USB (micro-B on HAT → USB-A on Orin)
Device nodes /dev/ttyUSB0 (AT), /dev/ttyUSB1 (PPP/data), /dev/ttyUSB2 (GPS NMEA)
Power 5V from USB (peak 2A during TX)
SIM Nano-SIM slot