Files
mobile_comm/luatos/air780epm/module/Air780EPM/demo/wdt/air153x_wdt.lua
T
wangfq 173dd6874f init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
2026-08-31 08:53:49 +08:00

118 lines
4.2 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- air153x_wdt.lua
--[[
@summary Air153C/Air153D外部看门狗演示模块
@version 1.0
@date 2026.08.21
@author 陈媛媛
@usage
硬件介绍:
Air153C/Air153D是合宙推出的SOT23-6封装看门狗芯片,用于保障系统稳定性。
- Air153C:超时时间固定约240秒(3.3V供电时实测283秒)
- Air153D:通过STRAP引脚可配置超时时间(10分钟/60分钟/12小时/24小时)
核心信号:
- WTDOG(PIN3):喂狗输入,常态低电平,高脉冲喂狗(>200ms)
- PWR_OFF(PIN4):复位输出,喂狗异常时输出高电平触发主控复位
复位触发条件:
1. 超时复位:超过T_timeout未收到喂狗信号,PWR_OFF输出500ms高电平
2. 强制复位:1秒内连续收到3个喂狗信号,PWR_OFF立即输出500ms高电平
本示例演示三种使用场景:
1、auto_feed模式:配置看门狗,内部自动喂狗,系统持续运行
2、force_reset模式:配置看门狗,10秒后手动触发强制复位(3次快速脉冲)
3、no_feed模式:不配置看门狗,等待超时后自动复位模组
通过修改 DEMO_MODE 变量来选择演示模式
注意:
- force_reset模式下,设备会在10秒后触发硬件复位
- no_feed模式下,设备会在看门狗超时后自动复位(Air153C约240秒,Air153D取决于STRAP配置)
]]
local exair153x_wdt = require("exair153x_wdt")
-- 演示模式选择: "auto_feed"、 "force_reset" 或 "no_feed"
local DEMO_MODE = "auto_feed" -- 修改这个变量来切换演示模式
local wdt_pin = 24 -- 看门狗喂狗引脚
-- 模式1:配置看门狗,内部自动喂狗
local function auto_feed_mode()
log.info("wdt_demo", "模式1:自动喂狗模式启动")
-- 初始化看门狗,启动自动喂狗任务
-- 默认180秒自动喂狗一次
exair153x_wdt.init({ wdt_pin = wdt_pin })
log.info("wdt_demo", "看门狗已初始化,自动喂狗任务已启动")
log.info("wdt_demo", "系统将自动维持看门狗,设备持续运行")
-- 模拟业务逻辑运行
local count = 0
while true do
count = count + 1
log.info("wdt_demo", "业务逻辑运行中... 第" .. count .. "次循环")
-- 可选:手动喂狗(有防误触发机制)
-- exair153x_wdt.feed()
sys.wait(30000) -- 每30秒打印一次状态
end
end
-- 模式210秒后手动执行强制复位
local function force_reset_mode()
log.info("wdt_demo", "模式2:强制复位模式启动")
-- 初始化看门狗
exair153x_wdt.init({ wdt_pin = wdt_pin })
log.info("wdt_demo", "看门狗已初始化")
log.info("wdt_demo", "等待10秒后触发强制复位...")
-- 等待10秒
sys.wait(10000)
-- 触发强制复位(3次快速脉冲触发芯片硬件复位)
log.info("wdt_demo", "触发强制复位!")
exair153x_wdt.trigger_reset()
-- 芯片检测到3次快速脉冲后会触发硬件复位
-- 以下代码不会执行(设备将复位)
sys.wait(5000)
log.info("wdt_demo", "如果看到这条日志,说明复位未成功")
end
-- 模式3:不配置看门狗,等待超时后自动复位
local function no_feed_mode()
log.info("wdt_demo", "模式3:无喂狗模式启动")
log.info("wdt_demo", "不初始化看门狗,等待看门狗超时自动复位")
log.info("wdt_demo", "超时时间取决于Air153C/Air153D芯片的硬件配置")
-- 不调用exair153x_wdt.init(),不喂狗
-- 看门狗芯片会在超时后触发复位
local count = 0
while true do
count = count + 1
log.info("wdt_demo", "运行中... 第" .. count .. "次循环(无喂狗)")
sys.wait(10000) -- 每10秒打印一次
end
end
-- 根据选择的模式执行对应函数
sys.taskInit(function()
log.info("wdt_demo", "Air153C/Air153D外部看门狗演示 v" .. exair153x_wdt.version())
log.info("wdt_demo", "当前模式: " .. DEMO_MODE)
if DEMO_MODE == "auto_feed" then
auto_feed_mode()
elseif DEMO_MODE == "force_reset" then
force_reset_mode()
elseif DEMO_MODE == "no_feed" then
no_feed_mode()
else
log.error("wdt_demo", "未知模式: " .. DEMO_MODE .. ",请选择 auto_feed、force_reset 或 no_feed")
end
end)