# Протокол старого пульта тележки (реверс-инжиниринг) Снято 2026-08-20 осциллографом Hantek DPO7204C с сигнального провода пульта (канал CH3). Инструменты: `tools/capture.py` (захват), `tools/decode.py` (декодер), сырые данные и картинки — в `captures/`. ## Физический уровень - Один сигнальный провод, логика **3.3 В**. - **Инвертированный UART** (стандартная полярность SBUS): в покое линия **низкая** (~0 В), импульсы вверх до ~3.3 В. - Скорость **100 000 бод**, формат **8E2** (8 бит данных, чётность even, 2 стоп-бита), биты LSB-first. Длительность бита 10 мкс. ## Кадровый уровень — SBUS Стандартный кадр Futaba SBUS, 25 байт (3 мс на линии): | Смещение | Размер | Содержимое | |---|---|---| | 0 | 1 | Заголовок `0x0F` | | 1 | 22 | 16 каналов × 11 бит, упакованы подряд LSB-first | | 23 | 1 | Флаги: bit0=CH17, bit1=CH18, bit2=frame_lost, bit3=failsafe | | 24 | 1 | Футер `0x00` | Распаковка каналов: 22 байта складываются в 176-битное число LSB-first, канал N (N=0..15) = биты [11·N .. 11·N+10], диапазон значений 0–2047. - Кадры отправляются каждые **50 мс** (20 Гц). Это медленнее стандартного SBUS (7/14 мс) — ответная часть с этим темпом работает. - Флаги во всех наблюдениях = `0x00`. ## Карта каналов (нумерация с 1) | Управление | Канал | Мин | Нейтраль | Макс | |---|---|---|---|---| | Стик вперёд/назад | **2** | 433 (назад) | 1024 | 1643 (вперёд) | | Стик влево/вправо | **4** | 446 (влево) | 1024 | 1654 (вправо) | | Остальные 14 | — | всегда 1024 | | | Диапазон осей ~±600 от нейтрали (не полная шкала SBUS). Других органов управления на пульте нет. Эталонный кадр нейтрали (hex): ``` 0F 00 04 20 00 01 08 40 00 02 10 80 00 04 20 00 01 08 40 00 02 10 80 00 00 ``` ## Воспроизведение на STM32G431 - USART: 100000 бод, 8 бит + чётность even (в терминах STM32: M=1, 9-bit с PCE=1), 2 стоп-бита, **TXINV=1** (аппаратная инверсия TX) — бит-бэнг не нужен. - Отправлять 25-байтовый кадр по таймеру каждые 50 мс. - Нейтраль: все каналы 1024; управление — каналы 2 и 4 в измеренных диапазонах.