LuatOS扩展库API——【air153C_wtd】外部硬件看门狗
对于做 4G-Cat.1、MCU 等物联网终端开发的开发者而言,LuatOS 是一款值得了解的开发工具。它是面向物联网设备的轻量级嵌入式 Lua 脚本运行框架和实时系统,基于 Lua 5.3 完成深度优化,开发层面采用 Lua 脚本模式,核心为协程多任务设计,且拥有 70 余个核心库、20 余个扩展库和 1000 多个应用 demo 示例,可适配物联网开发的各类基础应用场景。
一、概述
air153C_wtd 库是用于控制外部硬件看门狗的 Lua 库,通过 GPIO 引脚控制外部看门狗芯片,提高系统的可靠性和稳定性。在 air153C_wtd 库的帮助下,当系统出现异常时,能够通过外部看门狗芯片自动复位并重新启动系统。
1.1 各类看门狗的区别
1.1.1. 内部硬件看门狗(Always-On Watchdog Timer)
- 定义:AON WDT,位于芯片"Always-On"电源域的硬件看门狗
- 特点:开机后硬件层面自动开始计数,独立于软件系统运行
- 控制方式:完全由内核固件自动控制,不需要脚本干预
- 硬件定时器持续计数,喂狗操作复位计数,超时(计数溢出)触发系统复位
- 可靠性:理论上能复位大部分系统异常,但在极端硬件故障(如 PSRAM 完全死锁)时可能无法正确重启
1.1.2. 软件看门狗
- 定义:基于操作系统任务调度机制的软件层面监控
- 特点:能够检测任务阻塞和软件死锁,依赖操作系统正常运行
- 控制方式:通过 wdt 库函数控制
- 实现原理:基于操作系统定时器机制,FreeRTOS 按 2ms 间隔调用检测函数
- 特殊说明:在 Air8101 中,软件看门狗检测函数同时也会喂硬件看门狗
1.1.3. 外部硬件看门狗
- 定义:独立的看门狗芯片,通过 GPIO 接口通信
- 特点:完全独立于主系统,具有独立的电源和时钟,可靠性最高
- 控制方式:通过 air153C_wtd 库控制,使用 GPIO 引脚实现喂狗操作.
1.2 air153C_wtd 库专门用于控制芯片外部的看门狗:
- 外部硬件看门狗:通过 GPIO 引脚控制的外部看门狗芯片
- 脉冲喂狗机制:通过产生特定宽度的脉冲信号来喂狗
1.3 Air153C 外部看门狗芯片规格说明
- 外部硬件看门狗芯片为 Air153C。
- Air153C 看门狗超时时长默认为 240 秒,并且不允许修改。
看门狗芯片采用标准 SOT23-6 封装,,2.8x2.72mm小尺寸,适用于Air780系列/Air8000系列/Air8101系列。
二、核心示例
1、核心示例是指:使用本库文件提供的扩展 API,开发的基础业务逻辑的演示代码;
2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
3、更加完整和详细的 demo,请参考 LuatOS 仓库 中的 demo/air153C_wtd
PROJECT = "air153C_wtd_demo"
VERSION = "00.000.001"
log.info("main", PROJECT, VERSION)
local air153C_wtd = require("air153C_wtd")
-- 看门狗喂狗任务
function wdt_task()
-- 初始化看门狗引脚28
air153C_wtd.init(28)
-- 主循环中定期喂狗
while true do
-- 每10秒喂一次狗
air153C_wtd.feed_dog(28)
log.info("wdt", "Watchdog fed")
-- 执行其他业务逻辑
sys.wait(10000) -- 等待10秒
end
end
-- 模拟正常业务任务
function business_task()
local count = 0
while true do
count = count + 1
log.info("business", "Normal operation", count)
sys.wait(2000) -- 每2秒执行一次
end
end
-- 启动任务
sys.taskInit(wdt_task)
sys.taskInit(business_task)
sys.run()
三、常量详解
air153C_wtd 核心库没有常量。
四、函数详解
4.1 air153C_wtd.init(watchdogPin)
功能 初始化看门狗控制引脚。
参数
参数含义:看门狗控制引脚对应的GPIO ID编号
数据类型:number
取值范围:整数,具体的GPIO ID编号取决于硬件
是否必选:是
注意事项:调用此函数后,在此函数内部,会执行以下动作:
设置GPIO为输出模式,并且初始化输出低电平,初始低电平。
参数示例:air153C_wtd.init(28)
注意事项:
- 调用此函数后,在此函数内部,会执行以下动作: 设置 GPIO 为输出模式,并且初始化输出低电平。
返回值 无返回值
示例
-- 初始化看门狗,使用引脚28
air153C_wtd.init(28)
4.2 air153C_wtd.feed_dog(watchdogPin)
功能 执行喂狗操作,通过产生脉冲信号喂外部看门狗。
参数
参数含义:看门狗引脚对应的GPIO ID编号
数据类型:number
取值范围:整数,具体的GPIO ID编号取决于硬件
是否必选:是
注意事项:必须与初始化时使用的GPIO ID编号一致
参数示例:air153C_wtd.feed_dog(28)
返回值 无返回值
注意事项:
- 需要定期调用此函数防止看门狗超时.
- Air153C 看门狗超时时长默认为 240S,不允许更改。
示例
-- 喂狗操作
air153C_wtd.feed_dog(28)
-- 在定时器中定期喂狗
local function feed_watchdog()
air153C_wtd.feed_dog(28)
end
-- 立即喂狗一次
feed_watchdog()
-- 在定时器中定期喂狗(每10秒)
sys.timerLoopStart(feed_watchdog, 10000)
4.3 air153C_wtd.close_watch_dog(watchdogPin)
功能 关闭看门狗功能
参数
参数含义:看门狗看门狗引脚对应的GPIO ID编号
数据类型:number
取值范围:整数,具体的GPIO ID编号取决于硬件
是否必选:是
注意事项:必须与初始化时使用的引脚一致
参数示例:air153C_wtd.close_watch_dog(28)
注意事项
正常运行过程中,不要调用此接口关闭看门狗功能,否则会导致看门狗重启主控模组的异常现象。
返回值 无返回值
示例
-- 在特殊情况下关闭看门狗
--正常运行过程中,不要调用此接口关闭看门狗功能,否则会导致看门狗重启主控模组的异常现象
air153C_wtd.close_watch_dog(28)
五、产品支持说明
支持 LuatOS 开发的产品都支持 air153C_wtd 扩展库。
今天就分享到这里啦~
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)