25 exairlinkwdt-AirLink看门狗
作者:马梦阳 | 最后修改:2026-07-23
一、概述
该扩展库基于合宙 LuatOS 和 AirLink 通信协议设计,用于实现主机与从机之间互看门狗功能。
库代码中默认空闲电平为 低电平,用于带 三极管 设计的双向互看门狗电路,电路设计可以参考:Air1601 开发板设计文件。
如果采用直连方式,只需将空闲电平配置为对应电平即可。
二、硬件接线框图及核心业务逻辑说明

三、喂狗数据格式
使用固定字符串命令格式:
3.1 用户命令
通过 feed() 接口发送的命令:
| 操作类型 | 命令格式 | 说明 |
|---|---|---|
| 正常喂狗 | "WDT:FEED" |
发送喂狗信号,重置对端的等待喂狗超时定时器 |
| 强制复位 | "WDT:RESET" |
发送强制复位命令,触发对端设备复位 |
3.2 内部命令
扩展库内部自动发送的命令,不支持用户直接使用:
| 操作类型 | 命令格式 | 说明 |
|---|---|---|
| 开启看门狗 | "WDT:OPEN" |
open() 接口内部发送,对端收到后配置 TO_RESET 管脚并启动等待喂狗超时定时器 |
| 关闭看门狗 | "WDT:CLOSE" |
close() 接口内部发送,对端收到后停止等待喂狗超时定时器并恢复 TO_RESET 管脚 |
| 参数更新 | "WDT:UPDATE:timeout=300,feed_interval=200" |
update() 接口内部发送,对端收到后更新本端参数 |
四、核心示例
4.1 完整核心示例
-- 引入看门狗扩展库
local exairlinkwdt = require("exairlinkwdt")
-- 完整核心示例任务
local function wdt_demo_task()
-- 初始化看门狗,TO_RESET 使用 GPIO27,常态电平为低电平
local success = exairlinkwdt.open({
reset_pin = 27,
reset_idle_level = 0
})
if success then
log.info("main", "看门狗初始化成功")
else
log.error("main", "看门狗初始化失败")
return
end
-- 示例1:手动喂狗(正常喂狗)
sys.wait(10000) -- 等待10秒
local result = exairlinkwdt.feed(0)
if result then
log.info("main", "手动喂狗成功")
end
-- 示例2:更新参数
sys.wait(20000) -- 等待20秒
-- 只更新超时时长
result = exairlinkwdt.update({ timeout = 300 })
if result then
log.info("main", "超时时长更新成功")
end
sys.wait(10000) -- 等待10秒
-- 只更新喂狗周期
result = exairlinkwdt.update({ feed_interval = 200 })
if result then
log.info("main", "喂狗周期更新成功")
end
sys.wait(10000) -- 等待10秒
-- 同时更新两个参数
result = exairlinkwdt.update({ timeout = 350, feed_interval = 250 })
if result then
log.info("main", "参数更新成功")
end
sys.wait(10000) -- 等待10秒
-- 更新对端参数
result = exairlinkwdt.update({ timeout = 400, target = 0 })
if result then
log.info("main", "对端参数更新成功")
end
-- 示例3:强制复位
sys.wait(30000) -- 等待30秒
result = exairlinkwdt.feed(1)
if result then
log.info("main", "强制复位命令发送成功")
end
-- 示例4:关闭看门狗
sys.wait(60000) -- 等待60秒
result = exairlinkwdt.close()
if result then
log.info("main", "看门狗已关闭")
end
end
-- 启动示例任务
sys.taskInit(wdt_demo_task)
4.2 FOTA 升级示例
4.2.1 使用 libfota 库(libfota/libfota2/libfota3)
使用 libfota 库(libfota/libfota2/libfota3)进行 FOTA 升级时,差分包下载成功后,库会自动调用 feed(0) 喂狗并延长看门狗超时时长,无需用户手动操作。
-- 引入看门狗扩展库
local exairlinkwdt = require("exairlinkwdt")
-- local libfota = require("libfota")
-- local libfota2 = require("libfota2")
-- local libfota3 = require("libbfota3") -- 仅限合宙内部项目使用
local function wdt_task()
-- 初始化看门狗,TO_RESET 使用 GPIO27,常态电平为低电平
local success = exairlinkwdt.open({
reset_pin = 27,
reset_idle_level = 0
})
if success then
log.info("main", "看门狗初始化成功")
else
log.error("main", "看门狗初始化失败")
return
end
end
local function fota_upgrade_task()
-- 根据实际情况配置 FOTA 升级参数
-- 差分包下载成功后,libfota 库(libfota/libfota2/libfota3)会自动调用 exairlinkwdt.feed(0) 喂狗
-- 同时会自动调用 exairlinkwdt.update() 延长看门狗超时时长(如:timeout = 600 秒)
end
-- 启动看门狗任务
sys.taskInit(wdt_task)
-- 启动 FOTA 升级任务
sys.taskInit(fota_upgrade_task)
4.2.2 使用 fota 核心库
使用 fota 核心库进行 FOTA 升级时,用户需要在下载差分包后手动调用 feed(0) 喂狗并延长对端的等待喂狗超时时长。
-- 引入看门狗扩展库
local exairlinkwdt = require("exairlinkwdt")
local function wdt_task()
-- 初始化看门狗,TO_RESET 使用 GPIO27,常态电平为低电平
local success = exairlinkwdt.open({
reset_pin = 27,
reset_idle_level = 0
})
if success then
log.info("main", "看门狗初始化成功")
else
log.error("main", "看门狗初始化失败")
return
end
end
-- FOTA 升级任务
local function fota_upgrade_task()
-- 下载差分包(示例)
-- ... 下载逻辑 ...
-- 差分包下载成功后,手动喂狗并延长对端的等待喂狗超时时长
log.info("main", "差分包下载成功,喂狗并延长对端的等待喂狗超时时长")
-- 喂狗
exairlinkwdt.feed(0)
-- 延长对端的等待喂狗超时时长到 600 秒
exairlinkwdt.update({ timeout = 600, target = 0 })
-- 执行升级
-- ... 升级逻辑 ...
-- 升级完成后重启
sys.wait(1000)
pm.reboot()
end
-- 启动看门狗任务
sys.taskInit(wdt_task)
-- 启动 FOTA 升级任务
sys.taskInit(fota_upgrade_task)
五、常量详解
exairlinkwdt 扩展库无常量。
六、函数详解
6.1 exairlinkwdt.open(options)
功能:
以 Air1601 主控 + Air780ER2 为例。
当 Air1601 调用 open() 接口后,Air1601 端的 exairlinkwdt 库内部执行如下操作:
-
记录用户配置的 TO_RESET 管脚号和常态电平;
-
通过 airlink.sdata() 接口给 Air780ER2 发送开启喂狗的命令;
-
开启喂狗定时器;
Air780ER2 在收到 Air1601 发来的开启喂狗命令后,Air780ER2 端的 exairlinkwdt 库内部执行如下操作:
-
将 Air780ER2 端调用 open() 接口时记录的用户配置的 TO_RESET 管脚配置为输出模式;
-
将 Air780ER2 端调用 open() 接口时记录的用户配置的常态电平设置为对应电平状态(不传时默认为低电平);
-
开启等待喂狗超时定时器;
同理,Air780ER2 调用 open() 接口时也是相同的操作。
注意事项:
-
重复调用时,如果已初始化且未 close,直接返回 false
-
初始化成功后喂狗定时器立即开始工作
-
初始化成功后立即执行一次喂狗
参数
options
参数含义:配置参数,参数为table类型,table内容格式说明如下:
{
-- 参数含义:TO_RESET 管脚号,用于输出高电平复位对端设备;
-- 数据类型:number;
-- 取值范围:有效的 GPIO 号,具体取值取决于硬件平台;
-- 是否必选:必须传入此参数;
-- 注意事项:该管脚会被配置为输出模式,常态电平状态取决于 reset_idle_level;
-- 参数示例:reset_pin = 27
reset_pin = ,
-- 参数含义:TO_RESET 管脚常态电平,此时指的是正常状态下的输出电平;
-- 数据类型:boolean;
-- 取值范围:0 或 1;
-- 是否必选:可选传入此参数,默认为低电平;
-- 注意事项:不填此参数时默认为低电平,复位时输出高电平;
-- 参数示例:reset_idle_level = 0
reset_idle_level = ,
}
数据类型:table;
取值范围:见下方子参数说明;
是否必选:必须传入此参数;
注意事项:必须传入有效的 table 类型参数,否则会返回 false;
参数示例:exairlinkwdt.open({ reset_pin = 10 ,reset_idle_level = 0 })
返回值
local success = exairlinkwdt.open(options)
有一个返回值 success
success
含义说明:初始化操作是否成功;
数据类型:boolean;
取值范围:true 或 false;
注意事项:参数无效或 GPIO 初始化失败时返回 false;
返回示例:true
示例
local exairlinkwdt = require("exairlinkwdt")
-- 初始化看门狗,TO_RESET 使用 GPIO27
local success = exairlinkwdt.open({ reset_pin = 27 })
if success then
print("看门狗初始化成功")
else
print("看门狗初始化失败")
end
6.2 exairlinkwdt.feed(mode)
功能: 喂狗操作,发送喂狗或强制复位命令到对端设备。
注意事项:
-
正常喂狗会重置对端的等待喂狗超时定时器
-
强制复位会发送 "WDT:RESET" 命令,对端收到后自行复位
-
命令通过 airlink.sdata(data) 接口发送
参数
mode
参数含义:喂狗模式;
数据类型:number;
取值范围:0 或 1;
是否必选:必须传入此参数;
注意事项:0 表示正常喂狗,发送 "WDT:FEED" 命令;1 表示强制复位,发送 "WDT:RESET" 命令;
参数示例:exairlinkwdt.feed(0)
返回值
local success = exairlinkwdt.feed(mode)
有一个返回值 success
success
含义说明:喂狗操作是否成功;
数据类型:boolean;
取值范围:true 或 false;
注意事项:airlink 发送失败时返回 false;
返回示例:true
示例
-- 正常喂狗
local success = exairlinkwdt.feed(0)
if success then
print("喂狗成功")
else
print("喂狗失败")
end
-- 强制复位
success = exairlinkwdt.feed(1)
6.3 exairlinkwdt.close()
功能:
以 Air1601 主控 + Air780ER2 为例。
当 Air1601 调用 close() 接口后,Air1601 端的 exairlinkwdt 库内部执行如下操作:
-
关闭喂狗定时器;
-
通过 airlink.sdata() 接口给 Air780ER2 发送关闭喂狗的命令;
Air780ER2 在收到 Air1601 发来的关闭喂狗命令后,Air780ER2 端的 exairlinkwdt 库内部执行如下操作:
-
关闭等待喂狗超时定时器;
-
将 Air780ER2 端调用 open() 接口时记录的用户配置的 TO_RESET 管脚配置由原来的输出模式配置为输入模式;
同理,Air780ER2 调用 close() 接口时也是相同的操作。
注意事项:
- 未初始化时调用,直接返回 false
参数
无
返回值
local success = exairlinkwdt.close()
有一个返回值 success
success
含义说明:关闭操作是否成功;
数据类型:boolean;
取值范围:true 或 false;
注意事项:未初始化时调用,直接返回 false;
返回示例:true
示例
local success = exairlinkwdt.close()
if success then
print("看门狗已关闭")
else
print("看门狗关闭失败")
end
6.4 exairlinkwdt.update(params)
功能: 更新看门狗参数,支持更新单个或多个参数。
注意事项:
-
支持更新单个参数
-
只更新喂狗周期时,要求小于当前超时时间
-
只更新超时时间时,要求大于当前喂狗周期
-
两个都更新时,先更新喂狗周期
-
更新喂狗周期时,如果喂狗定时器正在运行,立即重置喂狗定时器
-
只更新超时时长时,不重启等待喂狗超时定时器,等下次收到喂狗命令时自然重置
参数
params
参数含义:参数配置,参数为table类型,table内容格式说明如下:
{
-- 参数含义:超时时长,超过此时长未收到喂狗信号则触发复位;
-- 数据类型:number;
-- 取值范围:正整数,单位为秒;
-- 是否必选:可选传入此参数,默认值为 240 秒;
-- 注意事项:必须大于当前喂狗周期 feed_interval;
-- 参数示例:timeout = 300
timeout = ,
-- 参数含义:喂狗周期,喂狗定时器按此周期自动发送喂狗命令;
-- 数据类型:number;
-- 取值范围:正整数,单位为秒;
-- 是否必选:可选传入此参数,默认值为 150 秒;
-- 注意事项:必须小于当前超时时间 timeout;
-- 参数示例:feed_interval = 200
feed_interval = ,
-- 参数含义:更新目标;
-- 数据类型:number;
-- 取值范围:0 或 1;0 表示更新本端参数(默认),1 表示更新对端参数;
-- 是否必选:可选传入此参数,默认为 0;
-- 注意事项:更新对端参数时,会发送 "WDT:UPDATE:" 命令给对端;
-- 参数示例:target = 1
target = ,
}
数据类型:table;
取值范围:见下方子参数说明;
是否必选:必须传入此参数;
注意事项:至少需要传入 timeout 或 feed_interval 中的一个参数;
参数示例:exairlinkwdt.update({ timeout = 300 })
返回值
local success = exairlinkwdt.update(params)
有一个返回值 success
success
含义说明:更新操作是否成功;
数据类型:boolean;
取值范围:true 或 false;
注意事项:参数校验失败时返回 false,如 feed_interval 大于 timeout;
返回示例:true
示例
-- 只更新超时时长
local success = exairlinkwdt.update({ timeout = 300 })
if success then
print("超时时长更新成功")
end
-- 只更新喂狗周期
success = exairlinkwdt.update({ feed_interval = 200 })
-- 同时更新两个参数
success = exairlinkwdt.update({ timeout = 300, feed_interval = 200 })
-- 更新对端参数
success = exairlinkwdt.update({ timeout = 300, target = 0 })
七、版本更新说明
版本号:202607190000
1、更新时间:2026-07-19 00:00
2、更新内容
- 新增电平极性说明,说明 NPN 三极管的电平极性关系
- 修改默认空闲电平为低电平(reset_idle_level = 0)
版本号:202607161200
1、更新时间:2026-07-16 12:00
2、更新内容
- 新增 exairlinkwdt.open() 接口,初始化看门狗并启动喂狗定时器
- 新增 exairlinkwdt.feed() 接口,支持正常喂狗和强制复位功能
- 新增 exairlinkwdt.close() 接口,关闭看门狗并发送关闭命令到对端
- 新增 exairlinkwdt.update() 接口,支持更新本端或对端的喂狗周期和超时时长
- 新增 exairlinkwdt.version() 接口,获取库版本信息
- 新增喂狗定时器功能,按周期自动发送喂狗命令
- 新增等待喂狗超时定时器功能,监控对端设备喂狗状态
- 新增懒加载机制,收到喂狗命令时自动配置 GPIO
- 新增参数校验机制,确保参数有效性和合法性
八、产品支持说明
支持 LuatOS 开发的产品都支持 exairlinkwdt 扩展库。
不过需要主机/从机模组都支持AirLink 核心库。