0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AT32 USART OTA快速使用方法

硬件攻城狮 来源:硬件攻城狮 2023-09-09 14:22 次阅读

OTA升级已经不是什么新鲜事,现在大多数物联网终端设备,基本具备这个功能。

今天以 AT32 为例给大家分享一下 OTA 升级的详细流程。

概述

空中下载技术 OTA(Over-the-Air Technology)是用户自己的程序在运行过程中对 User Flash 的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口,对产品中的固件程序进行更新升级。

通常实现 OTA 功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序为 Bootloader 区域,第二个项目程序 App 代码为真正的功能代码,执行应用和升级。这两部分项目代码同时烧录在 User Flash 中。

wKgZomT8D1CAGOo9AAFE8h3N23A535.jpg

图1. OTA代码执行流程

在上图所示流程中,MCU复位后,从 0x08000004 地址取出复位中断向量的地址,并跳转到复位中断服务程序,在运行完复位中断服务程序之后跳转到 Bootloader 的 main函数,如图标号①所示;

在执行完 Bootloader 以后(App 代码为图中 FLASH 灰底部分 App 程序的复位中断向量起始地址为 0x08000004+N+M),跳转至 App 程序的复位向量表,取出 App 程序的复位中断向量的地址,并跳转执行 App 程序的复位中断服务程序,随后跳转至 App 程序的main函数,如图标号②和③所示,同样 main 函数为一个死循环,并且注意到此时 AT32 的 FLASH,在不同位置上,共有两个中断向量表。

在 main 函数执行过程中,如果 CPU 得到一个中断请求,PC 指针仍强制跳转到地址0x08000004 中断向量表处,而不是 App 程序的中断向量表,如图标号④所示;

程序再根据我们设置的中断向量表偏移量,跳转到对应中断源的中断服务程序中,如图标号⑤所示;

在执行完中断服务程序后,程序返回 main 函数继续运行,如图标号⑥所示。

通过以上两个过程的分析,我们知道OTA程序必须满足两个要求:

App 程序必须在 Bootloader 程序之后的某个偏移量为 x 的地址开始。

必须将 App 程序的中断向量表进行相应的移动,移动的偏移量为 x。

AT32 USART OTA 快速使用方法

硬件资源

文档中是用 AT-START-AT32F403A 实验板的硬件条件为例,OTA demo 源代码还包括AT32 其他型号,用户只需编译对应型号工程烧录于 AT-START 实验板运行即可。

指示灯 LED2/LED3/LED4

USART1(PA9/PA10)

AT-START 实验板

软件资源

tool_release

IAP_Programmer.exe,PC 机 tool,用于演示 OTA 升级流程

source_code

Bootloader,Bootloader 源程序,运行 LED2 闪烁

App_led3_toggle,App1 源程序,运行 LED3 闪烁

App_led4_toggle,App2 源程序,运行 LED4 闪烁

注:工程基于keil v5建立,若用户需要在其他编译环境上使用,请参考对应 BSP 目录AT32F403A_407_Firmware_Library_V2.x.xprojectat_start_f403a emplates中各种编译环境(例如IAR6/7/8,keil 4/5,eclipse_gcc)进行对应修改即可。

OTA Demo 使用

本文档描述了两种常用的 OTA 应用 demo,template app 和 dual app,后面章节会分别介绍。

打开 Bootloader 工程源程序,选择对应 MCU 型号的 target 编译后下载到实验板

打开 IAP_Programmer.exe

选择正确的串口、APP下载地址和 bin 文档,点击 Download 下载,如下图

观察 LED2/3/4 闪烁,LED2 闪烁-Bootloader 工作,LED3 闪烁-App1 工作,LED4 闪烁-App2 工作

wKgaomT8D1CAaNcxAAB0RG5uc4c205.jpg

图2. IAP demo上位机

Template app OTA 程序设置

地址分布

wKgaomT8D1CATbH5AABh04G_QCQ819.jpg

图3. Flash地址分配

注:Bootloader区域最后一个扇区,用于存放防止升级过程出错(掉电等异常情况)的flag,用户编译修改Bootloader时,要保证不覆盖flag的地址。

执行流程

OTA 分为 Bootloader、App 和 Template 三部分,应用在 App 中执行,Template 仅作为新 App 固件数据的临时存放空间。程序执行整体流程框图如下:

wKgZomT8D1CAJ8GEAACuhjEphew530.jpg

