- 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>
196 lines
8.5 KiB
Markdown
196 lines
8.5 KiB
Markdown
# SAUL-TEE Wiring Reference
|
||
|
||
**Authoritative reference:** [`docs/SAUL-TEE-SYSTEM-REFERENCE.md`](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/canable0` → `can0` |
|
||
| 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/ttyUSB0–2` |
|
||
| 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 |
|