STM32 OTA(Over - The - Air)的详细介绍:
一、OTA 的关键组成部分
-
无线通信模块
- 类型:可以是 Wi - Fi 模块(如 ESP8266、ESP32 等)、蓝牙模块(如低功耗蓝牙)、蜂窝网络模块(如 4G、NB - IoT 等)。
- 作用:负责与远程服务器建立连接,接收更新数据。例如,Wi - Fi 模块通过接入无线路由器,连接到指定的服务器获取升级包。
-
Bootloader
- 分区管理:在 STM32 的 Flash 存储器中,Bootloader 通常占据一段固定的存储区域(例如起始的一段地址空间),其余区域用于存储应用程序。它负责初始化硬件、判断是否需要更新程序、加载应用程序等操作。
- 更新流程控制:当接收到升级指令后,Bootloader 会控制整个更新过程,包括从无线通信模块接收数据、将数据写入 Flash 存储器的应用程序区域、进行数据校验等。
-
远程服务器
- 存储更新文件:服务器上存储着不同版本的 STM32 应用程序固件,这些固件通常经过压缩和加密处理,以减少传输数据量和提高安全性。
- 版本管理:服务器能够识别不同设备的版本信息,并根据设备请求提供相应的升级文件。同时,它还可以记录设备的升级历史和状态,方便进行设备管理和故障排查。
二、OTA 升级流程
-
设备端发起请求
- 连接建立:设备启动后,无线通信模块自动尝试连接到预设的网络(如 Wi - Fi 网络),然后与远程服务器建立连接。
- 版本查询:设备向服务器发送请求,包含自身当前的软件版本信息、设备型号等关键数据。例如,发送一个包含版本号、设备 ID 的 JSON 格式数据请求,如 {"version":"1.0","deviceID":"STM32 - 001"}。
-
服务器响应与数据传输
- 版本比对:服务器收到设备请求后,根据设备信息进行版本比对,判断是否有新版本可供升级。如果有,服务器准备相应的升级文件。
- 数据传输:服务器将升级文件分割成若干数据包,并按照一定的协议(如 TCP/IP 协议)依次发送给设备。设备端的无线通信模块接收这些数据包,并将它们暂存到内部缓冲区。
-
程序写入与校验
- 进入更新模式:当设备接收到所有数据包后,触发进入 Bootloader 模式。Bootloader 首先擦除 Flash 存储器中原来的应用程序区域,为写入新程序做好准备。
- 数据写入与校验:Bootloader 将缓冲区中的数据包逐个写入 Flash 存储器的应用程序区域。在写入过程中,会对每一个写入的数据块进行校验(如 CRC 校验),确保数据的准确性。
-
升级完成与设备重启
- 完成确认:当所有数据都正确写入 Flash 存储器后,Bootloader 再次进行整体校验,确保整个应用程序的完整性和正确性。
- 设备重启:校验通过后,Bootloader 将控制权交给新的应用程序,设备进行重启,以运行新升级的程序。
三、OTA 安全考虑
-
数据加密
- 加密算法选择:在数据传输过程中,可采用对称加密算法(如 AES)或非对称加密算法(如 RSA)对升级文件进行加密。对称加密算法速度快,适合对大量数据进行加密;非对称加密算法则用于加密对称加密算法的密钥等关键信息。
- 密钥管理:密钥的安全管理至关重要。可以将密钥预先烧录到设备的安全存储区域(如 STM32 的内部加密存储区),或者通过安全的密钥分发机制在设备和服务器之间进行传输。
-
签名验证
- 数字签名生成:服务器在生成升级文件时,会使用私钥对文件进行签名。签名包含了文件的哈希值等信息,用于验证文件的完整性和来源的真实性。
- 签名验证流程:设备端在接收到升级文件后,使用预先存储的公钥对签名进行验证。如果验证通过,则说明文件在传输过程中未被篡改且确实来自于信任的服务器。
-
安全启动
- 启动过程控制:STM32 可以实现安全启动机制,确保只有经过授权的软件才能在设备上运行。在启动过程中,设备会对 Bootloader 和应用程序进行验证,例如检查它们的签名或者哈希值。
- 防止恶意软件攻击:安全启动可以有效防止恶意软件在设备启动过程中被加载,从而提高设备的安全性。
参考 Stm32的bootloader和App的编写_stm32bootloader详解-CSDN博客 【STM32 IAP技术实现】适合小白“食用”(以STM32F103C8T6为例)_stm32f103c8t6 串口iap bootloader-CSDN博客