Add USB CDC bug doc and team requirements
This commit is contained in:
parent
ba3e1161b9
commit
0afdaea2e1
77
TEAM.md
Normal file
77
TEAM.md
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# SaltyLab — Ideal Team
|
||||||
|
|
||||||
|
## Project
|
||||||
|
Self-balancing two-wheeled robot using a drone flight controller (STM32F722), hoverboard hub motors, and eventually a Jetson Nano for AI/SLAM.
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
- **Hardware:** Assembled — FC, motors, ESC, IMU, battery, RC all on hand
|
||||||
|
- **Firmware:** Balance PID + hoverboard ESC protocol written, but blocked by USB CDC bug
|
||||||
|
- **Blocker:** USB CDC TX stops working when peripheral inits (SPI/UART/GPIO) are added alongside USB OTG FS — see `USB_CDC_BUG.md`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Roles Needed
|
||||||
|
|
||||||
|
### 1. Embedded Firmware Engineer (Lead)
|
||||||
|
**Must-have:**
|
||||||
|
- Deep STM32 HAL experience (F7 series specifically)
|
||||||
|
- USB OTG FS / CDC ACM debugging (TxState, endpoint management, DMA conflicts)
|
||||||
|
- SPI + UART + USB coexistence on STM32
|
||||||
|
- PlatformIO or bare-metal STM32 toolchain
|
||||||
|
- DFU bootloader implementation
|
||||||
|
|
||||||
|
**Nice-to-have:**
|
||||||
|
- Betaflight/iNav/ArduPilot codebase familiarity
|
||||||
|
- PID control loop tuning for balance robots
|
||||||
|
- FOC motor control (hoverboard ESC protocol)
|
||||||
|
|
||||||
|
**Why:** The immediate blocker is a USB peripheral conflict. Need someone who's debugged STM32 USB issues before — this is not a software logic bug, it's a hardware peripheral interaction issue.
|
||||||
|
|
||||||
|
### 2. Control Systems / Robotics Engineer
|
||||||
|
**Must-have:**
|
||||||
|
- PID tuning for inverted pendulum / self-balancing systems
|
||||||
|
- Complementary filter / Kalman filter for IMU sensor fusion
|
||||||
|
- Real-time control loop design (1kHz+)
|
||||||
|
- Safety system design (tilt cutoff, watchdog, arming sequences)
|
||||||
|
|
||||||
|
**Nice-to-have:**
|
||||||
|
- Hoverboard hub motor experience
|
||||||
|
- ELRS/CRSF RC protocol
|
||||||
|
- ROS2 integration
|
||||||
|
|
||||||
|
**Why:** Once USB is fixed, the balance loop needs real-world tuning. PID gains, filter coefficients, motor response curves, safety margins — all need someone with hands-on balance bot experience.
|
||||||
|
|
||||||
|
### 3. Perception / SLAM Engineer (Phase 2)
|
||||||
|
**Must-have:**
|
||||||
|
- Jetson Nano / NVIDIA Jetson platform
|
||||||
|
- Intel RealSense D435i depth camera
|
||||||
|
- RPLIDAR integration
|
||||||
|
- SLAM (ORB-SLAM3, RTAB-Map, or similar)
|
||||||
|
- ROS2
|
||||||
|
|
||||||
|
**Nice-to-have:**
|
||||||
|
- Person tracking / following
|
||||||
|
- Obstacle avoidance
|
||||||
|
- Nav2 stack
|
||||||
|
|
||||||
|
**Why:** Phase 2 goal is autonomous navigation. Jetson Nano with RealSense + RPLIDAR for indoor mapping and person following.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Hardware Reference
|
||||||
|
| Component | Details |
|
||||||
|
|-----------|---------|
|
||||||
|
| FC | MAMBA F722S (STM32F722RET6, MPU6000) |
|
||||||
|
| Motors | 2x 8" pneumatic hoverboard hub motors |
|
||||||
|
| ESC | Hoverboard ESC (EFeru FOC firmware) |
|
||||||
|
| Battery | 36V pack |
|
||||||
|
| RC | BetaFPV ELRS 2.4GHz TX + RX |
|
||||||
|
| AI Brain | Jetson Nano + Noctua fan |
|
||||||
|
| Depth | Intel RealSense D435i |
|
||||||
|
| LIDAR | RPLIDAR A1M8 |
|
||||||
|
| Spare IMUs | BNO055, MPU6050 |
|
||||||
|
|
||||||
|
## Repo
|
||||||
|
- Gitea: https://gitea.vayrette.com/seb/saltylab-firmware
|
||||||
|
- Design doc: `projects/saltybot/SALTYLAB.md`
|
||||||
|
- Bug doc: `USB_CDC_BUG.md`
|
||||||
44
USB_CDC_BUG.md
Normal file
44
USB_CDC_BUG.md
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# USB CDC TX Bug — 2026-02-28
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
Balance firmware produces no USB CDC output. Minimal "hello" test firmware works fine.
|
||||||
|
|
||||||
|
## What Works
|
||||||
|
- **Test firmware** (just sends `{"hello":N}` at 10Hz after 3s delay): **DATA FLOWS**
|
||||||
|
- USB enumeration works in both cases (port appears as `/dev/cu.usbmodemSALTY0011`)
|
||||||
|
- DFU reboot via RTC backup register works (Betaflight-proven pattern)
|
||||||
|
|
||||||
|
## What Doesn't Work
|
||||||
|
- **Balance firmware**: port opens, no data ever arrives
|
||||||
|
- Tried: removing init transmit, 3s boot delay, TxState recovery, DTR detection, streaming flags
|
||||||
|
- None of it helps
|
||||||
|
|
||||||
|
## Key Difference Between Working & Broken
|
||||||
|
- **Working test**: main.c only includes USB CDC headers, HAL, string, stdio
|
||||||
|
- **Balance firmware**: includes icm42688.h, bmp280.h, balance.h, hoverboard.h, config.h, status.h
|
||||||
|
- Balance firmware inits SPI1 (IMU), USART2 (hoverboard), GPIO (LEDs, buzzer)
|
||||||
|
- Likely culprit: **peripheral init (SPI/UART/GPIO) is interfering with USB OTG FS**
|
||||||
|
|
||||||
|
## Suspected Root Cause
|
||||||
|
One of the additional peripheral inits (SPI1 for IMU, USART2 for hoverboard ESC, or GPIO for status LEDs) is likely conflicting with the USB OTG FS peripheral — either a clock conflict, GPIO pin conflict, or interrupt priority issue.
|
||||||
|
|
||||||
|
## Hardware
|
||||||
|
- MAMBA F722S FC (STM32F722RET6)
|
||||||
|
- Betaflight target: DIAT-MAMBAF722_2022B
|
||||||
|
- IMU: MPU6000 on SPI1 (PA4/PA5/PA6/PA7)
|
||||||
|
- USB: OTG FS (PA11/PA12)
|
||||||
|
- Hoverboard ESC: USART2 (PA2/PA3)
|
||||||
|
- LEDs: PC14, PC15
|
||||||
|
- Buzzer: PB2
|
||||||
|
|
||||||
|
## Files
|
||||||
|
- PlatformIO project: `~/Projects/saltylab-firmware/` on mbpm4 (192.168.87.40)
|
||||||
|
- Working test: was in src/main.c (replaced with balance code)
|
||||||
|
- Balance main.c backup: src/main.c.bak
|
||||||
|
- CDC implementation: lib/USB_CDC/src/usbd_cdc_if.c
|
||||||
|
|
||||||
|
## To Debug
|
||||||
|
1. Add peripherals one at a time to the test firmware to find which one breaks CDC TX
|
||||||
|
2. Check for GPIO pin conflicts with USB OTG FS (PA11/PA12)
|
||||||
|
3. Check interrupt priorities — USB OTG FS IRQ might be getting starved
|
||||||
|
4. Check if DCache (disabled via SCB_DisableDCache) is needed for USB DMA
|
||||||
Loading…
x
Reference in New Issue
Block a user