# MCU 接口测试报告 (Interface Test Report)

> 生成时间: 2026-07-XX
> 测试工具链: `mcu_interface_test.c` (逐步演进为 .so 共享库)
> 设备: 192.168.0.66:5555 (RTD1861 Android 14)
> 串口: /dev/ttyS7 @ 460800 8N1
> MCU 固件: E112C069XZA0120015 (SW: 0302_20260512)

---

## 已测试接口 (22 条)

### Public A2M (7 条通过)

| Cmd | 接口名 | 发送帧 (HEX) | ACK | M2A 回复 | 结果 |
|-----|--------|-------------|-----|---------|------|
| 0x81 | REQ_INIT_INFO | `FF AA 00 09 02 06 01 81 6C` | ✅ | SYS_STATUS, LINE_DETECT, KEY_PWR | ✅ PASS |
| 0x82 | REQ_MUTE | `FF AA 00 0A 03 06 01 82 00 69` | ✅ | BP_PWR_ABNORMAL, VERSION_STRING | ✅ PASS |
| 0x83 | TIME_INFO | `FF AA 00 10 04 06 01 83 00...61` | ✅ | VERSION_STRING, TIME_INFO, TFT_DUTY, Notify风暴 | ✅ PASS |
| 0x84 | TFT_DUTY_CYCLE | `FF AA 00 0A 05 06 01 84 00 65` | ✅ | — | ✅ PASS |
| 0x86 | REQ_TYPE_INFO(MCU_VERSION) | `FF AA 00 0A 07 06 01 86 02 5F` | ✅ | — | ✅ PASS |
| 0x86 | REQ_TYPE_INFO(LINE_DETECT) | `FF AA 00 0A 08 06 01 86 01 5F` | ✅ | — | ✅ PASS |
| 0x88 | SET_TFT_ON_OFF | `FF AA 00 0A 0A 06 01 88 00 5C` | ✅ | — | ✅ PASS |

### Update 域 (通过升级测试验证)

| Cmd | 接口名 | 结果 | 备注 |
|-----|--------|------|------|
| 0x80 | UPDATE_A2M_UPDATE_REQ | ✅ PASS | ACK 收到 |
| 0x81 | UPDATE_A2M_UPDATE_BEGIN | ✅ PASS | ACK 收到 |
| 0x82 | UPDATE_A2M_UPDATE_DATA | ❌ FAIL | **Chunk 2 开始超时，MCU 死锁** |
| 0x01 | UPDATE_M2A_UPDATE_ACK | ✅ 收到 | MCU 回复 |
| 0x02 | UPDATE_M2A_UPDATE_LEN | ✅ 收到 | pack_len=1024 |
| 0x03 | UPDATE_M2A_UPDATE_IND_AQUIRE | ✅ 收到 | index=0,1,2 |

### 通过 tty_raw 单步获取的 M2A 数据 (8 条)

| Cmd | 接口名 | 数据 |
|-----|--------|------|
| 0x01 | PUBLIC_M2A_LINE_DETECT | 线检测状态 payload |
| 0x02 | PUBLIC_M2A_MCU_VERSION | **E112C069XZA0120015** |
| 0x03 | PUBLIC_M2A_TIME_INFO | MCU 回传时间数据 |
| 0x05 | PUBLIC_M2A_SYS_STATUS | 首次上电状态 |
| 0x06 | PUBLIC_M2A_KEY_PWR_STATUS | 按键电源状态 |
| 0x07 | PUBLIC_M2A_BP_PWR_ABNORMAL | 备用电源异常状态 |
| 0x08 | PUBLIC_M2A_TFT_DUTY_CYCLE | TFT 背光 0x00 |
| 0x13 | PUBLIC_M2A_VERSION_STRING | **0302_20260512** |

---

## 关键发现

### 1. 三步握手

**必须完整执行 Setup→SetupAck→ACK 三步。** 缺最后一步则 MCU 不处理任何 DATA 帧。

### 2. MCU 推送模式

