Rom开发之OTA升级流程

本文介绍了Android系统的OTA(Over-the-Air Technology)升级流程,包括制作差分包的步骤和后台管理的发布过程。通过编译目标版本、执行脚本生成差分包,再到红石阳光网页客户端进行版本管理和差分包新增,最终进行测试和发布。整个流程详细阐述了从制作到升级的完整步骤。

不积跬步无以至千里
OTA之简介:
OTA英文全称是Over-the-Air Technology,即空间下载技术的意思。
OTA升级是Android系统提供的标准软件升级方式。它功能强大,可以无损失升级系统,主要通过网络[例如WIFI、3G]自动下载OTA升级包、自动升级,但是也支持通过下载OTA升级包到SD卡升级,OTA的升级包非常的小,一般几M到十几M,如果你用网络升级,非常的方便,基本是在系统上点击几下就完成了升级,并且最重要的是,OTA升级无需备份数据,短短几分钟就搞定所有升级工作,所有数据都会完好无损的保留下来。

上面说了一堆介绍,OTA的优势不言而喻,接下来让我们看一下真正的从制作差分包、后台管理上的创建项目、配置版本、测试版本、发布的流程,另说一句我们的OTA是红石阳光的技术。

制作OTA升级包

1、编译出目标版本(版本号:F9_CT_D11_20171018)

2、将OTA的压缩包(路径在:F9\RELEASE\F9_CT_D11_20171018\OTA和F9\RELEASE\F9_CT_D07_20171009\OTA下)
msm8909-target_files-eng.wangdongyu.zip文件分别拷贝到路径为:F9\android\build\tools\releasetools下,并把目标版本的名字改为otapack_2.zip,把上一版本(07)压缩文件改为otapack_1.zip。如下图所示:

<think>好的,用户想在STM32F1系列微控制器上通过HTTPS协议实现OTA固件升级。首先,我需要回顾一下相关的知识,并结合提供的引用内容来构建一个合理的回答。 首先,用户提到的STM32F1系列,尤其是STM32F103RCT6,其Flash结构已经明确,每页2KB,共128页。这在固件升级中非常重要,因为需要处理固件的存储和擦写。根据引用[2]和[3],内部Flash的读写和擦除函数是关键,用户可能需要自己实现这些函数,或者使用已有的库函数。例如,引用[3]中的STMFLASH_ReadHalfWord函数,说明直接读取Flash地址的内容是可行的,但需要注意擦除后的区域。 接下来是HTTPS协议的使用。STM32F1的性能有限,处理HTTPS需要考虑到加密算法的资源消耗。通常,TLS协议需要加密库的支持,比如mbed TLS或者WolfSSL。由于STM32F1的RAM和Flash资源有限,可能需要选择轻量级的TLS库,并进行适当的配置,禁用不常用的加密算法以节省资源。 然后,网络连接部分。用户需要通过HTTPS下载固件,所以需要实现网络模块。如果使用以太网或者Wi-Fi模块,比如ESP8266或ENC28J60,需要相应的驱动和协议栈。这里需要确保网络模块能够处理HTTPS连接,可能需要借助外部模块处理SSL/TLS,或者在主控上实现。 固件传输与校验部分,引用[1]提到需要分块传输,特别是Flash写入需要按页对齐。因此,固件在传输过程中需要分块接收,并写入到指定的Flash地址。同时,校验机制如CRC或SHA-1是必要的,确保固件的完整性。引用[2]中的STM32_WriteFlash和STM32_EraseFlash函数可以用来擦写Flash,但要注意在写入前必须先擦除。 Bootloader的设计是关键,它需要负责接收新固件,验证其有效性,然后跳转到应用程序。引用[3]中的IAP升级流程,可能需要将Flash分为两个区域:bootloader和应用程序区。在跳转前,需要关闭中断,设置堆栈指针,并检查应用程序的起始地址是否有效。 示例代码方面,需要提供基本的框架,比如HTTPS客户端的初始化、固件下载、写入Flash的步骤。同时,配置指南需要包括CubeMX的时钟设置、Flash分区的规划,以及TLS库的配置选项。 可能遇到的问题包括内存不足、HTTPS处理速度慢、Flash写入错误等。需要建议用户优化加密算法,使用硬件加速(如果可用),并确保Flash操作的正确顺序。 最后,生成相关问题时要考虑用户可能的后续疑问,比如如何优化性能、处理大文件、调试步骤等。</think>### STM32F1系列HTTPS OTA固件升级实现指南 #### 一、系统架构设计 1. **Flash分区规划** STM32F103RCT6的256KB Flash建议划分为: - Bootloader区:0x08000000-0x08003FFF(16KB) - 应用程序区:0x08004000-0x0801FFFF(112KB) - 固件缓存区:0x08020000-0x0803FFFF(128KB) > Flash擦写需按2KB页对齐操作[^1] 2. **HTTPS协议栈选择** 建议使用轻量级TLS库: ```c // CubeMX配置mbed TLS #define MBEDTLS_AES_ROM_TABLES // 启用ROM表优化 #define MBEDTLS_SSL_MAX_CONTENT_LEN 4096 // 限制数据包大小 ``` #### 二、关键代码实现 1. **HTTPS客户端初始化** ```c mbedtls_ssl_init(&ssl); mbedtls_ssl_config_init(&conf); mbedtls_ssl_config_defaults(&conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT); mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_OPTIONAL); mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &ctr_drbg); ``` 2. **固件下载与写入** ```c void https_download_firmware(char *url) { while((len = mbedtls_ssl_read(&ssl, buf, sizeof(buf))) > 0) { if(write_addr % FLASH_PAGE_SIZE == 0) STM32_EraseFlash(write_addr/FLASH_PAGE_SIZE, 1); // 按页擦除[^2] STM32_WriteFlash(write_addr, (uint32_t*)buf, len/4); // 写入Flash write_addr += len; } } ``` 3. **启动器跳转逻辑** ```c void jump_to_app(uint32_t app_addr) { typedef void (*pFunction)(void); pFunction Jump_To_Application; if(*(__IO uint32_t*)app_addr & 0x2FFE0000 == 0x20000000) { // 检查栈指针 Jump_To_Application = (pFunction)(*(__IO uint32_t*)(app_addr + 4)); __set_MSP(*(__IO uint32_t*)app_addr); Jump_To_Application(); } } ``` #### 三、配置要点 1. **CubeMX设置** - 时钟配置:72MHz主频 - 串口/USB/Ethernet接口使能 - 保留16KB Flash区域给Bootloader 2. **TLS库优化** ```makefile CFLAGS += -DMBEDTLS_SHA1_C # 启用SHA1校验 CFLAGS += -DMBEDTLS_AES_C # 启用AES加密 CFLAGS += -Os # 优化代码体积 ``` #### 四、开发注意事项 1. **安全机制** - 固件签名验证(ECDSA/RSA) - 双备份机制防止升级失败 - 看门狗超时检测 2. **性能优化** - 采用分块加密传输(建议4KB/块) - 禁用TLS不必要扩展(如Session Ticket) - 使用硬件加速模块(如STM32 CRYP) #### 五、示例代码片段 ```c // Flash写入函数实现[^3] void STM32_WriteFlash(uint32_t saddr, uint32_t *wdata, uint32_t wnum) { FLASH_Unlock(); for(int i=0; i<wnum; i++){ FLASH_ProgramWord(saddr + i*4, wdata[i]); } FLASH_Lock(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rom_Fisher

赠人玫瑰,手留余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值