Files
rt-4d/docs/dmr-tx-recovery.md
T
viktor 6d49ba3cba FM100B = Sicomm SCT3258TD (документирован); Talker Alias, агент, SPI-инструменты, восстановление TX
Главное:
- Опознан DMR-чип: FM100B = Sicomm SCT3258TD. Датащит Packet Interface (126 стр) в docs/.
  Открывает калибровку/AMBE/вокодер по документации. Родня: UV-4R, китайские клоны.

Реализовано:
- Приём Talker Alias (cmd 0x60) — позывной крупно на экране (build_ta.py)
- Интерактивный агент — управление FM100B по COM без перешивки (build_agent.py + agent.py)
- Полная карта команд FM100B с живой рации (fm100b-commands.md)
- Работа с SPI: чтение/запись/восстановление codeplug и калибровки (spi_read/spi_wr/spi_restore)
- Конструктор дисплея + редактор прошивки (tools/display-editor)

Документация:
- docs/SCT3258_packet_interface.txt/.pdf — спека DMR-чипа
- docs/fm100b-commands.md — карта команд
- docs/dmr-tx-recovery.md — диагноз/восстановление DMR-передачи

Инструменты: flash_ps.py (прошивка через WSL/powershell), sniff.py (снифер кадров),
hotspot_rxoffset_sweep.py, apply_patch.py, build_* сборщики.

Важно: DMR TX-калибровка сбита в экспериментах со SET-командами модулю; восстановление
через offset-компенсацию / .updat Radtel / калибровку по прибору (docs/dmr-tx-recovery.md).
2026-07-24 02:52:51 +09:00

4.7 KiB

RT-4D: DMR не передаёт на хотспот — диагноз и восстановление

Симптом

DMR-приём работает (рация принимает из хотспота), DMR-передача не декодируется хотспотом (в логе MMDVMHost 0 «received RF», MMDVMCal рацию не видит). Аналог RX/TX работает. Модуль отвечает в мосте, версия V1.2.0.32. Проблема одинакова на стоке и REFV.

Корень (подтверждён реверсом + техподдержкой Radtel)

TX-частота рации смещена > ±0.2 кГц от номинала. По Q&A Radtel даже ±0.2 кГц не даёт хотспоту синхронизироваться с передачей. Приём работает, т.к. RX-смещение в допуске.

Причина смещения: заводская частотная калибровка была сброшена/затёрта, а Radio Tuning Software «Write» залил ДЕФОЛТНЫЕ значения смещения — неточные для конкретного экземпляра.

Где что лежит

  • Калибровка ОСНОВНОГО тракта рации — SPI region 0x40 (0x000000, 4 КБ). Восстановлена из radio-spi-dump.binприём заработал. Весь codeplug тоже восстановлен из дампа.
  • Частотная калибровка / DMR-девиация — в NVRAM модуля FM100B. Команды модуля: SPCali_FreqOpt, SPCali_DigMod (цифр. модуляция), SPCali_PowerOpt, ATC_RfDeviation_SetReq. Перепрошивка кода модуля их НЕ трогает; сток при старте их НЕ шлёт → сброшенное значение держится.

Radio Tuning Software — как устроена (reverse .NET)

  • Работает через прозрачный мост (режим МЕНЮ), маркер кадров 0xAAAA, команды CmdConnect / CmdOpenCal / CmdWriteAll / CmdEnd.
  • Калибровка = 15 частотных смещений nOffset_1..15 + num_U/V_DigFreq (DMR-частота UHF/VHF).
  • Кнопки: Read (с рации в UI), Write/WriteAll (в рацию), Save.updat файл.
  • ВАЖНО: по Q&A Radtel после калибровки жать «Finish» (сохранение). Возможно Write без этого не фиксирует. И для точной калибровки нужен прибор (SDR/частотомер) — крутить offset до ±0.2 кГц.

Пути восстановления (по приоритету)

  1. Компенсация на хотспоте (RXOffset) — БЕЗ прибора. Если TX рации смещена на постоянный X Гц, выставить на хотспоте RXOffset так, чтобы приёмник поймал смещённую передачу. Перебор RXOffset в MMDVM.ini (±1000 Гц шагом ~100), рестарт MMDVMHost, при передаче рации (PTT) искать «received RF» в логе. Требует, чтобы владелец жал PTT в момент перебора. Инструмент: tools/hotspot_rxoffset_sweep.py (готовится).

  2. Точная калибровка частоты по прибору — Radio Tuning Software + SDR/частотомер: Read → крутить num_U_DigFreq/nOffset до ±0.2 кГц по прибору → Finish/Save + WriteAll.

  3. Заводской .updat — запросить у Radtel техподдержки файл калибровки для серийника, либо debug-софт. Тогда Radio Tuning: Open .updat → WriteAll.

Что уже сделано

  • SPI-калибровка рации (region 0x40) восстановлена из эталона → приём работает.
  • Весь codeplug (каналы/зоны/контакты/группы/ключи/лог/SMS/FM) восстановлен из radio-spi-dump.bin.
  • Диагноз локализован: TX-частотное смещение модуля.
  • Осталось: вернуть точное TX-смещение (пути 1–3 выше).

Инструменты

  • tools/spi_read.py / tools/spi_wr.py — чтение/запись SPI через CPS (WSL powershell).
  • tools/fm100b.py — команды модулю через мост (режим МЕНЮ).
  • tools/agent.py — интерактивный агент (обычный режим).