02 fota方式升级WiFi
作者:拓毅恒 | 最后修改:2026-04-13
一、fota_wifi 概述
FOTA(Firmware Over-The-Air)WiFi 是一种通过无线方式远程升级设备 WiFi 固件的技术。它允许设备在保持在线的情况下,自动检查、下载并更新 WiFi 固件,无需手动干预或物理连接。
在 Air8000 平台上,fota_wifi 功能通过 exfotawifi 扩展库实现,支持自动检测 WiFi 固件版本并在有新版本时进行升级,是设备维护和功能更新的重要手段。
二、准备硬件环境
参考:Air8000 硬件环境清单,准备好硬件环境。
2.1 Air8000 核心开发板
Air8000 核心板集成了移动网络通信功能,如果要使用 4G 网络下载 WiFi 固件,需要正确安装 SIM 卡和天线才能正常工作。

三、准备软件环境
3.1 文章内容应用
- 烧录工具:Luatools 工具
- Air8000 烧录需要的固件:本demo开发测试时使用的固件为LuatOS-SoC_V2032_Air8000,本demo对固件版本没有什么特殊要求,所以你如果要测试本demo时,可以直接使用最新版本的内核固件;如果发现最新版本的内核固件测试有问题,可以使用我们开发本demo时使用的内核固件版本来对比测试;
- Air8000 烧录需要脚本文件:Air8000/demo/fota_wifi
- LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件。
准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 核心板中,将本篇文章中演示使用的项目文件烧录到 Air8000 开发板中。
3.2 API 介绍
这里仅介绍本篇文档所使用的 API,详情请查看:API - exfotawifi
exfotawifi.request()
请求检查并执行 WiFi 固件升级
四、fota_wifi 功能实现概述
本小节详细介绍 Air8000 开发板上 WiFi 固件自动升级功能的实现方法和核心代码逻辑。
4.1 主程序配置
主程序用于初始化系统环境并加载 WiFi 固件升级模块。
4.1.1 功能定义
配置项目信息,初始化系统组件(如看门狗),并加载 WiFi 固件升级模块。
4.1.2 代码示例
-- 定义项目信息
PROJECT = "fota_wifi"
VERSION = "001.000.000"
-- 在日志中打印项目名和项目版本号
log.info("main", "project name is ", PROJECT, "version is ", VERSION)
-- 初始化看门狗功能(如果支持)
if wdt then
--配置喂狗超时时间为9秒钟
wdt.init(9000)
--启动一个循环定时器,每隔3秒钟喂一次狗
sys.timerLoopStart(wdt.feed, 3000)
end
-- 加载WiFi固件升级模块
require "check_wifi"
-- 启动系统运行
-- sys.run()之后后面不要加任何语句
sys.run()
4.2 WiFi 固件升级模块
WiFi 固件升级模块是实现 WiFi 固件检查和升级的核心组件。
4.2.1 功能定义
检查当前 Air8000 模组的 WiFi 固件是否为最新版本,若不是则自动启动升级过程,并在升级完成后重启设备。
4.2.2 代码示例
-- 加载exfotawifi模块
local exfotawifi = require("exfotawifi")
-- WiFi固件升级任务
local function fota_wifi_task()
-- 请求检查并执行WiFi固件升级
local result = exfotawifi.request()
if result then
log.info("exfotawifi", "升级任务执行成功")
else
log.info("exfotawifi", "升级任务执行失败")
end
-- 等待升级完成事件(注意:固件版本需≥V2017版本才有此事件)
sys.waitUntil("AIRLINK_SFOTA_DONE")
log.info("fotawifi", "WIFI下载完毕,开始重启")
sys.wait(100)
-- 重启设备以完成固件更新
pm.reboot()
end
-- 在设备启动时执行WiFi固件升级检查任务
sys.taskInit(fota_wifi_task)
五、功能演示
5.1 WiFi 固件升级准备
使用 Luatools 将代码烧录到 Air8000 开发板

5.2 WiFi 固件升级执行
设备启动后,会自动执行 WiFi 固件版本检查,日志中会显示检查过程
如果检测到需要升级,系统会自动下载新的 WiFi 固件:

下载完成后,系统会开始安装新固件:

5.3 升级完成与设备重启
固件安装完成后,系统会接收到 AIRLINK_SFOTA_DONE 事件,随后重启