发 A2M 命令后 MCU 会在 2 秒窗口内重复推送多次：
```
REQ_INIT_INFO(0x81) → SYS_STATUS×4, LINE_DETECT×4, KEY_PWR×4
```

### 3. Notify 帧 (FT=0x07)

MCU 会自发推送 Notify 帧 (电压/数据广播)，ARM **不需要**回复 ACK。

### 4. 升级 UPDATE_DATA 死锁

前 2 块 (2KB) 传输成功，第 3 块开始 MCU 不回复 ACK，重试 4 次后失败。

---

## 待测试接口 (29 条)

### Public A2M 未测 (21 条)

```
0x8A SET_AMP_PWR_ON_OFF     0x8B SET_KEY_BACKLIGHT
0x8C SET_SUB_MUTE_ON_OFF    0x8D KEY_PWR_STATUS
0x8E SET_REVERSE            0x8F SET_SPEED_RATIO
0x91 REQ_TRIP_CLEAR         0x92 SET_SWITCH_STATUS
0x93 BT_ERROR_CODE          0x94 GPS_INFO
0x95 SET_TOT_MILES          0x95 SET_WORK_MODE
0x96 SET_FUEL_CAL           0x97 SET_VEHICLE_CFG
0x98 REQ_VEHICLE_CFG        0x99 ARM_SW_VERSION
0x9A ARM_HW_VERSION         0x9B AUTO_CLEAR_METER_TYPE
0xA0 RESPONSE_FACTORY_CMD   0xA1 RESPONSE_TEST_CMD
```

### Radio A2M 未测 (5 条)

```
0x83 SET_BAND       0x84 SET_FREQ
0x85 FREQ_RANGE     0x86 SET_ANT_PWR
0x87 SET_REG_MUTE
```

### 依赖 CAN (18 条) — 无 CAN 环境跳过

车速、电压、电池、里程、油耗、RDS 等车辆信号相关接口。

**当前状态**: MCU 被升级测试死锁，需要 JLink 恢复后继续测试。


