# 78 接口 Dry-Run 帧验证报告

**协议源**: `release/v1.0.0-beta2/protocol_all_interfaces.json` (78 条)  
**测试方式**: 按规范构造 Data 帧 (FT=0x06),验证 Length / Checksum / 头部 magic  
**FrameSerialNO**: 0x42 (固定,便于复现)

---

## Public 域 (56 条)

| 接口 | 方向 | CMD | 帧长 | Hex | 校验 |
|---|:---:|:---:|:---:|---|:---:|
| `PUBLIC_M2A_LINE_DETECT` | M2A | 0x01 | 9B | `FF AA 00 09 42 06 01 01 AC` | ✅ |
| `PUBLIC_M2A_MCU_VERSION` | M2A | 0x02 | 9B | `FF AA 00 09 42 06 01 02 AB` | ✅ |
| `PUBLIC_M2A_TIME_INFO` | M2A | 0x03 | 9B | `FF AA 00 09 42 06 01 03 AA` | ✅ |
| `PUBLIC_M2A_REQ_PWR_OFF` | M2A | 0x04 | 9B | `FF AA 00 09 42 06 01 04 A9` | ✅ |
| `PUBLIC_M2A_SYS_STATUS` | M2A | 0x05 | 9B | `FF AA 00 09 42 06 01 05 A8` | ✅ |
| `PUBLIC_M2A_KEY_PWR_STATUS` | M2A | 0x06 | 9B | `FF AA 00 09 42 06 01 06 A7` | ✅ |
| `PUBLIC_M2A_BP_PWR_ABNORMAL` | M2A | 0x07 | 9B | `FF AA 00 09 42 06 01 07 A6` | ✅ |
| `PUBLIC_M2A_TFT_DUTY_CYCLE` | M2A | 0x08 | 9B | `FF AA 00 09 42 06 01 08 A5` | ✅ |
| `PUBLIC_M2A_BATT_INFO` | M2A | 0x09 | 9B | `FF AA 00 09 42 06 01 09 A4` | ✅ |
| `PUBLIC_M2A_CAR_SPEED` | M2A | 0x0A | 9B | `FF AA 00 09 42 06 01 0A A3` | ✅ |
| `PUBLIC_M2A_MILEAGE` | M2A | 0x0B | 9B | `FF AA 00 09 42 06 01 0B A2` | ✅ |
| `PUBLIC_M2A_SWITCH_STATUS` | M2A | 0x0C | 9B | `FF AA 00 09 42 06 01 0C A1` | ✅ |
| `PUBLIC_M2A_VOLTAGE` | M2A | 0x0D | 9B | `FF AA 00 09 42 06 01 0D A0` | ✅ |
| `PUBLIC_M2A_FUEL_CAL` | M2A | 0x0E | 9B | `FF AA 00 09 42 06 01 0E 9F` | ✅ |
| `PUBLIC_M2A_ENCRYPT_STATUS` | M2A | 0x0F | 9B | `FF AA 00 09 42 06 01 0F 9E` | ✅ |
| `PUBLIC_M2A_VEHICLE_CFG` | M2A | 0x10 | 9B | `FF AA 00 09 42 06 01 10 9D` | ✅ |
| `PUBLIC_M2A_INS_FUEL_CONSUME` | M2A | 0x11 | 9B | `FF AA 00 09 42 06 01 11 9C` | ✅ |
| `PUBLIC_M2A_MCU_HARD_VERSION` | M2A | 0x12 | 9B | `FF AA 00 09 42 06 01 12 9B` | ✅ |
| `PUBLIC_M2A_VERSION_STRING` | M2A | 0x13 | 9B | `FF AA 00 09 42 06 01 13 9A` | ✅ |
| `PUBLIC_M2A_FACTORY_CMD` | M2A | 0x40 | 9B | `FF AA 00 09 42 06 01 40 6D` | ✅ |
| `PUBLIC_M2A_FACTORY_CMD_FROM_CAN` | M2A | 0x41 | 9B | `FF AA 00 09 42 06 01 41 6C` | ✅ |
| `PUBLIC_M2A_COM_TEST` | M2A | 0x42 | 9B | `FF AA 00 09 42 06 01 42 6B` | ✅ |
| `PUBLIC_M2A_TEST_INFO` | M2A | 0x43 | 9B | `FF AA 00 09 42 06 01 43 6A` | ✅ |
| `PUBLIC_A2M_REQ_INIT_INFO` | A2M | 0x81 | 9B | `FF AA 00 09 42 06 01 81 2C` | ✅ |
| `PUBLIC_A2M_REQ_MUTE` | A2M | 0x82 | 9B | `FF AA 00 09 42 06 01 82 2B` | ✅ |
| `PUBLIC_A2M_TIME_INFO` | A2M | 0x83 | 9B | `FF AA 00 09 42 06 01 83 2A` | ✅ |
| `PUBLIC_A2M_TFT_DUTY_CYCLE` | A2M | 0x84 | 9B | `FF AA 00 09 42 06 01 84 29` | ✅ |
| `PUBLIC_A2M_REQ_SLEEP` | A2M | 0x85 | 9B | `FF AA 00 09 42 06 01 85 28` | ✅ |
| `PUBLIC_A2M_REQ_TYPE_INFO` | A2M | 0x86 | 9B | `FF AA 00 09 42 06 01 86 27` | ✅ |
| `PUBLIC_A2M_REQ_ARM_RESET` | A2M | 0x87 | 9B | `FF AA 00 09 42 06 01 87 26` | ✅ |
| `PUBLIC_A2M_SET_TFT_ON_OFF` | A2M | 0x88 | 9B | `FF AA 00 09 42 06 01 88 25` | ✅ |
| `PUBLIC_A2M_FACTORY_RESTORE` | A2M | 0x89 | 9B | `FF AA 00 09 42 06 01 89 24` | ✅ |
| `PUBLIC_A2M_SET_AMP_PWR_ON_OFF` | A2M | 0x8A | 9B | `FF AA 00 09 42 06 01 8A 23` | ✅ |
| `PUBLIC_A2M_SET_KEY_BACKLIGHT_DUTY_CYCLE` | A2M | 0x8B | 9B | `FF AA 00 09 42 06 01 8B 22` | ✅ |
| `PUBLIC_A2M_SET_SUB_MUTE_ON_OFF` | A2M | 0x8C | 9B | `FF AA 00 09 42 06 01 8C 21` | ✅ |
| `PUBLIC_A2M_KEY_PWR_STATUS` | A2M | 0x8D | 9B | `FF AA 00 09 42 06 01 8D 20` | ✅ |
| `PUBLIC_A2M_SET_REVERSE` | A2M | 0x8E | 9B | `FF AA 00 09 42 06 01 8E 1F` | ✅ |
| `PUBLIC_A2M_SET_SPEED_RATIO` | A2M | 0x8F | 9B | `FF AA 00 09 42 06 01 8F 1E` | ✅ |
| `PUBLIC_A2M_REQ_ARM_FORCE_UPGRADE` | A2M | 0x90 | 9B | `FF AA 00 09 42 06 01 90 1D` | ✅ |
| `PUBLIC_A2M_REQ_TRIP_CLEAR` | A2M | 0x91 | 9B | `FF AA 00 09 42 06 01 91 1C` | ✅ |
| `PUBLIC_A2M_SET_SWITCH_STATUS` | A2M | 0x92 | 9B | `FF AA 00 09 42 06 01 92 1B` | ✅ |
| `PUBLIC_A2M_BT_ERROR_CODE` | A2M | 0x93 | 9B | `FF AA 00 09 42 06 01 93 1A` | ✅ |
| `PUBLIC_A2M_GPS_INFO` | A2M | 0x94 | 9B | `FF AA 00 09 42 06 01 94 19` | ✅ |
| `PUBLIC_A2M_SET_TOT_MILES` | A2M | 0x95 | 13B | `FF AA 00 0D 42 06 01 95 95 96 97 98 BA` | ✅ |
| `PUBLIC_A2M_SET_WORK_MODE` | A2M | 0x95 | 10B | `FF AA 00 0A 42 06 01 95 95 82` | ✅ |
| `PUBLIC_A2M_SET_FUEL_CAL` | A2M | 0x96 | 9B | `FF AA 00 09 42 06 01 96 17` | ✅ |
| `PUBLIC_A2M_SET_VEHICLE_CFG` | A2M | 0x97 | 9B | `FF AA 00 09 42 06 01 97 16` | ✅ |
| `PUBLIC_A2M_REQ_VEHICLE_CFG` | A2M | 0x98 | 9B | `FF AA 00 09 42 06 01 98 15` | ✅ |
| `PUBLIC_A2M_ARM_SW_VERSION` | A2M | 0x99 | 9B | `FF AA 00 09 42 06 01 99 14` | ✅ |
| `PUBLIC_A2M_ARM_HW_VERSION` | A2M | 0x9A | 9B | `FF AA 00 09 42 06 01 9A 13` | ✅ |
| `PUBLIC_A2M_AUTO_CLEAR_METER_TYPE` | A2M | 0x9B | 9B | `FF AA 00 09 42 06 01 9B 12` | ✅ |
| `PUBLIC_M2A_COM_TEST_RESPONSE` | M2A | 0x9C | 9B | `FF AA 00 09 42 06 01 9C 11` | ✅ |
| `PUBLIC_M2A_STOP_CHARGE` | M2A | 0x9D | 9B | `FF AA 00 09 42 06 01 9D 10` | ✅ |
| `PUBLIC_M2A_RUN_NORMALLY` | M2A | 0x9E | 9B | `FF AA 00 09 42 06 01 9E 0F` | ✅ |
| `PUBLIC_A2M_RESPONSE_FACTORY_CMD` | A2M | 0xA0 | 9B | `FF AA 00 09 42 06 01 A0 0D` | ✅ |
| `PUBLIC_A2M_RESPONSE_TEST_CMD` | A2M | 0xA1 | 9B | `FF AA 00 09 42 06 01 A1 0C` | ✅ |

