Реверс апдейтеров + API-карта модуля (172 команды)
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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NikMGoqQWWk9wy2ww2vJAr
Этот коммит содержится в:
@@ -64,6 +64,25 @@ Bootloader | Application | RF Firmware | NET info
|
|||||||
снять полный дамп → распарсить EasyFlash ENV (NET info) + разобрать RF Firmware (vocoder/DMR).
|
снять полный дамп → распарсить EasyFlash ENV (NET info) + разобрать RF Firmware (vocoder/DMR).
|
||||||
Это разблокирует СРАЗУ: NV-настройки, калибровку, и сам DMR-baseband для реверса.
|
Это разблокирует СРАЗУ: 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 и модулем)
|
1. **API-поверхность:** извлечь полный список ATC_*/SP*-команд (это протокол 0x68 между AT32 и модулем)
|
||||||
— карта того, чем вообще можно управлять. Уже частично в docs/fm100b-commands.md.
|
— карта того, чем вообще можно управлять. Уже частично в docs/fm100b-commands.md.
|
||||||
|
|||||||
@@ -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
|
||||||
Ссылка в новой задаче
Block a user