Files
rt-4d/docs/refw-analysis.md
T
viktor 5f4d207aa5 Мост к DMR-модулю, разбор спектра REFV DualTachyon, карта запчастей прошивки
Баузбенд 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
2026-07-22 21:17:20 +09:00

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. Как это использовать

  1. Верификация — любой наш вывод по железу можно проверить, поискав тот же регистр/бит в REFV.
  2. Протокол FM100B — у REFV есть код прошивки баузбенда; при разборе команд обновления можно получить полный список сервисных команд FM100B.
  3. Ориентир по фичам — список выше показывает, что реально достижимо на этом железе.

REFV распространяется только бинарём (исходников нет). Здесь он используется исключительно для сверки/исследования собственной работы.