Баузбенд FM100B: - найден прозрачный мост ПК<->модуль (включение с зажатой МЕНЮ), проверен живьём - расшифрована контрольная сумма кадров (one's complement, BE), сверена с ответом рации - инструмент tools/fm100b.py (ping/send/raw/scan) - cmd 0x25 = запрос версии, модуль отвечает V1.2.0.32 (совпало с офиц. образом) - разобран диспетчер входящих кадров: 193 записи, реальный код у 10 команд - cmd 0x59 = индикация приёма, она же управляет гейтом звука PA14 - исправлено: boot-handshake это cmd 0x84, а не 0x64 (research/re/dmr.md) Спектроанализатор REFV DualTachyon (docs/refw-spectrum.md): - вызывается как функция горячей клавиши №22 Analog Spectrum - вход 0x08009CAA -> обычный 0x080139E4 / по зоне 0x08015318 - спектр это экран №11; тик 0x08013BA4 (автомат на 4 состояния), клавиши 0x08013BFC Декомпозиция (docs/firmware-parts.md): - два процессора + внешний SPI = три канала внедрения - карта ресурсов SPI: шрифты, пиньинь, голос, таблица Unicode - найден штатный загрузчик ресурсов FontVoicePicture (шрифты/голос/картинки) - дерево меню целиком: MIC/SPK Gain, RX/TX Limit, SMS Format уже в стоке - аудио двухступенчатое: PA2 питание УНЧ, PA14 гейт от DMR-модуля Прочее: - везде исправлен режим прошивки: тангента PTT вместо клавиши "*" - устаревший Ru-4D_Flasher.exe удалён из репозитория - добавлены инструменты реверса: xref, refs, gpiomap, gpioscan, schem
5.5 KiB
Разбор кастомной прошивки REFV beta42 (DualTachyon)
Файл: refw/rt-4d-refw-beta42.bin — 251 904 Б (0x3D800, ровно размер app-региона).
Собственная, написанная с нуля реализация прошивки RT-4D. Используется здесь как
независимая перепроверка наших выводов по железу.
1. Структура образа
| Параметр | REFV beta42 | Сток V3.25 |
|---|---|---|
| База загрузки | 0x08002800 |
0x08002800 |
| Начальный SP | 0x2000BFF0 |
0x2000AE48 |
| Reset | 0x080029E5 |
0x08002AC1 |
| Объём кода | ~137 КБ (до 0x21AAF), дальше 0xFF |
~152 КБ |
| Таблица векторов | минимальная (почти все → 0x080029E1/E3) |
полная, 81 обработчик |
Брендинг: "RT-4D REFW v0.42" @0x0801E83A, "Dual Tachyon" @0x0801E84B.
2. Перепроверка железа — совпало полностью ✅
Перепись периферии REFV (по literal-пулам) совпадает с нашим разбором стока:
| Периферия | Ссылок в REFV | Назначение (наш вывод по стоку) |
|---|---|---|
GPIOA 0x40020000 |
54 | основные линии управления |
RCC 0x40023800 |
27 | тактирование |
ADC1 0x40012000 |
21 | батарея |
| GPIOB / GPIOF / GPIOC | 19 / 14 / 7 | периферийные линии |
TIM1 0x40010000 |
14 | генерация тона/бипа |
SPI2 0x40003800 |
10 | SPI-флеш |
USART6 0x40011400 |
9 | CPS-линк |
TIM9 0x40014000 |
9 | таймер |
DAC 0x40007400 |
6 | аудио-тракт |
USART3 0x40004800 |
6 | линк к DMR-баузбенду FM100B |
Совпадения по конкретным битам GPIO:
| Бит | REFV | Сток | Смысл |
|---|---|---|---|
| GPIOA bit2 | movs r2,#4; str r2,[GPIOA+0x18] @0x08003FCC |
SCR@0x08014D44, CLR@0x0801A836 |
усилитель звука (AF MUTE4898 → LN4898 EN) |
| GPIOA bit10 | CLR@0x080064F6, SCR@0x08006516 |
CLR@0x080047B8, SCR@0x080047C8 |
band-select / PA |
| GPIOA bit13/bit14 | активно используются (в т.ч. TOGR) | то же | служебные линии |
⇒ Вывод по аудио (GPIOA бит 2 = вкл/выкл УНЧ) подтверждён двумя независимыми прошивками
и принципиальной схемой. Регистры AT32: SCR +0x18 (вкл), CLR +0x28 (выкл), TOGR +0x2C.
3. Протокол баузбенда
REFV работает с FM100B через тот же USART3 и то же обрамление кадра (0x68 …):
immediate #0x68 встречается в 12+ местах построения пакетов.
Реализован аккуратный HAL поверх USART:
| vaddr (REFV) | роль |
|---|---|
0x08003D30 |
конфигурация UART |
0x08003E56 |
чтение DR |
0x08003E5C |
проверка флага статуса (маски 0x20 RXNE, 0x80 TC) |
0x080199EA, 0x0801A056, 0x0801A0AE |
обёртки приёма/передачи для FM100B |
4. Что интересного есть в REFV (по строкам)
- Обновление прошивки самого DMR-модуля:
"Upgrade DMR FW","Update DMR Chip","Initialising DMR","DMR FW ERROR!","DMR FW returned "— т.е. реализован протокол прошивки FM100B по USART3 (самая глубокая форма «рулить бекеном»). - Talker Alias (
"Talker Alias On/Off"),"Channel Alias". - Зоны:
"Zone Setup","Zone selected","Zone is empty!","not in zone mode","Zone- CH-". - Скан:
"Scan Start/End","Scan Duration/Dwell/Return/Continue","channels to scan". - Хоткеи:
"Extra Hotkey","0 Hotkey"…"9 Hotkey". - Мониторинг/сервис:
"Monitor success!/failed!","Being Monitored","Check Failed","Command Failed","repeater failed","Calibration OK!","Calibration". - Версии:
"Main Firmware","DMR Firmware","Flash Type"— отображение версий обеих прошивок и типа флеш-микросхемы. - Прочее:
"Dual Standby On/Off","Dual Display","DMR Remote Kill/Stun","DMR Time Slot: 1/2","DMR Encrypt: Off","Not DMR Channel!","DMR compatible".
5. Как это использовать
- Верификация — любой наш вывод по железу можно проверить, поискав тот же регистр/бит в REFV.
- Протокол FM100B — у REFV есть код прошивки баузбенда; при разборе команд обновления можно получить полный список сервисных команд FM100B.
- Ориентир по фичам — список выше показывает, что реально достижимо на этом железе.
REFV распространяется только бинарём (исходников нет). Здесь он используется исключительно для сверки/исследования собственной работы.