ESC-конфигуратор: AM32, BLHeli_S и Bluejay через полётник
Инструмент /tools/esc-connect подключается к полётному контроллеру по USB
(Web Serial), переводит его в passthrough к регуляторам (протокол
«4-way interface» — тот же механизм, которым пользуются BLHeliSuite и
esc-configurator) и определяет семейство прошивки каждого ESC (AD-1066:
единый конфигуратор вместо отдельной тулы на вендора). Настройки AM32,
BLHeli_S и Bluejay читаются в полном объёме (AD-1070), плюс
RPM-телеметрия. Ничего не устанавливается, данные
не покидают ваш компьютер: весь обмен идёт локально между браузером и платой.
⚗️ Экспериментально · предальфа. Нужен десктопный Chrome или Edge,
открытый по HTTPS (Firefox, Safari и мобильные Web Serial не поддерживают).
Перед подключением закройте INAV/Betaflight Configurator и другие ESC-тулы —
они держат COM-порт. Инструмент скрыт за фича-флагомesc_tools
(включён по умолчанию с AD-1066; администратор может выключить
конкретное окружение в/admin/flags).
v1 — только чтение
По решению основателя первая версия — строго read-only:
- никакой записи настроек, никакого стирания, никакой прошивки — ни для
AM32, ни для BLHeli_S/Bluejay; - в протокольном кодеке команды записи не реализованы вообще — испортить
(«окирпичить») регулятор этим инструментом технически нельзя; - единственные «активные» команды — перезапуск регулятора из загрузчика
обратно в рабочую прошивку и выход полётника из passthrough (уборка после
чтения, настроек они не меняют).
Что читается по семействам (AD-1066/AD-1070):
| Семейство | Опознаётся | Настройки читаются |
|---|---|---|
| AM32 (ARM) | да | да, полная раскладка EEPROM |
| BLHeli_S / Bluejay (SiLabs) | да | да, каждая по своей раскладке (AD-1070) |
| BLHeli на Atmel (легаси 8-бит) | да | нет — открытого описания раскладки нет |
| SiLabs C2 (отладочный интерфейс) | да | нет |
Запись настроек и прошивка — кандидаты на следующие версии. BLHeli_32
поддерживаться не будет: протокол закрыт, программа лицензирования
остановлена производителем (EOL).
Как пользоваться
- Снимите пропеллеры. Любые работы с регуляторами — только на столе.
- Подключите полётник по USB и нажмите «Подключить полётник» — инструмент
прочитает вариант прошивки, версию и плату. - (Опционально) «Прочитать RPM» — обороты моторов по данным esc-sensor
полётника (INAV с настроенной телеметрией ESC). Если esc-sensor не настроен,
инструмент честно скажет «телеметрия недоступна». - Нажмите «Войти в passthrough» — полётник переключится в режим 4-way и
покажет число выходов ESC. - Подключите аккумулятор к борту. Регуляторы, включённые уже после входа
в passthrough, остаются в загрузчике (мотор не крутится) и готовы к чтению. - Нажмите «Прочитать ESC N» у нужного регулятора: инструмент подключится
к его загрузчику и определит семейство прошивки. Для AM32, BLHeli_S
и Bluejay читается полный блок настроек; для легаси BLHeli на Atmel и
SiLabs C2 регулятор только опознаётся (сигнатура + режим интерфейса) —
честное сообщение поясняет, что открытого описания их раскладки у нас нет. - По окончании — «Выйти из passthrough»: регуляторы перезапустятся в
рабочую прошивку, полётник вернётся в обычный режим MSP.
Что показывается
- Регулятор: сигнатура микроконтроллера, режим интерфейса (ARM BLB — AM32;
SiLabs BLB — BLHeli_S/Bluejay; Atmel BLB/SK — легаси BLHeli; SiLabs C2 —
отладочный интерфейс) и сырые байты ответа. - Настройки AM32: версия прошивки, версия EEPROM-раскладки, имя таргета и
таблица настроек (направление вращения, 3D-режим, timing advance, частота
PWM, KV и полюса мотора, тормоз, пороги отсечки по напряжению, лимиты тока и
температуры и др.). Для каждого поля показан сырой байт, производная
величина — только там, где формула описана в открытой документации AM32. - Настройки BLHeli_S/Bluejay (AD-1070): версия прошивки, ревизия
EEPROM-раскладки, имя регулятора и таблица настроек (направление вращения,
опережение коммутации, компенсация размагничивания, пороги газа, защита по
температуре, тормоз на нуле газа и др.; у Bluejay — свои поля: минимальная и
максимальная стартовая мощность, частота PWM, сила торможения, класс
питания). У каждого поля показан сырой байт; расшифровка — только там,
где значение описано в исходниках прошивки. Значение, которого в описании
нет, показывается числом, а не «похожим» вариантом.
BLHeli_S и Bluejay разбираются по РАЗНЫМ таблицам: Bluejay использует
часть тех же байт под другой смысл, и общая таблица показала бы неправду.
Если регулятор сообщает незнакомую ревизию раскладки (например, старая
версия прошивки), настройки не расшифровываются вовсе — вы увидите номер
ревизии и сырой дамп. Это сделано намеренно: неверно расшифрованная
настройка выглядит достовернее, чем её отсутствие. - Сырой дамп: полный HEX-дамп прочитанного блока — инструмент ничего не
выдумывает: байты, не описанные в источнике, видны только здесь. Если
структура блока не распознана, показывается только дамп с честной пометкой. - Легаси BLHeli на Atmel и SiLabs C2: только идентификация (сигнатура +
режим интерфейса) — без таблицы настроек: открытого описания их раскладки
у нас нет.
Приватность и лицензии
Обмен с полётником и регуляторами идёт локально в браузере, на сервер ничего
не отправляется. Протоколы (MSP passthrough, 4-way interface, раскладка EEPROM
AM32, классификация семейства прошивки) реализованы clean-room по открытым
описаниям, без заимствования кода из GPL/AGPL-проектов — подробности в ADR
docs/adr/ad-856-esc-clean-room.md.
Откуда взята раскладка BLHeli_S/Bluejay (AD-1070): из опубликованных
исходников самих прошивок — они и есть первоисточник этого формата данных.
Конкретные файлы названы прямо в исходном коде инструмента
(web/static/js/tools/esc_blheli.js) и сведены в таблицу в
docs/research/esc-protocols-am32.md § 5.1. Код при этом написан с нуля: из
GPL/AGPL-проектов (BLHeliSuite, esc-configurator.com) не заимствовано ни
строки, и как источник раскладки они не использовались.
Почему инструмент не пишет в регулятор и не будет этого делать в этой
версии. Read-only — не «пока», а требование безопасности: ошибка в разборе
раскладки при ЧТЕНИИ означает неверную строчку на экране, а при ЗАПИСИ —
испорченный регулятор. В коде нет даже функции, собирающей настройки обратно в
байты. Запись появится отдельным решением и только после проверки чтения на
реальном железе.