5.4 升级结果验证
设备重启后,可以通过日志验证 WiFi 固件是否已成功更新到最新版本:

可以看到日志中显示的 WiFi 固件版本号已更新为最新版本。
六、更新记录
V20
- add: ble,scan支持主动模式
- fix: ble,修复获取gatt信息时出现死机
- fix: ble,修复描述符handle查找异常
- fix: ble,修复indicate¬ify 开关异常
- fix: ble,修正ble characteristics默认max_size
- fix: gpio,设置gpio3.3v和3.1v的执行参数填反了,导致调用接口设置3.3v却还是3.1v。并在开机就将gpio设置成3.3v
- change: gpio,开机时调整GPIO初始化逻辑,如果gpio设置不是复用的,那就关掉复用
V18
- add: gpio,支持GPIO使用中断模式
- add: ble,luat_ble_set_adv_data添加长度限制
- add: ble,添加可扫描标志
- add: ble,添加luat_ble_indicate_enable 接口
- add: log,开机的时候把pm.lastReson的值打印出来
- add: uart,支持1200和600波特率,300波特率不支持
- add: airlink,spi从机实现devinfo(设备信息)的获取
- fix: luavm,有概率在开机的时候莫名其妙死机
- fix: airlink,通过抓波形看到RDY脚有的时候拉不高 会在开机出现启动超时的情况, 不能正常恢复
- fix: airlink,rdy脚有时会在cs拉高之前触发一次高低电平,cs拉高后再触发一次,导致出现slave pkg err的日志
- fix: gpio,gpio输出模式的默认状态没有正确设置
- fix: gpio,输出模式时打开上拉/下拉是保持状态,输入模式不能在休眠保持电平
- fix: gpio,输入模式获取电平不正确
- fix: airlink,从机开机时概率出现获取数据长度错误 0,导致airlink无法正常通讯
- fix: airlink,fota,修复fota时airlink冲突的问题
- fix: dhcp,解决启动dhcp后,无法进入长链接的低功耗模式的问题
- fix: ulwip,dhcp, sta测试超过1个小时,重连热点就会上不了网。
- fix: ble,蓝牙描述符时候会导致128长度uuid异常
- fix: wlan,自动重连功能以及关闭自动重连功能未生效
- change: ble,蓝牙MAC地址获取,改到ble库
- change: uart,优化uart tx 缓存多个数据
- change: rtc,默认时间改到2000-01-01 00:00:00
- change: airlink,slave 从机端加快spi_cs中断的速度
- change: log,spi隐藏datalen的调试日志
- change: log,隐藏“TX内存高水位”的调试日志
- change: dhcp,dhcp-server需要完全忽略
- change: luatos,应该总是默认用STA,无论后续是否注册ETH
- change: gpio,执行close时,应该把输出输入标志位也全部关掉
- change: gpio,禁止使用GPIO10/11,因为是UART0
- remove: ble,去掉定向广播
V14
- add: wlan,WLAN_STA_INC事件添加bssid数据
- fix: eth,以太网拔网线,没有发出IP_LOSE事件,而且对dhcp client应该执行stop
- fix: uart,偶现的uart发送数据乱码的问题
- fix: gpio,修复在重复执行gpio.setup且默认高电平时, 会导致有5~10us的低电平及一堆毛刺
- fix: ulwip,dhcpclient,如果没有找到合适的网卡,会导致内存泄露
- change: log,打印io电平的日志
- change: netdrv,dhcp客户应该在网卡就绪,网线连接之后再打开
七、总结
本 demo 实现了 Air8000 开发板 WiFi 固件的自动检查和升级功能。通过 exfotawifi 扩展库,可以方便地实现设备 WiFi 固件的远程更新,确保设备始终运行最新版本的固件,从而获得更好的性能和安全性。整个升级过程完全自动化,无需人工干预,大大提高了设备维护的便捷性。
八、常见问题
8.1 升级失败问题
- 确保 SIM 卡正常联网
- 检查网络信号强度是否良好
8.2 版本兼容性
- 最新的 WiFi 固件可能与部分 API 或功能存在兼容性问题
- 测试完成后,建议在生产环境中注释掉
require "check_wifi",避免自动升级到未经测试的版本
8.3 无法获取系统消息问题
- 需要检查下固件版本,固件版本需 ≥V2017 版本才有
AIRLINK_SFOTA_DONE事件