Главное: - Опознан 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).
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 кГц.
Пути восстановления (по приоритету)
-
Компенсация на хотспоте (RXOffset) — БЕЗ прибора. Если TX рации смещена на постоянный X Гц, выставить на хотспоте
RXOffsetтак, чтобы приёмник поймал смещённую передачу. Перебор RXOffset в MMDVM.ini (±1000 Гц шагом ~100), рестарт MMDVMHost, при передаче рации (PTT) искать «received RF» в логе. Требует, чтобы владелец жал PTT в момент перебора. Инструмент:tools/hotspot_rxoffset_sweep.py(готовится). -
Точная калибровка частоты по прибору — Radio Tuning Software + SDR/частотомер: Read → крутить
num_U_DigFreq/nOffsetдо ±0.2 кГц по прибору → Finish/Save + WriteAll. -
Заводской
.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— интерактивный агент (обычный режим).