cco网站素材网站制作公司 云南
web/
2025/10/4 15:26:47/
文章来源:
cco网站素材,网站制作公司 云南,如何用电子邮箱做网站,辽宁营商环境建设局网站STM32 OTA-IAP设计方案
OTA是Over-the-Air的简写#xff0c;即空中下载技术#xff0c;通过网络远程给用户进行系统更新和升级。IAP是In Application Programming的简写#xff0c;IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写#xff0c;目的是为了在…STM32 OTA-IAP设计方案
OTA是Over-the-Air的简写即空中下载技术通过网络远程给用户进行系统更新和升级。IAP是In Application Programming的简写IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。IAP主要包括BootLoader和应用程序两部分基于IAP的OTA设计思路是先通过OTA接收升级固件再利用IAP进行固件搬移、校验和程序跳转实现空中升级的目的。 BootLoader程序根据判断是否需要升级固件并进行运行代码跳转。APP工程中需要编写OTA数据包交互协议将接收到的升级固件保存至FLASH校验一致性然后设置升级标志位并重启。
一、STM32启动模式分析
Cortex-M3 内核启动有3种情况
通过boot引脚设置可以将中断向量表定位于SRAM区即起始地址为0x2000000同时复位后 PC 指针位于0x2000000处。通过boot引脚设置可以将中断向量表定位于FLASH区即起始地址为0x8000000同时复位后PC指针位于0x8000000处。通过boot引脚设置可以将中断向量表定位于内置Bootloader区。
Cortex-M3内核规定起始地址必须存放栈顶指针而第二个地址则必须存放复位中断入口向量地址在Cortex-M3内核复位后会自动从起始地址的下一个32位空间取出复位中断入口向量跳转执行复位中断服务程序。Boot引脚设置见下表。
BOOT0BOOT1启动模式0无关FLASH10系统存储器ISP模式11SRAM调试
STM32的启动文件startup_stm32f103xb.s和启动过程。 1首先对栈和堆的大小进行定义并在代码区的起始处建立中断向量表其第一个表项是栈顶地址32位第二个表项是复位中断服务入口地址2然后执行复位中断在复位中断服务程序中跳转 C/C标准实时库的main函数(__main)完成用户堆栈等的初始化后跳转.c 文件中的main函数(真正的用户main函数)开始执行程序。假设STM32被设置为从内部FLASH启动中断向量表起始地位为0x8000000则栈顶地址存放于0x8000000处复位中断服务入口地址存放于0x8000004处。当STM32遇到复位信号后则从0x80000004处取出复位中断服务入口地址继而执行复位中断服务程序然后跳转__main函数最后进入main函数。
二、FLASH分区
设置STM32为从FLASH启动即硬件设置管脚BOOT0低电平。本方案单片机型号采用STM32F103RBT6FLASH:128KB, SRAM:20KB。FLASH分为Bootloader、APPA、APPB、Parameter4个部分分别占用20kB、50kB、50kB和8kB内存空间。APPA是应用程序区运行用户设计的应用程序APPB是应用程序备份升级区存放接收到的固件升级包Parameter是参数区保存程序运行的关键参数、升级标志和密钥。FLASH分区示意图如下图所示。
三、OTA流程
单片机上电后首选运行BootLoader该段代码读取Parameter参数区的升级标志量判断是否有升级需求。若有升级需求则根据记录的相应固件大小将APPB区升级文件拷贝至APPA区并改写升级标志量然后重启若无升级请求则程序跳转至APPA代码区运行。OTA程序流程如下所示。 具体流程描述如下 Step1上电启动单片机首先执行BootLoader程序。 Step2BootLoader读取Parameter区参数查看升级标志是否有升级任务若没有升级任务则进入 Step3否则进入 Step4。 Step3 BootLoader程序跳转至APPA执行用户代码并判断是否收到升级任务请求若有升级任务请求则进入 Step7。 Step4根据Parameter区升级参数校验APPB固件数据并将APPB升级固件拷贝到APPA区执行 Step5 和 Step6。 Step5将升级标志位清除。 Step6重启再次执行BootLoader。 Step7将接受到的升级数据包存入APPB区并将相关升级参数存入Parameter区若接收数据完成固件检验通过则写入Parameter区升级标志并进入 Step8 。 Step8重启再次执行BootLoader。
四、工程设置
4.1 BootLoader工程设置
由于BootLoader需要在上电复位后首先执行因此设置BootLoader存放在FLASH起始位置0x08000000在MDK中打开options for target设置IROM1 Start 0x08000000Size 0x5000(0x5000 20kB)在Flash Download中设置下载Flash位置参数与IROM1中设置Start和Size相同。BootLoader代码大小不超过20kB越小越好。
4.2 APP工程设置
根据FLASH分区APP代码存放在紧挨着BootLoader之后因此APP的起始位置应该为0x080000000x5000 0x08005000占用内存大小为0xC800(50kB)在MDK中打开options for target设置IROM1 Start 0x08005000Size 0xC800在Flash Download中设置下载Flash位置参数与IROM1中设置的Start和Size相同如图5和图6所示。由于APP代码运行的起始位置不在0x08000000其栈顶地址发生偏移对应的中断向量表地址也整体发生偏移因此在代码中需要对APP代码的中断向量表偏移进行设置具体的在system_stm32f1xxx.c中启动代码中可以看到定义的中断向量表偏移量宏定义
#ifdef VECT_TAB_SRAMSCB-VTOR SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */
#elseSCB-VTOR FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */
#endif /* #define VECT_TAB_SRAM */
#define VECT_TAB_OFFSET 0x5000 /*! Vector Table base offset field. This value must be a multiple of 0x200. */升级界面如下 设备启动界面如下 下一篇准备写个具体实现包括本文提到的整包升级和朋友提到的差分升级并且附带配套的QT开发的升级软件开发教程考虑收费栏目。
有需求的朋友请私信我统计一下情况。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86849.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!