一、OTA升级概述

1.1 什么是OTA升级

OTA,全称是Over-The-Air,翻译过来就是「空中升级」。说白了,就是不插线、不拆机,通过网络把新固件推送到设备上。

我刚开始做嵌入式那会儿,升级固件还得拿着JTAG调试器,一台一台连电脑刷。后来做车载项目,客户说「你们这车机升级能不能像手机一样方便?」——嗯,从那以后,OTA就成了我的必修课。

OTA升级的本质,其实就三步:

  • 打包:把新固件、签名、校验信息打包成一个升级包
  • 传输:通过网络(Wi-Fi、4G/5G、以太网)把包发到设备上
  • 执行:设备接收后,校验、解压、刷写到指定分区

你想想看,一个车上有七八块屏幕,每块屏幕都有自己的MCU或SoC。如果每块屏都要手动刷,那得累死人。OTA就是来解决这个问题的。

1.2 OTA升级的价值与挑战

价值:为什么非做不可?

我个人习惯把OTA的价值总结成三个字:快、省、稳。

维度 说明 我见过的真实案例
发现Bug后,几天内就能推送到所有设备 某车型仪表盘死机,传统方案要召回,OTA三天搞定
省去人工刷写、物流、召回成本 一次OTA推送,省了上百万的4S店人工费
可以灰度发布,先推10%设备,没问题再全量 我们当时做车机升级,先推给内部测试车,再推给公测用户

挑战:没那么简单

做OTA升级,最怕什么?我遇到过最惨的一次——升级到一半,网络断了。设备变砖了。嗯,这里要注意,OTA最大的挑战就是「升级失败后的恢复能力」。

具体来说,有这几个坑:

  • 断点续传:下载到99%断了,难道要重头下?
  • 掉电保护:升级写到一半,车主把电瓶拔了怎么办?
  • 版本兼容性:老版本直接跳到新版本,中间跳过了好几个中间版本,会不会出问题?
  • 安全风险:升级包被篡改,植入恶意代码怎么办?
⚠️ 我曾经踩过的坑: 有一次做仪表盘OTA,升级包签名校验没做好,结果黑客伪造了一个升级包推送出去。虽然及时发现没造成大范围影响,但那次之后,我所有项目都强制要求「双签名+硬件安全芯片」。

1.3 多屏系统OTA的独特需求

单屏设备的OTA,说白了就是「一个设备、一个升级包、一次刷写」。但多屏系统完全不一样。

你想想看,一辆车里有:

  • 仪表盘屏幕(Linux/QNX系统)
  • 中控娱乐屏(Android系统)
  • 副驾娱乐屏(Android系统)
  • 后排头枕屏(Linux系统)
  • HUD抬头显示(RTOS系统)

这些屏幕之间,有的通过以太网连接,有的走CAN总线,有的用LVDS传视频。升级的时候,不能各升各的,必须协调好。

多屏系统OTA的独特需求,我归纳为四点:

  1. 升级顺序依赖:有些屏必须先升,有些屏可以后升。比如仪表盘升级时,中控屏得保持工作,否则倒车影像没了。
  2. 版本一致性:所有屏幕的软件版本必须匹配。中控屏升了,仪表盘没升,可能通信协议对不上。
  3. 带宽分配:多块屏同时下载升级包,Wi-Fi带宽够不够?会不会抢了其他业务(比如在线音乐)的带宽?
  4. 回滚策略:如果某块屏升级失败,其他屏要不要一起回滚?
💡 我的经验: 做多屏OTA,一定要先定义好「升级域」。把有依赖关系的屏幕划到一个域里,域内统一升级、统一回滚。域之间可以独立升级。这样既保证了版本一致性,又不会因为一块屏失败导致全车瘫痪。

一个典型的多屏OTA架构

我习惯用这样的分层设计:

┌─────────────────────────────────┐
│         云端OTA管理平台           │
│  (升级包管理、灰度策略、统计)      │
└──────────────┬──────────────────┘
               │ HTTPS/MQTT
┌──────────────▼──────────────────┐
│       车机主控(OTA Master)      │
│  (下载管理、版本协调、状态上报)    │
└──────┬──────┬──────┬────────────┘
       │      │      │
┌──────▼┐ ┌──▼───┐ ┌▼──────┐
│仪表盘  │ │中控屏│ │副驾屏  │
│(OTA从) │ │(OTA从)│ │(OTA从) │
└────────┘ └──────┘ └───────┘

主控负责跟云端通信,下载升级包,然后分发给各块屏幕。各屏幕只负责接收、校验、刷写。这样分工明确,出了问题也好排查。

📌 小技巧: 我在项目中遇到过,主控下载升级包时,其他屏幕还在正常工作。等下载完了,主控再通知各屏幕「准备升级」。这样用户体验最好——车主不会感觉到升级过程的存在。

好了,这一章我们聊了OTA是什么、为什么做、以及多屏系统有什么特殊之处。下一章,我会详细讲讲多屏OTA的系统架构设计,包括主控怎么选、通信协议怎么定、升级包怎么分发。到时候我会分享一个我实际用过的架构方案,保证干货满满。