From 1d196eff893734ae9008da6951d2fd9d4a4a6706 Mon Sep 17 00:00:00 2001 From: viktor Date: Fri, 24 Jul 2026 04:52:15 +0900 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B2=D0=B5=D1=80=D1=81=20=D0=B0?= =?UTF-8?q?=D0=BF=D0=B4=D0=B5=D0=B9=D1=82=D0=B5=D1=80=D0=BE=D0=B2=20+=20AP?= =?UTF-8?q?I-=D0=BA=D0=B0=D1=80=D1=82=D0=B0=20=D0=BC=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D1=8F=20(172=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4?= =?UTF-8?q?=D1=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RT-4D Upgrade (.NET, DES+RSA) прошивает AT32 (протокол 39 33 05 = загрузчик рации), НЕ модуль. Полный список 172 ATC/SP-команд модуля (research/module-fw/). У приложения модуля НЕТ команды дампа flash -> полный дамп NV/RF Firmware только через загрузчик модуля (download-режим, live). Cal-значения (SPCali_*: FreqOpt/AnaVccn/DigMod) доступны B-командами. docs/fm100b-firmware-re.md. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01NikMGoqQWWk9wy2ww2vJAr --- docs/fm100b-firmware-re.md | 19 +++ research/module-fw/module_api_commands.txt | 172 +++++++++++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 research/module-fw/module_api_commands.txt diff --git a/docs/fm100b-firmware-re.md b/docs/fm100b-firmware-re.md index 0d80a87..b78e34e 100644 --- a/docs/fm100b-firmware-re.md +++ b/docs/fm100b-firmware-re.md @@ -64,6 +64,25 @@ Bootloader | Application | RF Firmware | NET info снять полный дамп → распарсить EasyFlash ENV (NET info) + разобрать RF Firmware (vocoder/DMR). Это разблокирует СРАЗУ: NV-настройки, калибровку, и сам DMR-baseband для реверса. +## Апдейтеры: кто что прошивает (реверс .NET) +- **RT-4D Upgrade V3_25** (`Ido_Update`, DES+RSA) прошивает **AT32 (главный CPU рации)**, НЕ модуль: + команды `Send_Connect=39 33 05 10 c9`, `Send_Update=39 33 05 55 0e`, `Send_End=39 33 05 ee a7` + — это протокол **загрузчика AT32** (тот же `39 33 05`, что в `tools/flash_ps.py`). Для дампа + flash модуля НЕ годится. +- **Radio Tuning Software** — калибровка модуля по 0x68 (см. docs/tuning-software-protocol.md). +- Отдельного PC-апдейтера МОДУЛЯ на рабочем столе нет; образы `FM100B_*.bin` = раздел Application + (0x175000 = ровно размер раздела), т.е. из вендорского пакета, не live-дамп. + +## API-поверхность модуля (172 команды, research/module-fw/module_api_commands.txt) +Полный список ATC_*/SP*-команд (протокол 0x68 AT32↔модуль). Важное: +- Калибровка (NV): `SPCaliic_FreqOpt`/`SPCaliFreqSetCnf` (частота!), `SPCali_AnaVccnOpt` (VCCN аналог=0x80), + `SPCali_DigMod1Opt` (девиация), `SPCali_ChannelParamOpt`, `SPCali_AnaSQthOpt`, `SPCali_SQRXFreqOpt`, + `SPCali_HeadGQParamOpt`. Это NV-элементы, которые читаются/пишутся B-командами (0xB0–0xBD). +- ⚠️ `ATC_ClearNVdataReq` — СТИРАНИЕ NV (не слать!). +- **Команды дампа flash в приложении НЕТ** → полный дамп NV(«NET info»)/RF Firmware возможен только + через **загрузчик модуля** (download-режим), не через рабочую прошивку. Это живая операция (при владельце). + Сами cal-значения доступны и так — через B-команды (tools/tuning_read.py). + ## Реальные следующие шаги (реверс+правка+тест) 1. **API-поверхность:** извлечь полный список ATC_*/SP*-команд (это протокол 0x68 между AT32 и модулем) — карта того, чем вообще можно управлять. Уже частично в docs/fm100b-commands.md. diff --git a/research/module-fw/module_api_commands.txt b/research/module-fw/module_api_commands.txt new file mode 100644 index 0000000..ff3cb7d --- /dev/null +++ b/research/module-fw/module_api_commands.txt @@ -0,0 +1,172 @@ +ATAlarmStatusCnf +ATAlarmStatus_s +ATAnaCallSetupC +ATAnaCalledStartCnf +ATAssi +ATBtlLevelQueryCnf +ATCAgcthSetReq +ATCAnaCtCdGainSetReq +ATCCmdUploadDigBusyIsStatus +ATCEQLevelSetReq +ATCRFCompanderSetReqGy +ATCRecvAmbe6sdataCnf +ATCRfChipQu +ATCRxSmsSendAckCn7 +ATCScancallCnfParser +ATCSqlGe +ATC_ +ATC_ANATX9 +ATC_Al +ATC_AnaChGroupSetReq +ATC_AnaSignalNumSetReq +ATC_AssignChDataQuery_Reqs +ATC_AssignRecGroup_Query +ATC_CMD +ATC_Cal +ATC_CalledContactINfoQuery +ATC_ChDcdmSwitchRe +ATC_ChFreqSetReq +ATC_ChModeSet +ATC_ChRFChipS +ATC_ChSlotSetReq +ATC_ChannelSetCnf +ATC_CheckSumFail +ATC_ClearNVdataReq +ATC_CurCHAnaS +ATC_CurCHDigdataSetReq +ATC_CurChKeySetReq +ATC_CurChTOTTime_SETRa +ATC_CurChannelWaitSetReq +ATC_DTMFToneSetReq +ATC_DigChGroupSetReq +ATC_DigMonitorEnSetReq +ATC_DigS +ATC_EMGtype +ATC_FreqopP +ATC_In +ATC_Inbanddatb +ATC_KeyHandle_MonitorSetProc +ATC_KeyHandle_POWERSetPr +ATC_KeyHandle_S +ATC_LocalRecordPlayReq +ATC_MICCodecGainS4met +ATC_Mon +ATC_MonitorTxtimeSetReq +ATC_Msg +ATC_PlaySingleToneReq +ATC_PowerlevelSet +ATC_PrintInfo +ATC_RFRegs +ATC_RXKillDecodeEnS +ATC_RadioIDSetReq +ATC_RecordDataPlayReq +ATC_RecordEnReq +ATC_ReportDigInfo +ATC_RfDeviati +ATC_Roq +ATC_RssiReadReq +ATC_SMSPr +ATC_SPKCodecGainSet +ATC_Sca +ATC_SeGTtDeepSleepReq +ATC_SendCallPromptReq +ATC_SendSmsfailInfo +ATC_SendVcdNoi3 +ATC_SetC +ATC_SetEncryptLi +ATC_SetLanguageSe +ATC_SetRfPowerLevelReq +ATC_SleepStatusCLnng +ATC_SmsmodeSetReq +ATC_SwitchChannela +ATC_T5hholdtimesetReq +ATC_TxCon +ATC_UVFreqGpio_SE +ATC_VCDInterleavEnReq +ATCall +ATCallDisCo +ATCallN +ATChChgCnf +ATCmdBSStatus +ATCmdSetCnf +ATCurChScanlistQueryCnf +ATDataStatus +ATDigBroadcastCnf5 +ATDigCallSetupCnf +ATDigCalledStartCnf +ATModule +ATNoiselevSetCnf +ATQuerySY +ATRadioIDQueryCnf +ATRecvEmgCallInd +ATRssiQueryCnf +ATSPSendSleepReq +ATSPWak +ATScanStatusQueryCnf +ATScanSwitchCnf +ATUploadRxSmsCnf +ATVCDInterleavQueryCnf +ATVoicL +ATVoiceDecCnf +ATVoiceEncryptQum +ATVoiceProd +SPATCDigChBusyIsCnf +SPATCRecvEmgDi +SPATSetCnf +SPATSysReadyInd +SPATVoicedata +SPATWkInd +SPAnaCallsetupCnf +SPAssignC +SPAssignRecGroupQuery +SPAtcAnaCallRxStartCnfK +SPAtcAnaSqlBusyStatus +SPAtcBSActiveStat +SPAtcSleepTimerOPT +SPBSActTimeoverCnf +SPBreakCnf +SPCaliFreqSetCnf +SPCali_AnaSQthOpt +SPCali_AnaVccnOpt +SPCali_ChannelParamOpt +SPCali_DigMod1Opt +SPCali_HeadGQParamOpt +SPCali_SQRXFreqOyYpt +SPCaliic_FreqOpt +SPCalledIDQuer +SPCclPwsSetReq +SPCclSpDP +SPCclSpInBandDataInd +SPContactProcessHandleReq +SPCurZoneChinfoQuery +SPDigMonitorReportInfo +SPEMG_StopAlarmReq +SPGetVcdNoiseTHReq +SPGroupListI +SPKirisunEffectCnf +SPMicVoiceCnf +SPMmiCh +SPMmiSetupCnf +SPModuleInitQuery +SPNullMsgSendReq +SPRadioIDQuery +SPResetC +SPRoamList_SoPetReq +SPRssi_glitchQueryCnf +SPRssi_noiselevQueryCnf +SPRssilev0 +SPSCAN_ScanInd +SPScanH +SPSendInBandDataReq +SPSetVcdNo +SPSlo +SPSpMmi +SPSwVerQuery +SPSysLanguageQuery +SPT +SPUpData +SPVcdInterleavQuery +SPVoiceDa +SPVoiceEncryptQuery +SPWaitChDi +SP_ID