一、FOTA 概述
FOTA 即远程升级功能,此功能可以让客户在不方便大量线刷升级(设备不在身边/量产 PCB 没引出 USB/需要大批量进行功能升级)的情况下,快速进行 AT 固件的远程更新。
780E AT 固件支持合宙 iot 平台升级和自建第三方服务器(HTTP)升级
二、演示功能概述
本文将详细讲述如何进行 AT 固件的远程升级。
三、准备硬件环境
“古人云:‘工欲善其事,必先利其器。’在深入介绍本功能示例之前,我们首先需要确保以下硬件环境的准备工作已经完成。”
3.1 Air780E 开发板
本次使用的开发板为 Air780E 核心板,如下图所示:
点击链接购买:Air780E 核心板淘宝购买链接 ;
此核心板的详细使用说明参考:Air780E 产品手册 中的《开发板 Core_Air780E 使用说明 VX.X.X.pdf》,写这篇文章时最新版本的使用说明为:《开发板 Core_Air780E 使用说明 V1.0.5.pdf》 ;核心板使用过程中遇到任何问题,可以直接参考这份使用说明 pdf 文档。
3.2 SIM 卡
请准备一张可正常上网的 SIM 卡,该卡可以是物联网卡或您的个人手机卡。
特别提醒:请确保 SIM 卡未欠费且网络功能正常,以便顺利进行后续操作。
3.3 PC 电脑
请准备一台配备 USB 接口且能够正常上网的电脑。电脑操作系统为:WIN10 以及以上版本的 WINDOWS 系统(mac 以及 win8 及其以下电脑请更换为 win10 及其以上系统)
3.4 数据通信线
请准备一根用于连接 Air780E 开发板和 PC 电脑的数据线,该数据线将实现业务逻辑的控制与交互。
- USB 数据线(其一端为 Type-C 接口,用于连接 Air780E 开发板)。通常,这种数据线的外观如下示意图所示:
普通的手机 USB 数据线一般都可以直接使用;
第二种数据线是 USB 转 TTL 串口线,一般来说这种数据线如下图所示:
在本教程中,使用的是第二种 USB 数据线。
在本教程中,我们将采用 TTL 转 USB 串口线进行 AT 指令的收发。
3.5 组装硬件环境
3.5.1 请按照 SIM 卡槽上的指示方向正确插入 SIM 卡,务必确保插入方向正确,避免插反导致损坏!
通常,插入 SIM 卡的步骤如下:
- 将 SIM 卡的金属接触面朝下,对准卡槽的开口。
- 用力平稳地将 SIM 卡推入卡槽,直至听到“咔嚓”一声,表示 SIM 卡已正确安装到位。
3.5.2 TTL 数据线,连接电脑和 Air780E 开发板(type-c 口当前仅做供电使用),如下图所示:
使用 TTL 转 USB 线,接在模块的 uart1(部分资料显示为 MAIN_RX/TX 丝印为 M_TX/M_RX)上
一般来说 TTL 转 USB 线的白色线为 RX 绿色线为 TX,所以 TTL 的白线需要接给模块的 TX,同理 TTL 的绿线接给模块的 RX,如下图所示,当然,记得 GND 也接上,需要共地,要不有可能通讯不正常
四、FOTA 软硬件参考
FOTA 和硬件基本无关,软件流程可参考 AT 手册
五、准备软件环境
“凡事预则立,不预则废。”在详细阐述本功能示例之前,我们需先精心筹备好以下软件环境。
5.1 Luatools 工具
要想烧录 AT 固件到 4G 模组中,需要用到合宙的强大的调试工具:Luatools;
下载地址:Luatools v3 下载调试工具。
Luatools 工具集具备以下几大核心功能:
- 一键获取最新固件:自动连接合宙服务器,轻松下载最新的合宙模组固件。
- 固件与脚本烧录:便捷地将固件及脚本文件烧录至目标模组中。
- 串口日志管理:实时查看模组通过串口输出的日志信息,并支持保存功能。
- 串口调试助手:提供简洁的串口调试界面,满足基本的串口通信测试需求。
Luatools 下载之后, 无需安装, 解压到你的硬盘,点击 Luatools_v3.exe 运行,出现如下界面,就代表 Luatools 安装成功了:
5.2 串口调试工具
在量产的项目硬件设计中,一般都是由主控 MCU 通过 MCU 的 UART 给 4G 模组的 UART1 发送命令实现具体的业务逻辑;
在本教程中,为了测试方便,没有使用主控 MCU;
而是使用了 PC 电脑上的一个串口工具 LLCOM,通过 TTL 转 USB 模块给 780E 的 uart1 发送命令来实现演示功能;
5.2.1 确定模块内部固件
模块出厂如无特殊要求,就是 AT 版本,可以直接走串口一发 AT,发送前可以通过 luatools 确定当前模块固件类型,如果模块类型不是 AT 固件,需要使用 USB 烧录 AT 固件。如下图所示位置,即可看出模块固件内部为 luatos 版本,非 AT 版本,需要重新下载 AT 固件,如果已经是 AT 固件了,则大多数情况下就不需要通过 luatools 烧录 AT 固件了。如果需要下载 AT 固件,则继续看包含在 5.2.2 以内的第五节所有内容,如果当前已经是 AT 固件,且查看过 AT 固件版本说明,当前的版本满足需求的,直接开始看第 6 节
5.2.2 找到烧录的固件文件
如果模块内部不是 AT 版本,或者说不是你想要的 AT 版本,则可以通过 Luatools 给 780E 烧录对应 AT 固件,AT 固件版本可以点击此处查看
也可以直接按图上蓝框所示位置选择 780E 固件
5.2.3 正确连接电脑和 4G 模组电路板
使用带有数据通信功能的数据线,不要使用仅有充电功能的数据线;
5.2.4 识别 4G 模组的 boot 引脚
在下载之前,要用模组的 boot 引脚触发下载, 也就是说,要把 4G 模组的 boot 引脚拉到 1.8v,或者直接把 boot 引脚和 VDD_EXT 引脚相连。我们要在按下 BOOT 按键时让模块开机,就可以进入下载模式了。
具体到 Air780E 开发板,
- 当我们模块没开机时,按着 BOOT 键然后长按 PWR 开机。
- 当我们模块开机时,按着 BOOT 键然后点按重启键即可。
5.2.5 识别电脑的正确端口
如果设备管理器出现了 3 个连续数字的 com 端口,这时候, 证明硬件连接就绪,模块正常开机且端口识别正常
此时按住 boot 按键,再按下重启按键就可以进行烧录了!
判断是否进入 BOOT 模式:模块上电,此时在电脑的设备管理器中,查看串口设备, 会出现一个端口表示进入了 boot 下载模式,如下图所示:
注:模块如果进入了 boot 模式,但是没有烧录动作,boot 模式会持续 40s 左右,然后正常开机
5.2.6 使用 luatools 烧录固件
点击点击下载后,出现如下提示以后,如果模块开机就按住 boot 按键再按住重启键,使模块进入 boot 模式,如果模块未开机,则按住 boot 按键,再按住开机键,模块也能进入 boot 模式
等待几秒后会出现
再等 30 多 S 以后,下载框就会提示
此时,使用 llcom 选择 TTL 转 USB 模块对应端口,本次示例中使用的是 CP2102 TTL 转 USB 工具,如果你的电脑没有识别出来这个设备,端口这一栏显示的未知设备,则需要装一个 CP2102 的驱动
点击此处下载 CP2102 驱动,下载完成后将压缩包解压,然后端口里右键点击未知设备,选择更新驱动程序
选择解压后的路径存放的文件夹,点击下一步,当提示"你的设备驱动已经安装"即可
点击"打开串口",发送第一条指令"AT*I"(注:模块默认波特率为 115200,如果需要需要 9600 或其他波特率,可以先用 115200 波特率发送 at+ipr=9600,其中等号后面的就是想要设置的波特率,可以设置的波特率如下:0,600,1200,2400,4800,9600,19200,38400,57600,115200,230400,460800,921600,1000000,2000000,3000000)
六、AT 版本远程升级概述
AT 版本的远程升级主要是对 AT 固件文件进行的版本升级,升级方式有多种,可以通过合宙官方 iot 平台升级,同样也可以使用自己的服务器来搭建升级服务。
6.1 合宙 IOT 平台升级及其配置
6.1.1 合宙 IOT 平台配置,点此登录,查询模块是否在自己账号下。 客户向合宙采购 4G 模块时,如果采购人员没有告知合宙这批模块放在 iot.openluat.com 上的哪个产品下,则合宙会以采购人的手机号为账号,默认密码 888888,创建一个“Air7XXE 标准模块”的项目,此次采购的所有模块都会放在这个项目下(注:780E 模块的 AT 固件,想要使用合宙的 IOT 平台进行远程升级,则创建的项目名必须叫"Air7XXE 标准模块")。
6.1.2 配置流程 下载最新固件,AT 固件版本获取,固件下载到本地,解压后,将 dfota.bin 文件上传 dfota。如下示例所示
新建固件,上传固件,找到对应项目,点击固件列表。
点击创建固件,上传对应 bin 文件。
上传文件后会自动生成固件名称,不需要修改。
如果配置时,是否全项目升级选的“是”,无需配置 imei,按照上述内容配置即可。
如果配置时,是否全项目升级选的“否”,还需添加模块 imei,如下图所示:
6.2 触发升级方式
触发升级有两种方式,自动触发和手动触发。
6.2.1 手动触发升级
手动触发为模块发送指定 AT 指令触发升级。
如下是模块从 V1064 升级到 V1070 的流程。
完整交互流程如下
2024-11-11 18:12:03.459 +08:00 [INF] ->^boot.rom'v'!\n
2024-11-11 18:12:03.459 +08:00 [DBG] [HEX]5E 62 6F 6F 74 2E 72 6F 6D 01 27 76 00 00 00 02 27 21 5C 6E
2024-11-11 18:12:04.489 +08:00 [INF] ->
RDY
2024-11-11 18:12:04.489 +08:00 [DBG] [HEX]0D 0A 52 44 59 0D 0A
2024-11-11 18:12:09.874 +08:00 [INF] ->
^MODE: 17,17
+E_UTRAN Service
+CGEV: ME PDN ACT 1,0
+NITZ: 2024/11/11,10:12:10+0,0
2024-11-11 18:12:17.148 +08:00 [INF] <-AT
2024-11-11 18:12:17.148 +08:00 [DBG] [HEX]41 54 0D 0A
2024-11-11 18:12:17.255 +08:00 [INF] ->AT
OK
2024-11-11 18:12:17.255 +08:00 [DBG] [HEX]41 54 0D 0A 0D 0A 4F 4B 0D 0A
2024-11-11 18:12:25.342 +08:00 [INF] <-AT*I
2024-11-11 18:12:25.342 +08:00 [DBG] [HEX]41 54 2A 49 0D 0A
2024-11-11 18:12:25.471 +08:00 [INF] ->AT*I
Manufacturer: AirM2M
Model: Air780E
Revision: AirM2M_780E_V1164_LTE_AT
HWver: A16
Buildtime: May 28 2024 16:41:27
IMEI: 868327073939157
ICCID: 898604981022C0256558
IMSI: 460081899906558
OK
2024-11-11 18:49:34.808 +08:00 [DBG] [HEX]41 54 2B 43 53 51 3F 0D 0A 0D 0A 45 52 52 4F 52 0D 0A
2024-11-11 19:47:59.829 +08:00 [INF] <-AT+CPIN?
2024-11-11 19:47:59.829 +08:00 [DBG] [HEX]41 54 2B 43 50 49 4E 3F 0D 0A
2024-11-11 19:47:59.939 +08:00 [INF] ->AT+CPIN?
+CPIN: READY
OK
2024-11-11 19:47:59.939 +08:00 [DBG] [HEX]41 54 2B 43 50 49 4E 3F 0D 0A 0D 0A 2B 43 50 49 4E 3A 20 52 45 41 44 59 0D 0A 0D 0A 4F 4B 0D 0A
2024-11-11 19:48:08.585 +08:00 [INF] <-AT+CGATT?
2024-11-11 19:48:08.585 +08:00 [DBG] [HEX]41 54 2B 43 47 41 54 54 3F 0D 0A
2024-11-11 19:48:08.692 +08:00 [INF] ->AT+CGATT?
+CGATT: 1
OK
2024-11-11 19:48:08.692 +08:00 [DBG] [HEX]41 54 2B 43 47 41 54 54 3F 0D 0A 0D 0A 2B 43 47 41 54 54 3A 20 31 0D 0A 0D 0A 4F 4B 0D 0A
2024-11-11 19:48:13.212 +08:00 [INF] <-AT+CSQ
2024-11-11 19:48:13.212 +08:00 [DBG] [HEX]41 54 2B 43 53 51 0D 0A
2024-11-11 19:48:13.320 +08:00 [INF] ->AT+CSQ
+CSQ: 30,0
OK
2024-11-11 19:48:13.320 +08:00 [DBG] [HEX]41 54 2B 43 53 51 0D 0A 0D 0A 2B 43 53 51 3A 20 33 30 2C 30 0D 0A 0D 0A 4F 4B 0D 0A
2024-11-11 19:48:21.669 +08:00 [INF] <-AT+UPGRADE
2024-11-11 19:48:21.669 +08:00 [DBG] [HEX]41 54 2B 55 50 47 52 41 44 45 0D 0A
2024-11-11 19:48:21.792 +08:00 [INF] ->AT+UPGRADE
OK
2024-11-11 19:48:21.792 +08:00 [DBG] [HEX]41 54 2B 55 50 47 52 41 44 45 0D 0A 0D 0A 4F 4B 0D 0A
2024-11-11 19:48:24.685 +08:00 [INF] ->+UPGRADEIND: -1003
2024-11-11 19:48:24.685 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 2D 31 30 30 33 0D 0A
2024-11-11 19:56:36.688 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 2D 31 30 30 33 0D 0A
2024-11-11 19:57:08.439 +08:00 [INF] <-AT+UPGRADE
2024-11-11 19:57:08.439 +08:00 [DBG] [HEX]41 54 2B 55 50 47 52 41 44 45 0D 0A
2024-11-11 19:57:08.546 +08:00 [INF] ->AT+UPGRADE
OK
2024-11-11 19:57:08.546 +08:00 [DBG] [HEX]41 54 2B 55 50 47 52 41 44 45 0D 0A 0D 0A 4F 4B 0D 0A
2024-11-11 19:57:12.830 +08:00 [INF] ->+UPGRADEIND: 10
2024-11-11 19:57:12.830 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 31 30 0D 0A
2024-11-11 19:57:13.220 +08:00 [INF] ->+UPGRADEIND: 20
2024-11-11 19:57:13.220 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 32 30 0D 0A
2024-11-11 19:57:13.543 +08:00 [INF] ->+UPGRADEIND: 30
2024-11-11 19:57:13.543 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 33 30 0D 0A
2024-11-11 19:57:13.884 +08:00 [INF] ->+UPGRADEIND: 40
2024-11-11 19:57:13.884 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 34 30 0D 0A
2024-11-11 19:57:14.257 +08:00 [INF] ->+UPGRADEIND: 50
2024-11-11 19:57:14.257 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 35 30 0D 0A
2024-11-11 19:57:14.600 +08:00 [INF] ->+UPGRADEIND: 60
2024-11-11 19:57:14.600 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 36 30 0D 0A
2024-11-11 19:57:14.944 +08:00 [INF] ->+UPGRADEIND: 70
2024-11-11 19:57:14.944 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 37 30 0D 0A
2024-11-11 19:57:15.308 +08:00 [INF] ->+UPGRADEIND: 80
2024-11-11 19:57:15.308 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 38 30 0D 0A
2024-11-11 19:57:15.669 +08:00 [INF] ->+UPGRADEIND: 90
2024-11-11 19:57:15.669 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 39 30 0D 0A
2024-11-11 19:57:15.979 +08:00 [INF] ->+UPGRADEIND: 100
2024-11-11 19:57:15.979 +08:00 [DBG] [HEX]2B 55 50 47 52 41 44 45 49 4E 44 3A 20 31 30 30 0D 0A
2024-11-11 19:57:19.943 +08:00 [INF] ->^boot.rom'v'!\n
2024-11-11 19:57:19.943 +08:00 [DBG] [HEX]5E 62 6F 6F 74 2E 72 6F 6D 01 27 76 00 00 00 02 27 21 5C 6E
2024-11-11 19:57:20.518 +08:00 [INF] ->+QIND: "FOTA","START"
+QIND: "FOTA","UPDATING",0
2024-11-11 19:57:20.518 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 53 54 41 52 54 22 0D 0A 2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 30 0D 0A
2024-11-11 19:57:21.637 +08:00 [INF] ->+QIND: "FOTA","UPDATING",2
2024-11-11 19:57:21.637 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 32 0D 0A
2024-11-11 19:57:22.814 +08:00 [INF] ->+QIND: "FOTA","UPDATING",5
2024-11-11 19:57:22.814 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 35 0D 0A
2024-11-11 19:57:23.950 +08:00 [INF] ->+QIND: "FOTA","UPDATING",8
2024-11-11 19:57:23.950 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 38 0D 0A
2024-11-11 19:57:25.132 +08:00 [INF] ->+QIND: "FOTA","UPDATING",10
2024-11-11 19:57:25.132 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 31 30 0D 0A
2024-11-11 19:57:27.471 +08:00 [INF] ->+QIND: "FOTA","UPDATING",16
2024-11-11 19:57:27.471 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 31 36 0D 0A
2024-11-11 19:57:29.943 +08:00 [INF] ->+QIND: "FOTA","UPDATING",21
2024-11-11 19:57:29.943 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 32 31 0D 0A
2024-11-11 19:57:31.235 +08:00 [INF] ->+QIND: "FOTA","UPDATING",24
2024-11-11 19:57:31.235 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 32 34 0D 0A
2024-11-11 19:57:32.515 +08:00 [INF] ->+QIND: "FOTA","UPDATING",27
2024-11-11 19:57:32.515 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 32 37 0D 0A
2024-11-11 19:57:33.167 +08:00 [INF] ->+QIND: "FOTA","UPDATING",28
2024-11-11 19:57:33.167 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 32 38 0D 0A
2024-11-11 19:57:35.114 +08:00 [INF] ->+QIND: "FOTA","UPDATING",32
2024-11-11 19:57:35.114 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 33 32 0D 0A
2024-11-11 19:57:37.697 +08:00 [INF] ->+QIND: "FOTA","UPDATING",38
2024-11-11 19:57:37.697 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 33 38 0D 0A
2024-11-11 19:57:39.006 +08:00 [INF] ->+QIND: "FOTA","UPDATING",41
2024-11-11 19:57:39.006 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 34 31 0D 0A
2024-11-11 19:57:40.315 +08:00 [INF] ->+QIND: "FOTA","UPDATING",43
2024-11-11 19:57:40.315 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 34 33 0D 0A
2024-11-11 19:57:40.988 +08:00 [INF] ->+QIND: "FOTA","UPDATING",45
2024-11-11 19:57:40.988 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 34 35 0D 0A
2024-11-11 19:57:41.624 +08:00 [INF] ->+QIND: "FOTA","UPDATING",46
2024-11-11 19:57:41.624 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 34 36 0D 0A
2024-11-11 19:57:42.897 +08:00 [INF] ->+QIND: "FOTA","UPDATING",49
2024-11-11 19:57:42.897 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 34 39 0D 0A
2024-11-11 19:57:44.844 +08:00 [INF] ->+QIND: "FOTA","UPDATING",53
2024-11-11 19:57:44.844 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 35 33 0D 0A
2024-11-11 19:57:45.503 +08:00 [INF] ->+QIND: "FOTA","UPDATING",54
2024-11-11 19:57:45.503 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 35 34 0D 0A
2024-11-11 19:57:46.812 +08:00 [INF] ->+QIND: "FOTA","UPDATING",57
2024-11-11 19:57:46.812 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 35 37 0D 0A
2024-11-11 19:57:48.133 +08:00 [INF] ->+QIND: "FOTA","UPDATING",60
2024-11-11 19:57:48.133 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 36 30 0D 0A
2024-11-11 19:57:48.805 +08:00 [INF] ->+QIND: "FOTA","UPDATING",61
2024-11-11 19:57:48.805 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 36 31 0D 0A
2024-11-11 19:57:49.476 +08:00 [INF] ->+QIND: "FOTA","UPDATING",63
2024-11-11 19:57:49.476 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 36 33 0D 0A
2024-11-11 19:57:50.800 +08:00 [INF] ->+QIND: "FOTA","UPDATING",65
2024-11-11 19:57:50.800 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 36 35 0D 0A
2024-11-11 19:57:52.126 +08:00 [INF] ->+QIND: "FOTA","UPDATING",68
2024-11-11 19:57:52.126 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 36 38 0D 0A
2024-11-11 19:57:53.434 +08:00 [INF] ->+QIND: "FOTA","UPDATING",71
2024-11-11 19:57:53.434 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 37 31 0D 0A
2024-11-11 19:57:54.763 +08:00 [INF] ->+QIND: "FOTA","UPDATING",73
2024-11-11 19:57:54.763 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 37 33 0D 0A
2024-11-11 19:57:56.058 +08:00 [INF] ->+QIND: "FOTA","UPDATING",76
2024-11-11 19:57:56.058 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 37 36 0D 0A
2024-11-11 19:57:58.647 +08:00 [INF] ->+QIND: "FOTA","UPDATING",82
2024-11-11 19:57:58.647 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 38 32 0D 0A
2024-11-11 19:58:01.199 +08:00 [INF] ->+QIND: "FOTA","UPDATING",87
2024-11-11 19:58:01.199 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 38 37 0D 0A
2024-11-11 19:58:03.738 +08:00 [INF] ->+QIND: "FOTA","UPDATING",93
2024-11-11 19:58:03.738 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 39 33 0D 0A
2024-11-11 19:58:04.387 +08:00 [INF] ->+QIND: "FOTA","UPDATING",94
2024-11-11 19:58:04.387 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 39 34 0D 0A
2024-11-11 19:58:06.318 +08:00 [INF] ->+QIND: "FOTA","UPDATING",98
2024-11-11 19:58:06.319 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 39 38 0D 0A
2024-11-11 19:58:06.970 +08:00 [INF] ->+QIND: "FOTA","UPDATING",100
2024-11-11 19:58:06.970 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 55 50 44 41 54 49 4E 47 22 2C 31 30 30 0D 0A
2024-11-11 19:58:07.547 +08:00 [INF] ->+QIND: "FOTA","END",0
2024-11-11 19:58:07.547 +08:00 [DBG] [HEX]2B 51 49 4E 44 3A 20 22 46 4F 54 41 22 2C 22 45 4E 44 22 2C 30 0D 0A
2024-11-11 19:58:10.005 +08:00 [INF] ->
RDY
2024-11-11 19:58:10.005 +08:00 [DBG] [HEX]0D 0A 52 44 59 0D 0A
2024-11-11 19:58:12.082 +08:00 [INF] ->
^MODE: 17,17
+E_UTRAN Service
+CGEV: ME PDN ACT 1,0
+NITZ: 2024/11/11,11:58:12+0,0
2024-11-11 19:58:23.444 +08:00 [INF] <-AT*I
2024-11-11 19:58:23.444 +08:00 [DBG] [HEX]41 54 2A 49 0D 0A
2024-11-11 19:58:23.583 +08:00 [INF] ->AT*I
Manufacturer: AirM2M
Model: Air780E
Revision: AirM2M_780E_V1170_LTE_AT
HWver: A16
Buildtime: Oct 20 2024 23:52:20
IMEI: 868327073939157
ICCID: 898604981022C0256558
IMSI: 460081899906558
OK
6.2.2 自动升级(默认 24 小时以内自动触发)
自动升级是模块定期向后台发送升级请求,来获取新固件进行更新的,大致流程如下:
可以通过 AT+UPGRADE="PERIOD",60 设置自动升级时间,这里设置为 60S 来作为演示:
因为升级过程和上文手动触发一样,所以不在这里单独列出来了
注意: A.客户可以通过 IOT 平台查看升级成功数量,失败日志等信息 B.升级过程中若模块断电、重启导致升级失败,可重新升级 C.模块手动触发升级时,若频繁从同一个版本请求(目前默认一小时内 6 次,24 小时内 10 次),IOT 平台设备状态会自动更改为禁止升级,需要在平台设备列表手动解除 D.升级时间根据差分包的大小不同,升级时间会不同。跨越的版本越大,差分包越大,升级所需的时间越长。
七、自定义服务器升级指南
使用自己的服务器来升级模块和使用 iot 平台升级最重要的区别是下载固件的来源不同。
7.1 差分包的生成
- 其实 FOTA 的过程是新老版本生成差分包再进行升级的过程,那么这个差分的过程在哪里呢?使用合宙 iot 平台升级,差分的过程在 iot 服务器后台,那使用自己的服务器该怎么办呢?答案当然是自己来完成差分的过程,放在服务器等待模块来下载。
- 手动生成差分包的过程使用 doc 平台工具中的差分工具 差分工具
由于本文示例中使用的是 1164 版本的 AT 固件,所以我们在这里找的旧版本固件 bin 文件即是 1164 版本的 bin 文件,用户需要看清楚手上模块当前的版本,然后点击这里找到对应固件的压缩包文件,解压后找到对应 bin 文件
- 本次我们从 V1064 升级到 V1070 需要准备各自的 bin 远程升级文件,上传完成后等待差分完成,下载得到的差分文件,这里将名字改为 dfota_final_AirM2M_AirM2M_V1070_V1064.bin。
7.2 差分包的放置
- 把生成的固件放到自己的 HTTP 服务器上,然后通过 AT+UPGRADE="URL",""指令设置对应的 URL 链接。
例如我把这个差分文件,放在了合宙内部测试 http 请求的服务器上,对应的 URL 为"http://airtest.openluat.com/download/dfota_final_AirM2M_AirM2M_V1164_V1170.bin"
7.3 升级全过程 升级流程如下,可以上报模块的升级过程:
恭喜你成功从 V1064 版本通过自己服务器搭建 FOTA 服务的方式升级到了更新的 V1070 版本!
八、常见问题
8.1 at 版本自动远程升级,默认 24 小时检测一轮,在一轮检测时,如果链接服务器失败,在应用层有重试机制吗?如果有的话,多久再重连一次?
有重连机制,间隔一分钟,最多尝试 5 次。
8.2 我可以从标准 AT 升级为其他 AT 版本吗?
不可以,FOTA 升级只能向上升级相同版本的 AT 固件,升级其他 AT 版本会报错(如:AirM2M_780E_V1020_LTE_AT 无法升级到 AirM2M_780E_V1021_LTE_LSAT)
8.3 错误码有哪些,都是什么意思?
如果升级失败,可以通过 AT+UPGRADE?查看错误原因
也可以通过 IOT 平台查询升级日志来确认错误原因
也可以点击这里查看具体失败的原因和解决方法
给读者的话
本篇文章由
黄何
开发; 本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题; 请先登录合宙技术交流论坛,然后点击右边链接文档找错赢奖金-Air780E-AT-软件指南-应用实例-远程升级(FOTA) 用截图标注 + 文字描述的方式跟帖回复,记录清楚您发现的问题; 我们会迅速核实并且修改文档; 同时也会为您累计找错积分,您还可能赢取月度找错奖金!