From d1055218ae4a3ce6b1cd40297bb573b082b79711 Mon Sep 17 00:00:00 2001 From: viktor Date: Fri, 24 Jul 2026 04:53:35 +0900 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D1=87?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=20=D0=BA=D0=B0=D0=BB=D0=B8=D0=B1=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=20(B-?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20<->=20SPCali=20NV,?= =?UTF-8?q?=20=D0=B6=D0=B8=D0=B2=D1=8B=D0=B5=20=D0=B7=D0=BD=D0=B0=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit docs/module-cal-reference.md: карта 0xB0-0xBD, форматы read/write, band-адресация, живой снимок cal. Ключевое: девиация не сбита (0x96), DMR VCXO-трим=0x40 vs аналог=0x80. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01NikMGoqQWWk9wy2ww2vJAr --- docs/module-cal-reference.md | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 docs/module-cal-reference.md diff --git a/docs/module-cal-reference.md b/docs/module-cal-reference.md new file mode 100644 index 0000000..be04a20 --- /dev/null +++ b/docs/module-cal-reference.md @@ -0,0 +1,44 @@ +# RT-4D DMR-модуль (HF6853) — справочник калибровки (0x68 B-команды) + +Консолидация реверса тюнера (docs/tuning-software-protocol.md) + живых чтений через мост +(`tools/tuning_read.py`, режим «Обновление DMR чипа»). Все кадры — 0x68, CK не проверяется, +baud 115200. Прочитано и подтверждено на реальной рации 24.07.2026. + +## Формат +``` +Кадр: 68 01 01 00 00 10 +Read-req: payload = 00 (band: 01 или 02; 00/03 -> status 0x01 = ошибка) +Read-resp: payload = 00 +Write: payload = 01 (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 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).