jlink v9可升级固件‘_在rt-thread下实现OTA在线固件更新功能
简介
为了能让开发者快速掌握 OTA 升级这把利器,RT-Thread 开发团队提供了通用的 Bootloader。开发者通过该 Bootloader 即可直接使用 RT-Thread OTA 功能,轻松实现对设备端固件的管理、升级与维护。
下图展示了 RT-Thread 通用 Bootloader 的软件框架:
RT-Thread 通用 Bootloader 有如下特点:
- 以 bin 文件的形式提供,无需修改即可使用
- 资源占用小,ROM 最小只需要 16KB,最大 32KB
- 适用于多系列 STM32 芯片(目前支持 F1 和 F4 系列 )
- 支持各种 SPI Flash 存储固件
- 支持固件加解密功能
- 支持多种固件压缩方式
- 支持恢复出厂固件功能
- 以上功能均可自由配置
功能说明
Bootloader 的主要功能是更新 app 分区中的固件。
分区表介绍
通用 Bootloader 中的分区表包含如下三个分区:
分区名起始地址分区大小分区位置介绍app自定义自定义片内 Flash存储 app 固件download自定义自定义片内 Flash 或者片外 SPI Flash存储待升级固件factory自定义自定义片内 Flash 或者片外 SPI Flash存储出厂固件
升级固件功能
当系统需要升级固件时,Bootloader 将从 download 分区将固件搬运到 app 分区,主要功能流程如下所示:
- Bootloader 启动时检查 download 分区和 app 分区中的固件版本。
- 如果两个固件版本相同,则跳转到 app 分区,Bootloader 运行结束。
- 固件版本不同则将 download 分区中的固件搬运到 app 分区。
- 在搬运的过程中 Bootloader 可以对固件进行校验、解密、解压缩等操作。
- 搬运完毕后,删除 download 分区中存储的固件。
- 重启系统跳转到 app 分区中的固件运行,Bootloader 运行结束。
Bootloader 工作过程如下图所示:
恢复固件功能
当系统中的固件损坏,Bootloader 将从 factory 分区将固件搬运到 app 分区,主要功能流程如下所示:
- Bootloader 启动时检查触发固件恢复的引脚是否为有效电平。
- 如果有效电平持续超过 10S 则将 factory 分区中的固件搬运到 app 分区中。
- 如果有效电平没有持续超过 10S 则继续进行 2.2 小节中介绍的启动步骤。
- 在搬运的过程中 Bootloader 可以对固件进行校验、解密、解压缩等操作。
- 搬运完毕后,保持 factory 分区中的固件不变。
- 重启系统跳转到 app 分区中的固件运行,Bootloader 运行结束。
获取 Bootloader
Bootloader 可以通过网页端在线生成的方式来获取。开发者根据自己使用的芯片,填写相关参数,然后点击生成按钮,即可在线生成 Bootloader。
Bootloader 在线获取地址: http://iot.rt-thread.com
登陆账号
新建产品
进入设备管理
进入生成页面
进入 Bootloader 生成页面后,根据页面提示填写板卡参数,点击生成固件按钮即可在线自动生成 BootLoader,同时也会将生成的固件发送到用户邮箱中。
下面提供一个示例配置以供参考,开发者则需要根据自己手中板卡的实际情况,勾选和填写所需功能。
点击生成按钮后,等待大约一分钟即可通过自动下载或者邮件的方式获取定制的 Bootloader。
使用 Bootloader
准备工作
- 在线生成 Bootloader 时可以自定义使用某个引脚作为串口输出引脚,例如 PA9。波特率设置为 115200 ,通过 usb 转串口正确地连接到 PC 端。
- 保证 jlink 正常连接到开发板。
烧录 Bootloader
方法 1: J-Flash 工具烧写
以 STM32F407ZGT6 芯片为例讲述如何使用 J-Flash 工具烧录 bootloader.bin 到开发板中,操作步骤如下:
- 打开 J-Flash 工具,配置烧录参数。
- 选择打开固件功能。
- 选择需要烧录的固件,这里选择在线生成后下载到本地的 Bootloader 固件。
- 烧录 bootloader.bin 到指定地址 0x8000000。
- 连接开发板。
- 开始烧录固件。
固件烧录成功后会自动运行 Bootloader,打印出 RT-Thread 的 logo。
方法 2: ST-LINK Utility 工具烧写
以下介绍如何使用 ST-LINK Utility 工具烧录 bootloader.bin 到开发板中,这需要配合 ST-LINK 进行烧写,操作步骤如下所示:
- 连接开发板。
- 设置连接选项。
- 烧录:选择需要烧录的固件,这里选择在线生成后下载到本地的 Bootloader 固件。
制作 app 固件
本小节介绍如何使用 stm32 系列的 BSP 制作一个可以用于 OTA 升级的,包含 OTA 下载器功能 app 固件。
接下来的示例中所用的 BSP 路径为 stm32/stm32f407-atk-explorer。
固件中使用的分区表如下所示:
分区名起始地址分区大小分区位置app0x8040000128k片内 Flashdownload0x8020000128k片内 Flashfactory0x8060000128k片内 Flash
制作该 app 固件有如下三个步骤:
- 为 BSP 添加下载器功能,下载需要的软件包并修改 FAL 分区表
- 修改 stm32 BSP 中断向量表跳转地址
- 修改 BSP 链接脚本
在后面的章节中,将按照上述步骤来制作 app 固件。
添加下载器功能
本小节介绍如何将下载器功能添加到 app 固件中。
添加该功能需要使用 env 工具,本次下载的软件包在 iot 类别中,需要按照如下步骤操作:
- 下载 ota_downloader 软件包,选中 Ymodem 功能。
- 添加 BSP Flash 驱动。
注:如果 BSP 没有该选项,则需要手动在 board 文件夹的 Kconfig 添加下面定义,保存,然后重新进入 menuconfig 即可。
config BSP_USING_ON_CHIP_FLASH bool "Enable on-chip FLASH" default n
- 配置完毕后,先使用 pkgs --update 命令将所需要的软件包下载下来,然后使用 scons --target=mdk5 命令重新生成 mdk 工程。
配置 FAL 分区
本小节将讲述如何初始化 FAL 组件,并修改 FAL 分区表。开发者需要对 FAL 进行简单入门,无需移植,只需要了解如何配置即可,详细内容可参考 官方文档。
本次制作的 app 固件将附带下载器功能,下载器会将固件下载到 download 分区。根据第 4 章开始时的分区表可知,download 分区的地址为 0x8020000,而 app 分区的地址为 0x8040000。
初始化 FAL
由于 FAL 组件会被 ota_downloader 软件包自动选中,因此直接添加 FAL 组件的初始化代码即可。
- 修改 stm32f407-atk-explorer/board/ports/fal_cfg.h 文件中的分区表,使分区表中 download 分区的起始地址和大小与 Bootloader 中的 download 分区一致。
注意:如果 BSP 中没有该头文件,可以在该 BSP 目录下 /packages/fal-latest/samples/porting 中复制一份进行修改,其中分区地址和大小是根据实际 bootloader 中定义的大小进行设置。下图中标记处了可能需要修改的地方,请根据个人实际情况进行修改。
修改 app 固件配置
由于 app 分区的起始地址为 0x08040000,app 固件如果想运行在该地址,就需要修改链接脚本和中断向量的跳转地址。
- 修改固件的链接地址为 0x8040000。
- 修改中断向量表的跳转基地址为 0x8040000。
首先在 main.c 文件中添加如下代码,这段代码的功能是重新设定中断向量跳转地址为 app 分区的地址。
/** * Function ota_app_vtor_reconfig * Description Set Vector Table base location to the start addr of app(RT_APP_PART_ADDR).*/static int ota_app_vtor_reconfig(void){ #define NVIC_VTOR_MASK 0x3FFFFF80 /* Set the Vector Table base location by user application firmware definition */ SCB->VTOR = RT_APP_PART_ADDR & NVIC_VTOR_MASK; return 0;}INIT_BOARD_EXPORT(ota_app_vtor_reconfig);
然后在 main 函数中添加版本信息打印,如下图所示:
- 下载 app 程序
直接点击下载程序,固件就会被烧录到 app 分区。Bootloader 启动后将跳转到 app 分区运行,实验效果如下图所示:
可以看到串口输出的信息 The current version of APP firmware is 1.0.0,即当前固件的版本为 1.0.0 。
打包 app 固件
本小节讲述如何使用 RT-Thread OTA 固件打包器对 app 固件进行打包,制作可以被下载到 download 分区的升级固件。固件打包工具可以在 ota_downloader 软件包下的 tools 文件夹内找到。
- 在对固件进行打包操作前,先修改 stm32f407-atk-explorer/applications/main.c 中 APP_VERSION 宏的值为 2.0.0 作为参照,然后重新编译一遍生成新的 rtthread.bin 文件,修改内容如下图所示:
- 双击打开 toolsota_packager_ota_packaging_tool.exe 程序,使用 OTA 固件打包工具将上一步编译出的 rtthread.bin 文件打包成可被升级的 rtthread.rbl 文件,如下图所示:
固件打包器提供三种固件压缩方式:fastlz、quicklz 和 gzip,一种固件加密方式 AES256。开发者可以根据实际需求选择合适的加密压缩方式。
执行 OTA
Ymodem 升级固件
使用 Ymodem 协议升级固件时,推荐使用 Xshell 终端。
在 msh 命令行中输入 ymodem_ota 命令后,点击鼠标右键,然后在菜单栏找到用 YMODEM 发送选项发送文件,如下图所示:
- 选择 Ymodem 方式发送升级固件。
- 选中之前 OTA 固件打包工具生成的 rtthread.rbl 文件。
接下来升级固件就会通过 Ymodem 的方式被下载到 download 分区。
执行 OTA 升级
固件被下载到 download 分区后,系统会自动重启,执行 OTA 升级。
升级完毕后可以看到如下效果:
串口输出信息为 The current version of APP firmware is 2.0.0 ,说明固件已经被升级到 2.0.0 版本了。
更多固件下载方式
HTTP/HTTPS 固件升级是另外一种固件下载方式,制作下载器时如果开启了系统中的网络驱动,即可使用此种方式下载固件。具体步骤与 Ymodem 升级固件 小节大体一致。以下是配置截图:
在终端输入 http_ota http://xxx/xxx/rtthreadf.rbl 命令,系统将会从链接 http://xxx/xxx/rtthreadf.rbl` 处下载固件到 download 分区,之后系统会自动重启,执行 OTA 升级程序。
恢复出厂固件
在生成页面中选中了 恢复出厂固件引脚 功能后,即开启了出厂固件恢复功能。开发者可以将制作好的 app 固件烧录至 factory 分区中,在系统启动前按下恢复出厂固件引脚(可选择一个或者两个引脚作为固件恢复触发引脚)并保持 10S,即可从 factory 分区中恢复出厂固件到 app 分区中。
恢复出厂按键引脚配置如下:
factory 分区的配置如下所示:
按照上图的配置,factory 分区被设置为从片内 Flash 首地址偏移 0x60000 的位置开始,大小为 128KB,想要使用固件恢复功能,则需要将可用的 app 固件烧录到该分区中,固件恢复过程如下图所示:
jlink v9可升级固件‘_在rt-thread下实现OTA在线固件更新功能相关推荐
- jlink v9可升级固件‘_STM32WB的硬核功能 - 无线固件升级FUOTA
FUOTA = Firmware Update Over The Air, 译为"无线固件更新",这项功能将为工程人员的升级及调试带来极大的便利. 随着正在和将要发生的物联网规模化 ...
- 诺基亚n79 java性能_软件升级/硬件测试_诺基亚 N79_手机其它OS-中关村在线
软件系统+硬件配置 和诺基亚N78一样,诺基亚N79采用的软件版本采用的是Symbian OS v9.3操作系统,基于S60 3rd Edition with Feature Pack 2平台.诺基亚 ...
- 360路由器v2刷第三方固件_己亥年网件R6220路由器刷openwrt固件的方法(亲测可用)...
本人三年前入手网件R6220路由器,就是看中其品牌和较高的性价比.刚开始使用没有问题,一直很稳定,除了无线网信号不好(其他房间使用360.TP等垃圾路由器桥接).但是最近使用发现,经常是无线信号满格但 ...
- 正点原子STM32 H743完成RT Thread下的LAN8720 网卡驱动 LWIP跑起来
,目前RT官网对H743的支持力度还不理想,本想按照F407的搞定网卡的套路来搞定H743的网卡(因为phy也是LAN 8720),以为会很轻松,没想到却是一条遍布荆棘的路... 好在已经有不少大佬做 ...
- Jlink v9仿真器PCB原理图自动升级固件
Jlink v9仿真器PCB原理图自动升级固件 STM32仿 Jlink v9仿真器PCB原理图BOM文件AD格式STM32仿真ARM内核和HEX烧录程序,可以直接打板生产,STM32单片机ARM系列 ...
- J-Link该如何升级固件?
关注.星标公众号,直达精彩内容 不管你信或不信,我们手中的JLINK大部分都是盗版的. 既然是盗版的,可能会因为一不小心升级了固件导致JLINK不能用了,或者提示克隆(The connected em ...
- 全志h3通用固件_英菲克i7四核全志H3芯片刷机rom升级固件包
今天小编跟大家分享机顶盒-英菲克i7四核全志H3芯片刷机rom升级固件包下载及刷机教程! 下载固件之前,最好拆机看下主板上的处理器芯片上是否有H3字样! 如果有的话就说明本页面的固件与你的机型相匹配, ...
- JLINK V9 修复小记
公司的JLINK V9 老是掉固件,现像就是插上USB后灯都不亮,里面的片子是STM32F205RG/C,里需要把固件重刷就可以了.. 淘宝上一般的V9版都会预留SWD接口,搞清楚线序后就找相应的固件 ...
- rt thread studio使用QBOOT和片外flash实现OTA升级
我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...
- MDK 5.25 J-link V9 烧写程序失败
软件环境:MDK 5.25 硬件:J-link V9,固件J-Link V9 compiled Mar 2 2018 17:07:57.J-link驱动版本V6.14a. 最开始能够烧写程序.但是有一 ...
最新文章
- SmartRoute之大规模消息转发集群实现
- Vue-Layout:可视化布局、自动生成代码工具
- 详细的聊聊接口性能优化的11个小技巧 不收藏对不起我
- Javascript之链式运动框架1
- 线结构光平面标定矩阵变换算子
- 2009年总结-爱与快乐着
- DeviceIoControl的使用说明
- python网站开发实例视频_Python实战-让在职教育类网站的视频全自动播放
- React中构造函数、reader和函数的调用次数和时机测试
- vue给input file绑定函数获取当前上传的对象
- python开发【基础二】
- oracle10数据库链接失败,oracle 10g Enterprise Manager 无法连接到数据库实例分析
- 蓝桥杯 出现次数最多的整数
- python培训来袭_从入门到精通!2020年Python最佳学习路线重磅来袭!
- 操作系统复习笔记(五)
- 2016/2/24 1,dotctype有几种? 2,了解html的发展历史
- 解决 EndNote X9 安装报错 lnstallation ended prematurely because of an error.
- HTML YouTube 视频
- Typora怎么插入图片链接,并设置图片居中
- 硬笔书法“案”字怎样书写正确?“最美中国字”来教你!
热门文章
- gdb 调试打印完整字符串
- 第二部分 Automake的标准工程组织
- 从Slice_Header学习H.264(三.1)--相关细节之 POC的计算
- java集合的相互转化(map,set,list,array)
- 动画演示Sunday字符串匹配算法——比KMP算法快七倍!极易理解!
- 思科网院Packet Tracer实验(八)子网划分
- c语言用指针取出字节,在C语言中一个指针占用多少字节。
- android多击事件_android自定义OnTouchEvent处理长按,单击,双击,多击事件和Touch
- cas 单点登录_5分钟明了单点登录SSO、OAuth、LDAP、CAS的流程与应用
- csv反序列化_Py't'hon之csv,ini序列化,反序列化