图4. 程序执行流程

Bootloader project 设置

1)Keil 设置

wKgZomT8D1CAaKqdAACZsB9j4Wg236.jpg

图5. Bootloader project中address 1在Keil设置

2) Bootloader 源程序修改 ota.h 文件中

wKgaomT8D1CARVrAAABa7MSssD8188.jpg

图6. Bootloader project中address 2在程序中设置

App project 设置

OTA demo 提供了 2 个 App 程序供测试用,皆以 address 2(0x800 4000)为起始地址。App1 LED3 闪烁,App2 LED4 闪烁。以 App1 为例,设计步骤如下:

1) Keil工程设置

wKgaomT8D1CAWrvyAACWz6bnNZs231.jpg

图7. App project中address 2在Keil设置

2) App1 源程序设置

wKgaomT8D1CAZvW1AABEaz9IiEE408.jpg

图8. App project向量表偏移在程序中设置

3) 编译生成bin文件

通过 User 选项卡,设置编译后调用 fromelf.exe,根据 .axf 文件生成 .bin 文件,用于 OTA 更新。通过以上3个步骤,我们就可以得到一个 .bin 的 APP 程序,通过 Bootloader 程序即可实现更新。

4) 开启debug app code功能

如果在设计 App code 过程中需要对 App project 进行单独调试,请按照以下操作。

先下载 Bootloader 工程

再调试 App 工程

Dual app OTA 与程序设置

地址分布

wKgaomT8D1GAJE0PAABlGjwuyUw648.jpg

图9. Flash地址分配

注:Bootloader 区域最后2个扇区,用于存放 App 是否正常的 flag,用户编译修改Bootloader 时,要保证不覆盖 flag 的地址。

执行流程

OTA 分为 Bootloader、App1 和 App2 三部分,应用在 App1 或 App2 中执行。程序执行整体流程框图如下:

wKgZomT8D1GAS_jvAADdCa-imgg440.jpg

图10. 程序执行流程

Bootloader project 设置

1)Keil 设置

wKgZomT8D1GAV8ZxAACX4J24wwY014.jpg

图11. Bootloader project中address 1在Keil设置

2)Bootloader 源程序修改 ota.h 文件中

wKgZomT8D1GAGbNdAACBuDwvJn8474.jpg

图12. Bootloader project中address 2在程序中设置

App project 设置

OTA demo 提供了 2 个 App 程序供测试用,app_led3_toggle 以 0x800 4000 为起始地址,app_led4_toggle 以 0x8080000 为起始地址。App1 LED3 闪烁,App2 LED4闪烁。以 App1 为例,设计步骤如下:

1) Keil工程设置

wKgaomT8D1GAHhI3AACWsFTBqQc571.jpg

图13. App project中address 2在Keil设置

2) App1源程序设置

wKgaomT8D1GAReahAABEwtvFCOg360.jpg

图14. App project向量表偏移在程序中设置

3) 编译生成bin文件

通过User选项卡,设置编译后调用fromelf.exe,根据.axf文件生成.bin文件,用于OTA更新。通过以上3个步骤,我们就可以得到一个.bin的APP程序,通过Bootloader程序即可实现更新。

4) 开启debug App code功能

如果在设计App code过程中需要对App project进行单独调试,请按照以下操作。

先下载Bootloader工程

再调试App工程

Bootloader/App与上位机串口通信协议

程序与上位机通信,接收固件升级数据,上位机端和嵌入式端通信协议如下:

1) 上位机通信协议

wKgZomT8D1GABDsIAACLUB4y5S4311.png

图15. 上位机通信协议

2) 嵌入式端下位机通信协议

wKgZomT8D1GALbdlAACpnf1MNjs985.png

图16. 下位机通信协议

注:

ACK:0xCCDD

NACK:0xEEFF

Data:0x31+Addr+数据+chenksum(1byte)

Addr:4bytes,高位在前

2Kbytes,下载数据,不足2K内容填充0xFF

Checksum:1byte,4bytes的Addr+2KBytes数据的校验和的低八位

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79543
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99961
  • OTA
    OTA
    +关注

    关注

    7

    文章

    522

    浏览量

    34592
  • bootloader
    +关注

    关注

    2

    文章

    230

    浏览量

    45049
  • AT32
    +关注

    关注

    1

    文章

    97

    浏览量

    1826