序号                     │ 函数名                   │ 说明                     │
  │ 1                        │ `mcureqinit_info`        │ 请求初始化信息           │
  │ 2                        │ `mcureqmute`             │ 请求静音                 │
  │ 3                        │ `mcusendtime_info`       │ 发送时间同步             │
  │ 4                        │ `mcusettftdutycycle`     │ 设置背光                 │
  │ 5                        │ `mcureqtype_info`        │ 请求类型信息             │
  │ 6                        │ `mcusettftonoff`         │ TFT 开关                 │
  │ 7                        │ `mcusetamp_pwr`          │ 功放电源                 │
  │ 8                        │ `mcusetkey_backlight`    │ 按键背光                 │
  │ 9                        │ `mcusetsub_mute`         │ 副麦静音                 │
  │ 10                       │ `mcusendkeypwrstatu…     │ 按键电源状态             │
  │ 11                       │ `mcusetreverse`          │ 倒车状态                 │
  │ 12                       │ `mcusetspeed_ratio`      │ 车速系数                 │
  │ 13                       │ `mcureqtrip_clear`       │ 小计清零                 │
  │ 14                       │ `mcusetswitch_status`    │ 开关状态                 │
  │ 15                       │ `mcusendbt_error`        │ 蓝牙错误码               │
  │ 16                       │ `mcusettot_miles`        │ 总里程                   │
  │ 17                       │ `mcusetwork_mode`        │ 工作模式                 │
  │ 18                       │ `mcusetfuel_cal`         │ 燃油校准                 │
  │ 19                       │ `mcusetvehicle_cfg`      │ 车辆配置                 │
  │ 20                       │ `mcureqvehicle_cfg`      │ 请求车辆配置             │
  │ 21                       │ `mcusendarmswversio…     │ ARM 软件版本             │
  │ 22                       │ `mcusendarmhwversio…     │ ARM 硬件版本             │
  │ 23                       │ `mcuautoclearmetert…     │ 清零类型                 │
  │ 24                       │ `mcuradioset_band`       │ Radio 设置频段           │
  │ 25                       │ `mcuradioset_freq`       │ Radio 设置频率           │
  │ 26                       │ `mcuradiosetfreqran…     │ Radio 频率范围           │
  │ 27                       │ `mcuradiosetantpwr`      │ Radio 天线电源           │
  │ 28                       │ `mcuradiosetregmute`     │ Radio 收音机静音         │
  │ 29                       │ `mcusendgps_info`        │ GPS 信息（无硬件模拟）   │
  │ 30                       │ `mcuupdatereq`           │ Update 请求升级          │
  │ 31                       │ `mcuupdatebegin`         │ Update 开始升级          │
  │ 32                       │ `mcuupdateend`           │ Update 结束升级          │


  --- Public A2M (30) ---
  mcu_req_init_info                   0x81 请求初始化信息
  mcu_req_mute                        0x82 请求静音
  mcu_send_time_info                  0x83 发送时间同步
  mcu_set_tft_duty_cycle              0x84 设置背光
  mcu_req_sleep                       0x85 请求休眠(⚠️关机) [跳过]
  mcu_req_type_info                   0x86 请求类型信息
  mcu_req_arm_reset                   0x87 ARM复位(⚠️) [跳过]
  mcu_set_tft_on_off                  0x88 TFT开关
  mcu_factory_restore                 0x89 恢复出厂(⚠️) [跳过]
  mcu_set_amp_pwr                     0x8A 功放电源
  mcu_set_key_backlight               0x8B 按键背光
  mcu_set_sub_mute                    0x8C 副麦静音
  mcu_send_key_pwr_status             0x8D 按键电源状态
  mcu_set_reverse                     0x8E 倒车状态
  mcu_set_speed_ratio                 0x8F 车速系数
  mcu_req_arm_force_upgrade           0x90 强制升级(⚠️) [跳过]
  mcu_req_trip_clear                  0x91 小计清零
  mcu_set_switch_status               0x92 开关状态
  mcu_send_bt_error                   0x93 蓝牙错误码
  mcu_send_gps_info                   0x94 GPS信息(无硬件模拟)
  mcu_set_tot_miles                   0x95 总里程
  mcu_set_work_mode                   0x95 工作模式
  mcu_set_fuel_cal                    0x96 燃油校准
  mcu_set_vehicle_cfg                 0x97 车辆配置
  mcu_req_vehicle_cfg                 0x98 请求车辆配置
  mcu_send_arm_sw_version             0x99 ARM软件版本
  mcu_send_arm_hw_version             0x9A ARM硬件版本
  mcu_auto_clear_meter_type           0x9B 清零类型
  mcu_response_factory_cmd            0xA0 响应工厂命令
  mcu_response_test_cmd               0xA1 响应测试命令
--- Radio A2M (7) ---
  mcu_radio_set_seek                  Radio 0x81 搜台(⚠️死锁) [跳过]
  mcu_radio_set_switch                Radio 0x82 开关(⚠️死锁) [跳过]
  mcu_radio_set_band                  Radio 0x83 设置频段
  mcu_radio_set_freq                  Radio 0x84 设置频率
  mcu_radio_set_freq_range            Radio 0x85 频率范围
  mcu_radio_set_ant_pwr               Radio 0x86 天线电源
  mcu_radio_set_reg_mute              Radio 0x87 收音机静音
--- Update A2M (7) ---
  mcu_update_req                      Update 0x80 请求升级
  mcu_update_begin                    Update 0x81 开始升级
  mcu_update_data                     Update 0x82 传输数据(⚠️死锁) [跳过]
  mcu_update_end                      Update 0x83 结束升级
  mcu_boot_update_begin               Update 0x84 Boot升级(⚠️变砖) [跳过]
  mcu_boot_update_data                Update 0x85 Boot数据(⚠️变砖) [跳过]
  mcu_boot_update_checksum            Update 0x86 Boot校验(⚠️变砖) [跳过]
  