From 7e64e7a9024da79403b32d3c9f6814d98462eb0a Mon Sep 17 00:00:00 2001 From: viktor Date: Fri, 24 Jul 2026 23:12:04 +0900 Subject: [PATCH] =?UTF-8?q?TX-=D1=84=D0=B8=D0=BA=D1=81:=20DMR=20VCXO-?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D0=BC=200x40->0x80=20(=3D=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=B5=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=B0?= =?UTF-8?q?=D0=BD=D0=B0=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2=D1=8B=D0=B9)=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=200x68,=20=D1=81=D0=BE=D1=85?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D1=91=D0=BD=20=D0=B2=20NV?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Гипотеза: кварц общий (аналог TX на частоте), а DMR трим (0xB4)=0x40 vs аналог 0x80 давал сдвиг. Записал DMR VCCN band1&2=0x80 + CmdWriteAll. Обратимо (baseline 0x3f/0x40). tools/module_calfix.py. Осталось проверить DMR TX в обычном режиме. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01NikMGoqQWWk9wy2ww2vJAr --- tools/module_calfix.py | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tools/module_calfix.py diff --git a/tools/module_calfix.py b/tools/module_calfix.py new file mode 100644 index 0000000..1cb06cf --- /dev/null +++ b/tools/module_calfix.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +"""RT-4D DMR-модуль: чтение/запись частотного трима VCCN через 0x68 (Linux, ttyACM0). +Рация в режиме «Обновление DMR чипа». 0x68: 68 cmd 01 01 00 00 lenHi lenLo 10 (CRC не проверяется). +""" +import serial, time, sys, argparse +def frame(cmd, payload=b""): + return bytes([0x68,cmd,1,1,0,0,(len(payload)>>8)&0xFF,len(payload)&0xFF])+payload+bytes([0x10]) +def xfer(sp, fr, wait=0.4): + sp.reset_input_buffer(); sp.write(fr); time.sleep(0.03) + b=b""; t=time.time() + while time.time()-t пишу DMR VCCN band1&2 = 0x{a.val:02x}") + xfer(sp,frame(0xB4,bytes([1,1,a.val]))) # write band1 + xfer(sp,frame(0xB4,bytes([1,2,a.val]))) # write band2 + w=parse(xfer(sp,frame(0xBD,bytes([1])))) # WriteAll + print(" WriteAll:", "OK" if w and w['st']==0 else f"st={w['st'] if w else '?'}") + nb1,nb2=rd(1),rd(2) + print(f" прочитал обратно: band1=0x{nb1:02x} band2=0x{nb2:02x}") + xfer(sp,frame(0xB0,bytes([1,0]))) # CloseCal + sp.close() +if __name__=="__main__": main()