原文标题:单片机通过 UART 实现 OTA 升级的详细流程

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AN0005—AT32 OTA 空中下载升级

    空中下载升级原理 .....................................5AT32 串口OTA 快速使用方法 .............................6硬件资源
    发表于 08-22 17:38

    AT32系列MCU上Flash模拟EEPRO的应用原理和使用方法

    型号的 MCU 并未搭载片上 EEPROM,但是在此我们将介绍一种使用片上 Flash来模拟 EEPROM 使用的方法,以作为对此应用需求的补充。本文档将详细阐述在 AT32 系列 MCU 上使用片上
    发表于 11-26 07:15

    Micropython Based On AT32 RTT

    AT32 RTThread Micropython 快速使用 快速使用方法硬件资源指示灯 LED2/LED3/LED4USART1(PA9
    发表于 12-10 09:46

    AT32微控制器上创建OTA应用程序的一般准则

    AT32 OTA using the USART提供在AT32微控制器上创建OTA应用程序的一般准则。
    发表于 10-19 07:43

    AT32 MCU USB主机库应用说明

    AT32 MCU USB Host Library Application Note主要描述AT32F4xx 系列USB 主机库的架构和使用方法,方便开发者使用库快速开发USB相关的应用,同时也会介绍
    发表于 10-25 07:02

    AT32 MCU USB设备库应用说明

    AT32 MCU USB Device Library Application Note主要描述AT32F4xx 系列USB 设备库的架构和使用方法,方便开发者使用库快速开发USB相关的应用,同时也会介绍
    发表于 10-25 07:07

    AT32 MCU USART应用说明

    AT32 MCU USART Application Note介绍了AT32USART 功能,并对BSP 例程的软件设计加以说明,同时演示使用方
    发表于 10-25 08:11

    AT32外部中断/事件EXINT使用指南

    AT32外部中断/事件EXINT使用指南介绍AT32 系列MCU 的EXINT 功能及其固件驱动程序API,并对BSP 例程的软件设计加以说明,同时演示使用方法并展示实验效果,供用户参考。
    发表于 10-25 06:25

    AT32 IDE快速入门指南

    AT32 IDE 快速入门指南帮助用户快速熟悉Artery AT32 IDE的简明指南。
    发表于 10-26 06:13

    AT32F系列PWC USART接收唤醒SLEEP的使用方法

    演示AT32F系列 PWC USART接收唤醒SLEEP的使用方法。通常任意一个被嵌套向量中断控制器响应的外设中断都能将系统从SLEEP模式唤醒。
    发表于 10-27 06:13

    AN0001 AT32 IAP 使用 USART

    前言对于AT32 MCU,除了出厂固化的bootloader,用户也可以在应用程序中编写自己的bootloader程序,用于最终产品的固件更新。此功能称为应用程序内编程(IAP)。本应用笔记的目的
    发表于 01-14 12:52 4次下载
    AN0001 <b class='flag-5'>AT32</b> IAP 使用 <b class='flag-5'>USART</b>

    雅特力AT32 MCU USB设备库的架构和使用方法

    这部分主要介绍AT32 USB设备库的结构和库的使用方法AT32 USB是基于USB2.0全速设备,不支持USB2.0高速设备。这里库的作用是用来管理USB外设和实现USB的基本协议,使开发者能够更快的上手开发。
    的头像 发表于 02-22 10:09 1302次阅读

    AT32 MCU Printf的功能使用方法

    AT32 MCU Printf的功能使用方法
    的头像 发表于 10-27 09:27 448次阅读
    <b class='flag-5'>AT32</b> MCU Printf的功能<b class='flag-5'>使用方法</b>

    AT32 MCU如何使用OTA通过USART实现对固件的在线升级更新

    AT32 MCU如何使用OTA通过USART实现对固件的在线升级更新
    的头像 发表于 10-26 17:09 923次阅读
    <b class='flag-5'>AT32</b> MCU如何使用<b class='flag-5'>OTA</b>通过<b class='flag-5'>USART</b>实现对固件的在线升级更新

    AT32 MCU如何使用IAP通过USART实现对固件的在线升级更新

    AT32 MCU如何使用IAP通过USART实现对固件的在线升级更新
    的头像 发表于 09-19 16:51 1174次阅读
    <b class='flag-5'>AT32</b> MCU如何使用IAP通过<b class='flag-5'>USART</b>实现对固件的在线升级更新