Files
rt-4d/docs/tuning-software-protocol.md
T
viktorиClaude Opus 4.8 dfae06acfc Реверс: RDA-debug в мосте недоступен; тюнер калибрует по 0x68 (cmd 0xB0-0xBD)
- tools/a6_probe.py: проверка достижимости RDA-debug через мост.
  РЕЗУЛЬТАТ: 0x68-мост жив, но RDA knock молчит на 115200/921600 (XON/XOFF и без) —
  прошивка модуля держит UART, ROM-debug недоступен. Значит a6tools/AT+DMOFREQERR
  напрямую не пробить; калибровку писать через 0x68.
- docs/tuning-software-protocol.md: декомпиляция Radio Tuning Software 241219.exe
  (dnfile). Сборка UV5118_4819_Tune. Калибровка идёт ТЕМ ЖЕ 0x68 (не 0xAAAA),
  команды 0xB0-0xBD извлечены из статических шаблонов: 0xBD connect, 0xB1 границы
  диапазонов (UHF 400/435/470, VHF 136/150/174 МГц), 0xB2/B4 девиация, 0xB6/B7/B8
  мощность/частотные точки, num_U_DigFreq = смещение DMR-частоты. Достижимо через
  наш мост -> путь к правильной калибровке TX без прибора (фидбек по MMDVM BER).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NikMGoqQWWk9wy2ww2vJAr
2026-07-24 03:24:03 +09:00

4.6 KiB
Исходник Ответственный История

Radio Tuning Software 241219 — реверс протокола калибровки

Декомпиляция Radio Tuning Software 241219.exe (dnfile). Сборка UV5118_4819_Tune («4819» = шина управления DMR-модулем DIG-SCN/SDA/SCK4819 со схемы RT4DDLT01).

Главное

Тюнер калибрует модуль тем же 0x68-протоколом, что и tools/fm100b.py (НЕ 0xAAAA, как считалось раньше) — значит достижимо через наш мост (режим «Обновление DMR чипа»). Формат кадра тот же: 68 cmd b sub CKhi CKlo lenHi lenLo <payload> 10, CRC как в fm100b.py.

Команды калибровки (0xB0–0xBD), извлечены из статических шаблонов (FieldRVA)

cmd назначение (по контексту UI/методов) пример payload
0xBD Connect / вход в режим калибровки 01
0xB0 старт/стоп калибровки (on/off) 01 / 00
0xB1 таблица границ диапазонов (band, N, частоты ×N по 4Б BE, Гц) UHF: 400.125/435.125/469.975 МГц; VHF: 136.125/150.125/174.125 МГц
0xB2 девиация/модуляция набор 1 (band, idx, val) 01 01 80; read: 00 02
0xB4 девиация/модуляция набор 2 01 01 80; read: 00 02
0xB6 мощность/параметр (band, idx, val16?) 01 01 01 96; read: 00 01 00
0xB7 частотные точки/оффсеты (band, idx, …) 01 00 05 9a 01 08 75; read: 00
0xB8 мощность/параметр 01 01 01 02 78; read: 00 01 01 00
0xB3 SQ/шум набор 1 01 01 02 02
0xB5 SQ/шум набор 2 01 01 00 02

Первый байт payload = band: 01=UHF, 02=VHF (в 0xB1); в set-командах 01=UHF-set, 00=read/VHF. Частоты в 0xB1 — 32-битные BE в Гц.

Модель калибровки (из UI-методов и дефолтов)

  • Панель делит диапазон на 15 частотных точек (методы cboxNN_1..15, nPowerH/L_1..15, nSQN/W_1..15, nNoiseN/W_1..15) — для каждой точки свои: мощность H/M/L, девиация (Mod1..3), SQ, шумоподавление.
  • Отдельно num_U_DigFreq / num_V_DigFreqсмещение ЦИФРОВОЙ (DMR) частоты UHF/VHF (наш параметр!), num_U_AnaFreq — аналоговой. Плюс chbox_U_DigFreq (вкл).
  • Кнопки: btnCal_U_Freq (автокалибровка частоты по прибору), btnRead_U_Freq, btnStop_U_Freq; btnRead_U_Mod/PWR, btnCal_U_Mod/PWR; btnTouchuan = 透传 (прозрачный режим TX для замера). ButtonRead/btnWriteAll/ButtonWrite; SaveTuneData/SaveDigTuneData = запись+сохранение (это и есть «Finish»).
  • Приём/разбор ответов: Port_DataReceivedRecvDataOperation (≈74 обработчика по cmd), DataSum = контрольная сумма.

Заводские дефолты (из блоба)

mod:  b9 b9 b9 b9 b9 b9   (6×)      # девиация-дефолт
      32 32 32 32 32 32
      9b 9b 9b 9b 9b 9b
flags 00 ff 00
      37 a0 38 6b 40 ab             # ?
      06 02 06 02 0a 00 05 00
15pt: 3a 3c 3f 41 44 47 4a 4b 4c 4d 4e 4f 50 51 52   # 15 частотных точек (растущие)
      80 00 80
      12 e2 34 40 2a 4f b3  (×2)

Что осталось (для скриптования)

Точное соответствие «num_U_DigFreq → cmd+байт» — в IL методов btnRead_U_Freq_Click / ReadDigDataToUI / SaveDigTuneData. Кандидат — 0xB7 (частотные точки/оффсет) или отдельный freq-cmd. Для ручной калибровки штатным тулом это не нужно: num_U_DigFreq крутится в UI.

План применения (см. dmr-tx-recovery.md, путь через 0x68)

Вариант A (штатный тул): пользователь открывает Tuning SW → Read → крутит num_U_DigFreq → WriteAll → Save → сменить канал → PTT → BER на MMDVM. Перебор до минимума BER (без прибора). Вариант B (скрипт): дореверсить cmd DigFreq → tools/ слать 0xB7/0xBx через мост, MMDVM-фидбек.