## Radio 域 (12 条)

| 接口 | 方向 | CMD | 帧长 | Hex | 校验 |
|---|:---:|:---:|:---:|---|:---:|
| `RADIO_M2A_FREQ` | M2A | 0x01 | 9B | `FF AA 00 09 42 06 05 01 A8` | ✅ |
| `RADIO_M2A_PS_PTY` | M2A | 0x02 | 9B | `FF AA 00 09 42 06 05 02 A7` | ✅ |
| `RADIO_M2A_RT` | M2A | 0x03 | 9B | `FF AA 00 09 42 06 05 03 A6` | ✅ |
| `RADIO_M2A_TA_PTY_TIPS` | M2A | 0x04 | 9B | `FF AA 00 09 42 06 05 04 A5` | ✅ |
| `RADIO_M2A_WORK_STATUS` | M2A | 0x05 | 9B | `FF AA 00 09 42 06 05 05 A4` | ✅ |
| `RADIO_A2M_SEEK_MODE` | A2M | 0x81 | 9B | `FF AA 00 09 42 06 05 81 28` | ✅ |
| `RADIO_A2M_SWITCH_ON_OFF` | A2M | 0x82 | 9B | `FF AA 00 09 42 06 05 82 27` | ✅ |
| `RADIO_A2M_SET_BAND` | A2M | 0x83 | 9B | `FF AA 00 09 42 06 05 83 26` | ✅ |
| `RADIO_A2M_SET_FREQ` | A2M | 0x84 | 9B | `FF AA 00 09 42 06 05 84 25` | ✅ |
| `RADIO_A2M_FREQ_RANGE` | A2M | 0x85 | 9B | `FF AA 00 09 42 06 05 85 24` | ✅ |
| `RADIO_A2M_SET_ANT_PWR_ON_OFF` | A2M | 0x86 | 9B | `FF AA 00 09 42 06 05 86 23` | ✅ |
| `RADIO_A2M_SET_RADIO_REG_MUTE` | A2M | 0x87 | 9B | `FF AA 00 09 42 06 05 87 22` | ✅ |

