# RT-4D DMR-модуль (HF6853) — справочник калибровки (0x68 B-команды)

Консолидация реверса тюнера (docs/tuning-software-protocol.md) + живых чтений через мост
(`tools/tuning_read.py`, режим «Обновление DMR чипа»). Все кадры — 0x68, CK не проверяется,
baud 115200. Прочитано и подтверждено на реальной рации 24.07.2026.

## Формат
```
Кадр:      68 <cmd> 01 01 00 00 <lenHi> <lenLo> <payload...> 10
Read-req:  payload = 00 <band>              (band: 01 или 02; 00/03 -> status 0x01 = ошибка)
Read-resp: payload = 00 <band> <val...>
Write:     payload = 01 <band> <val...>     (op=01)
Ответ OK:  status(байт[3]) = 0x00;  ошибка = 0x01
```
`band`: 01 и 02 — два поддиапазона (вероятно нижний/верхний участок UHF; VHF-вариант в SetCalFreq_V).

## Команды
| cmd | имя (тюнер) | NV-элемент (прошивка) | что | формат value | живое значение (UHF) |
|-----|-------------|------------------------|-----|--------------|----------------------|
| 0xB0 | CmdOpenCal/ColseCal | — | вход/выход cal (payload 01/00) | — | OK |
| 0xB1 | SetCalFreq_U/_V | SPCaliic_FreqOpt | опорные частоты диапазона (3×4Б BE Гц) | band,N,freqs | UHF 400.125/435.125/469.975 МГц |
| 0xB2 | Set/ReadAnaVCCN | SPCali_AnaVccnOpt | **аналоговый частотный трим (VCXO)** | band,val8 | band1=0x80, band2=0x80 |
| 0xB4 | Set/ReadDigVCCN | (Dig VCCN) | **DMR частотный трим (VCXO)** | band,val8 | band1=0x3f, band2=0x40 |
| 0xB3 | SetAnaTX | — | аналог TX параметр | band,i,v | — |
| 0xB5 | SetDigTX | SPCali_DigMod1Opt? | DMR TX (несёт DetectDevice) | band,i,dev | — |
| 0xB6 | Set/ReadMod (Cal) | (девиация Mod1..3) | девиация | band,idx(1..3),val8 | все = 0x96 (дефолт, НЕ сбита) |
| 0xB7 | Set/ReadSlot (Cal) | — | тайминг/слот | band,... | 00 03 42 01 08 d9 |
| 0xB8 | Set/ReadPWR (Cal) | SPCali_PowerOpt | мощность | band,idx,val | 00 01 01 00 05 |
| 0xBD | CmdWriteAll | — | сохранить cal в NV (payload 01, БЕЗ данных) | — | — |

Пример записи DMR-трима band2: `68 b4 01 01 00 00 00 03 01 02 <val> 10` (проверено, обратимо
живьём без CmdWriteAll — откатывается при перезагрузке).

## Ключевые наблюдения по «сдвигу TX»
- Девиация (Mod, 0xB6) = 0x96 по всем band/idx — **дефолт, не повреждена** (мои старые 0x66-эксперименты следа не оставили).
- DMR VCXO-трим (0xB4) = 0x40, аналоговый (0xB2) = 0x80. Аналог работает → его трим верен.
  DMR-трим — кандидат №1 на источник частотного сдвига DMR, но **требует измерения** (BER на MMDVM
  или частотомер), т.к. направление/цена деления неизвестны. Слепо не писать (см. docs/dmr-tx-recovery.md).
- Частотная калибровка штатно — ЗАМКНУТЫЙ цикл под прибор (CmdOpenCal → модуль TX несущую → крутить
  трим → CmdWriteAll). Один AT+DMOFREQERR-стиль «одной командой» тут не применим.

## Живой снимок (research/tuning-re/module-cal-baseline.txt)
DigVCCN b1=0x3f b2=0x40 | AnaVCCN b1=b2=0x80 | Mod all=0x96 | PWR 00 01 01 00 05 | Slot 00 00 03 42 01 08 d9.
Baseline для отката DMR-трима = 0x40 (band2), 0x3f (band1).
