init: Air780EPM 官方 LuatOS 项目代码基线
- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码 - 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等) - 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
-- 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
|
||||
|
||||
-- 模式2:10秒后手动执行强制复位
|
||||
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)
|
||||
Reference in New Issue
Block a user