## Update 域 (10 条)

| 接口 | 方向 | CMD | 帧长 | Hex | 校验 |
|---|:---:|:---:|:---:|---|:---:|
| `UPDATE_M2A_UPDATE_ACK` | M2A | 0x01 | 9B | `FF AA 00 09 42 06 07 01 A6` | ✅ |
| `UPDATE_M2A_UPDATE_LEN` | M2A | 0x02 | 9B | `FF AA 00 09 42 06 07 02 A5` | ✅ |
| `UPDATE_M2A_UPDATE_IND_AQUIRE` | M2A | 0x03 | 9B | `FF AA 00 09 42 06 07 03 A4` | ✅ |
| `UPDATE_A2M_UPDATE_REQ` | A2M | 0x80 | 9B | `FF AA 00 09 42 06 07 80 27` | ✅ |
| `UPDATE_A2M_UPDATE_BEGIN` | A2M | 0x81 | 9B | `FF AA 00 09 42 06 07 81 26` | ✅ |
| `UPDATE_A2M_UPDATE_DATA` | A2M | 0x82 | 9B | `FF AA 00 09 42 06 07 82 25` | ✅ |
| `UPDATE_A2M_UPDATE_END` | A2M | 0x83 | 9B | `FF AA 00 09 42 06 07 83 24` | ✅ |
| `UPDATE_A2M_BOOT_UPDATE_BEGIN` | A2M | 0x84 | 9B | `FF AA 00 09 42 06 07 84 23` | ✅ |
| `UPDATE_A2M_BOOT_UPDATE_DATA` | A2M | 0x85 | 9B | `FF AA 00 09 42 06 07 85 22` | ✅ |
| `UPDATE_A2M_BOOT_UPDATE_CHECKSUM` | A2M | 0x86 | 9B | `FF AA 00 09 42 06 07 86 21` | ✅ |

---

## 总结

- 总接口数: **78**
- ✅ 帧构造合法: **78**
- ❌ 不合法: **0**

## 注意事项

- 本测试仅校验帧结构本身(头部/长度/校验/序列号位置),不验证业务字段。
- M2A 帧(MCU→ARM)在真实测试中是 *接收方向*,本脚本按"如果 ARM 模拟构造"思路也构造了一份,用于物理层结构对账。
- cmd 0x95 上 `SET_TOT_MILES` 与 `SET_WORK_MODE` 两条,本脚本用 `payload_bytes` 字段区分(4B vs 1B);两帧分别合法。
- 真机端到端测试请在 Android 设备上执行 `./test_Serial/mcu_full_test`(arm64 二进制已重新编译并含 setWorkMode)。
