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).
Этот коммит содержится в:
@@ -0,0 +1,54 @@
|
||||
# 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` — интерактивный агент (обычный режим).
|
||||
Ссылка в новой задаче
Block a user