# MCU OTA 串口直连验证步骤

> 用 `mcu_ota_upgrader` 直接走串口发数据，绕过 Android Service 层，验证 MCU 端协议是否正常。
>


---

## 一、先卸载 Android 层的 service 和 demo

`mcu_ota_upgrader` 要独占 `/dev/ttyS7`，如果 service.dev 或产线版 service 在后台跑，会抢串口导致握手失败。

```bash
# 卸载 dev 版 service 和 ota demo（避免串口冲突）
adb uninstall com.qsjnic.mcu.service.dev
adb uninstall com.qsjnic.demo.ota

# 停产线版 service（系统预置，删不掉，只能停）
adb shell am force-stop com.qsjnic.mcu.service

# 确认没有 qsjnic 进程残留
adb shell ps -A | grep qsjnic
# 应该没有任何输出
```

> 为什么一定要卸载？`com.qsjnic.mcu.service.dev` 有开机自启（BOOT_COMPLETED），即使 `force-stop` 了，设备重启后又会自动启动。卸载最干净。

---

## 二、推送文件

```bash
adb push mcu_ota_upgrader /data/local/tmp/mcu_ota_upgrader
adb push mcu_app.bin      /data/local/tmp/mcu_app.bin
adb shell chmod +x /data/local/tmp/mcu_ota_upgrader
```

---

## 三、修复串口权限

```bash
adb root
adb wait-for-device
adb shell chmod 666 /dev/ttyS7
adb shell setenforce 0
```

验证：
```bash
adb shell ls -la /dev/ttyS7
# 应该看到：crw-rw-rw- 1 root root ... /dev/ttyS7
```

---

## 四、执行 OTA

```bash
adb shell "cd /data/local/tmp && ./mcu_ota_upgrader 2>&1" > out.txt
```

正常输出大概长这样（详见 `out.txt`）：

```
[OK] 三步握手成功
[OK] UPDATE_REQ seq=2
[OK] UPDATE_BEGIN seq=3
[INFO] packet_size=1024 chunks=211
[OK] chunk=1/211 0.5%
...
[OK] chunk=211/211 100.0%
[OK] UPDATE_END seq=215
[SUCCESS] OTA升级完成！耗时 69.0s 重试 0
```

**耗时约 60~70 秒，重试次数应为 0。**

---

## 五、升级后验证版本

OTA 完成后 MCU 可能需要断电重启才能读到新版本。

```bash
# 1. 整车断电 ≥10 秒
# 2. 重新上电，等 Android 启动完成

# 3. 再次修复权限（重启后重置）
adb root && adb wait-for-device
adb shell chmod 666 /dev/ttyS7
adb shell setenforce 0

# 4. 读版本
adb logcat -c
adb shell am start -n com.qsjnic.demo.ota/.MainActivity
sleep 3
adb logcat -d | grep "MCU Version"
# 预期：E112C069XZA0120016
```

---

## 六、常见问题

| 现象 | 原因 | 解决 |
|---|---|---|
| 三步握手失败 | 串口被占用 | 确认已卸载 `service.dev` 和 `demo`，停产线版 service |
| `Permission denied` | 串口权限没修 | 执行 `chmod 666 /dev/ttyS7` |
| 某 chunk 卡住超时 | MCU 端异常 | 断电重启 MCU 后重试 |
| OTA 成功但版本没变 | MCU 需断电切换 | 整车断电 ≥10s |

---

## 七、结果判定

- **直连成功，demo 也成功** → MCU 和 Service 都正常
- **直连成功，demo 失败** → 问题在 Android Service/App 层，MCU 端没问题
- **直连也失败** → MCU 端或串口硬件有问题，需排查

---

*配套固件：E112C069XZA0120016 | 2026-05-19*
