对于做 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 扩展库。

今天就分享到这里啦~

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