# Разбор кастомной прошивки 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 распространяется только бинарём (исходников нет). Здесь он используется исключительно > для сверки/исследования собственной работы.