init: Air780EPM 官方 LuatOS 项目代码基线

- 来源: 合宙 LuatOS 官方仓库 air780epm 模块完整代码
- 路径: luatos/air780epm/module/Air780EPM/demo 含官方 demo(含 mqtt/mqtts/socket/uart 等)
- 后续: 基于 demo 开发 UART<->MQTT 数据上报功能
This commit is contained in:
wangfq
2026-08-31 08:53:49 +08:00
commit 173dd6874f
813 changed files with 125484 additions and 0 deletions
@@ -0,0 +1,305 @@
# wdt_DEMO 项目说明
## 项目概述
本项目是基于 Air780EPM 开发板与 Air8781P1 工业模组,演示了两种看门狗(WDT)功能的使用。
- 内部看门狗 - 使用芯片内置的硬件看门狗
- 外部看门狗 - 使用 Air153C/Air153D 外置看门狗芯片
## 功能说明
### 内部看门狗演示
- 自动启用:硬件看门狗由底层固件自动启用,超时时间20秒
- 定期喂狗:每3秒执行一次喂狗操作,确保系统正常运行
- 故障模拟:可模拟系统死锁导致无法喂狗的场景
- 自动恢复:看门狗超时后自动重启系统
### 外部看门狗演示 (Air153C/Air153D)
Air153C/Air153D是合宙推出的SOT23-6封装看门狗芯片,用于保障系统稳定性。
- Air153C:超时时间固定约240秒(3.3V供电时实测283秒)
- Air153D:通过STRAP引脚可配置超时时间(10分钟/60分钟/12小时/24小时)
三种演示模式:
- auto_feed模式:配置看门狗,内部自动喂狗,系统持续运行
- force_reset模式:配置看门狗,10秒后手动触发强制复位(3次快速脉冲)
- no_feed模式:不配置看门狗,等待超时后自动复位模组
## 演示硬件环境
1、Air780EPM开发板
![alt text]( https://docs.openLuat.com/cdn/image/Air780EPM开发板.jpg)
2、Air8781 P1 工业模组(外挂 Air153C 看门狗芯片)
> Air8781 P系列模组资料请看:[Air8781P系列工业模组](https://docs.openluat.com/air8781p/luatos/hardware/module/)
![]( https://docs.openLuat.com/cdn/image/Air8781P/air8781p_v000.jpg)
3、TYPE-C USB数据线一根
- Air780EPM开发板通过 TYPE-C USB 口供电;
- TYPE-C USB 数据线直接插到核心板的 TYPE-C USB 座子,另外一端连接电脑 USB 口;
## 演示软件环境
1、Luatools下载调试工具 [https://docs.openluat.com/air780epm/common/Luatools/]
2、固件版本LuatOS-SoC_V2016_Air780EPM 版本固件。不同版本区别请见 https://docs.openluat.com/air780epm/luatos/firmware/780epm_version/
3、lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件;
4、准备好软件环境之后,接下来查看[如何烧录项目文件到 Air780EPM开发板中](https://docs.openluat.com/air780epm/luatos/common/download/)将本篇文章中演示使用的项目文件烧录到相应的核心板中。
## 相关软件资料
wdt 核心库文档:https://docs.openluat.com/osapi/core/wdt/
exair153x_wdt 扩展库文档:https://docs.openluat.com/osapi/ext/exair153x_wdt/
Air153C/Air153D 芯片文档:https://docs.openluat.com/accessory/Air153D/
## 演示核心步骤
1、搭建好硬件环境
2、加载演示脚本文件:
- 在main.lua中有选择的选择以下两个lua文件中的一个
- require "internal_wdt" -- 内部看门狗演示模块
- require "air153x_wdt" -- 外部看门狗演示模块
- 在internal_wdt.lua演示脚本中,通过修改 DEMO_MODE 变量选择演示模式
- local DEMO_MODE = "normal" -- 正常喂狗模式
- local DEMO_MODE = "fault" -- 异常故障模式
- 在air153x_wdt.lua演示脚本中,通过修改 DEMO_MODE 变量选择演示模式
- local DEMO_MODE = "auto_feed" -- 自动喂狗模式
- local DEMO_MODE = "force_reset" -- 强制复位模式
- local DEMO_MODE = "no_feed" -- 超时复位模式
3、Luatools烧录内核固件和修改后的demo脚本代码
4、烧录成功后,自动开机运行
5、内部看门狗演示
- 正常模式演示
设置 DEMO_MODE = "normal"
烧录并运行脚本
程序运行后会显示以下典型日志:
```lua
I/user.wdt 硬件看门狗已由底层固件启用
I/user.wdt 喂狗完成
I/user.wdt 喂狗完成
```
- 故障模式演示
设置 DEMO_MODE = "fault"
烧录并运行脚本
程序运行后会显示以下典型日志:
```lua
[2025-11-04 15:31:38.907][000000000.263] I/user.main wdt_DEMO 001.000.000
[2025-11-04 15:31:38.913][000000000.271] I/user.wdt 硬件看门狗已由底层固件启用
[2025-11-04 15:31:41.459][000000003.272] I/user.wdt 喂狗完成
[2025-11-04 15:31:43.457][000000005.271] I/user.wdt 故障前最后一次喂狗,成功 = true
[2025-11-04 15:31:43.464][000000005.272] I/user.fault_task 进入死循环模拟故障
[2025-11-04 15:31:43.472][000000005.272] I/user.fault_task 看门狗喂狗任务被阻塞,系统将在约20秒后重启
[2025-11-04 15:32:08.710] 工具提示: 模组已经死机,请不要关闭程序,正在接收必要的信息用于分析
[2025-11-04 15:32:32.943] 工具提示: diag com USB 断开连接 COM4 CommError,[WinError 22] 设备不识别此命令。
[2025-11-04 15:32:32.985] 工具提示: 死机信息接收成功,如有需要请将死机信息文件交给FAE分析,文件保存在log\ramdump\2025-11-04_153209_LuatOS-SoC_V2016_Air780EGH_867920073503634_COM4_ramdump.bin
[2025-11-04 15:32:33.006] 工具提示: 同时把使用的soc固件包或者编译生成的.elf文件交给FAE
[2025-11-04 15:32:33.022] 工具提示: print com USB 断开连接 COM3 CommError,[WinError 22] 设备不识别此命令。
[2025-11-04 15:32:33.664] 工具提示: soc log port COM3打开成功
[2025-11-04 15:32:33.738] 工具提示: ap log port COM4打开成功
[2025-11-04 15:32:33.751] 工具提示: 用户虚拟串口 COM5
[2025-11-04 15:32:34.049][000000000.272] I/user.wdt 硬件看门狗已由底层固件启用
[2025-11-04 15:32:34.054][000000000.272] I/user.reset_reason 重启原因1: 0 原因2: 0 原因3: 8
```
6、关于重启时间的说明:
实际重启时间不是精确的20秒,主要原因包括:
硬件处理时间:从看门狗超时到实际硬件复位需要一定的处理时间
系统状态保存:在复位前系统需要保存必要的状态信息和日志便于分析
7、关于重启原因值的验证:
根据[pm.lastReson()函数的返回值说明](https://docs.openluat.com/osapi/core/pm/#45-pmlastreson)确认重启的原因3: 8 是内部看门狗触发的重启。
8、外部看门狗演示
- auto_feed模式演示
设置 DEMO_MODE = "auto_feed"
烧录并运行脚本
程序运行后会显示以下典型日志:
```
[2026-08-21 15:52:13.160][000000000.319] I/user.main wdt_DEMO 001.999.000
[2026-08-21 15:52:13.161][000000000.332] D/user.exair153x_wdt version -> 202608030000
[2026-08-21 15:52:13.162][000000000.334] I/user.wdt_demo Air153C/Air153D外部看门狗演示 v202608030000
[2026-08-21 15:52:13.163][000000000.334] I/user.wdt_demo 当前模式: auto_feed
[2026-08-21 15:52:13.164][000000000.334] I/user.wdt_demo 模式1:自动喂狗模式启动
[2026-08-21 15:52:13.164][000000000.334] I/user.exair153x_wdt GPIO24 初始化为空闲态 1
[2026-08-21 15:52:13.165][000000000.335] I/user.exair153x_wdt 首次喂狗
[2026-08-21 15:52:13.166][000000000.335] I/user.exair153x_wdt 初始化成功: GPIO24, 脉冲=250ms, 周期=180s
[2026-08-21 15:52:13.167][000000000.336] I/user.wdt_demo 看门狗已初始化,自动喂狗任务已启动
[2026-08-21 15:52:13.167][000000000.336] I/user.wdt_demo 系统将自动维持看门狗,设备持续运行
[2026-08-21 15:52:13.168][000000000.336] I/user.wdt_demo 业务逻辑运行中... 第1次循环
[2026-08-21 15:52:42.820][000000030.336] I/user.wdt_demo 业务逻辑运行中... 第2次循环
[2026-08-21 15:53:12.823][000000060.336] I/user.wdt_demo 业务逻辑运行中... 第3次循环
[2026-08-21 15:53:42.829][000000090.336] I/user.wdt_demo 业务逻辑运行中... 第4次循环
[2026-08-21 15:54:12.823][000000120.336] I/user.wdt_demo 业务逻辑运行中... 第5次循环
[2026-08-21 15:54:42.820][000000150.336] I/user.wdt_demo 业务逻辑运行中... 第6次循环
[2026-08-21 15:55:12.828][000000180.336] I/user.wdt_demo 业务逻辑运行中... 第7次循环
[2026-08-21 15:55:13.315][000000180.835] D/user.exair153x_wdt 喂狗完成
[2026-08-21 15:55:42.826][000000210.336] I/user.wdt_demo 业务逻辑运行中... 第8次循环
[2026-08-21 15:56:12.819][000000240.336] I/user.wdt_demo 业务逻辑运行中... 第9次循环
```
- force_reset模式演示
设置 DEMO_MODE = "force_reset" 烧录并运行脚本
程序运行后会显示以下典型日志:
```
[2026-08-21 15:58:59.551][000000000.316] I/user.main wdt_DEMO 001.999.000
[2026-08-21 15:58:59.560][000000000.329] D/user.exair153x_wdt version -> 202608030000
[2026-08-21 15:58:59.569][000000000.330] I/user.wdt_demo Air153C/Air153D外部看门狗演示 v202608030000
[2026-08-21 15:58:59.577][000000000.331] I/user.wdt_demo 当前模式: force_reset
[2026-08-21 15:58:59.584][000000000.331] I/user.wdt_demo 模式2:强制复位模式启动
[2026-08-21 15:58:59.592][000000000.331] I/user.exair153x_wdt GPIO24 初始化为空闲态 1
[2026-08-21 15:58:59.600][000000000.332] I/user.exair153x_wdt 首次喂狗
[2026-08-21 15:58:59.608][000000000.332] I/user.exair153x_wdt 初始化成功: GPIO24, 脉冲=250ms, 周期=180s
[2026-08-21 15:58:59.618][000000000.332] I/user.wdt_demo 看门狗已初始化
[2026-08-21 15:58:59.626][000000000.332] I/user.wdt_demo 等待10秒后触发强制复位...
[2026-08-21 15:59:08.911][000000010.333] I/user.wdt_demo 触发强制复位!
[2026-08-21 15:59:08.914][000000010.334] W/user.exair153x_wdt 开始 3 次快速脉冲,触发芯片强制硬件复位
[2026-08-21 15:59:09.697] 工具提示: diag com USB 断开连接 COM6 CommError,[WinError 22] 设备不识别此命令。
[2026-08-21 15:59:10.980] 工具提示: soc log port COM4打开成功
[2026-08-21 15:59:11.075] 工具提示: ap log port COM6打开成功
[2026-08-21 15:59:11.078] 工具提示: 用户虚拟串口 COM5
[2026-08-21 15:59:12.022][000000000.000] main_entry 708:SDK base line V017_p001.026
[2026-08-21 15:59:12.026][000000000.007] am_service_init 1374:Air780EPM_A11
[2026-08-21 15:59:12.032][000000000.007] am_get_chip_type 870:6bef6,8,4,11,8,EC718PM
[2026-08-21 15:59:12.036][000000000.007] am_service_init 1382:APB MP 102400000
[2026-08-21 15:59:12.044][000000000.048] bsp_user_init_io 400:io volt 3.3v
[2026-08-21 15:59:12.074][000000000.049] BSP_CustomInit 558:hardfault mode init 4
[2026-08-21 15:59:12.088][000000000.049] Uart_ChangeBR 1461:uart0, 6000000 6028985 26000000 69
[2026-08-21 15:59:12.101][000000000.070] I/pm poweron: Power/Reset
[2026-08-21 15:59:12.110][000000000.070] luat_pm_get_poweron_reason 332:ap 2, cp 2
[2026-08-21 15:59:12.114][000000000.070] I/pm poweron reason: 0 0 5
[2026-08-21 15:59:12.121][000000000.186] self_info 125:model Air780EPM_A11 imei 864317085627837 dbversion 0x74e6478d
[2026-08-21 15:59:12.128][000000000.186] self_info 127:firmware[1] BASIC fs 168kbyte script 256kbyte
[2026-08-21 15:59:12.135][000000000.186] I/main LuatOS@Air780EPM base 26.04 bsp V2048 64bit
[2026-08-21 15:59:12.144][000000000.186] I/main ROM Build: Aug 3 2026 20:26:39
[2026-08-21 15:59:12.151][000000000.188] W/pins /luadb/pins_air780epm.json not exist!!
[2026-08-21 15:59:12.156][000000000.190] D/main loadlibs luavm 1048568 15712 16776
[2026-08-21 15:59:12.167][000000000.191] D/main loadlibs sys 2369808 82836 89356
[2026-08-21 15:59:12.176][000000000.191] D/main loadlibs psram 2369808 82836 89356
[2026-08-21 15:59:12.184][000000000.208] I/user.main wdt_DEMO 001.999.000
[2026-08-21 15:59:12.191][000000000.220] D/user.exair153x_wdt version -> 202608030000
[2026-08-21 15:59:12.199][000000000.221] I/user.wdt_demo Air153C/Air153D外部看门狗演示 v202608030000
[2026-08-21 15:59:12.218][000000000.222] I/user.wdt_demo 当前模式: force_reset
[2026-08-21 15:59:12.235][000000000.222] I/user.wdt_demo 模式2:强制复位模式启动
[2026-08-21 15:59:12.245][000000000.222] I/user.exair153x_wdt GPIO24 初始化为空闲态 1
[2026-08-21 15:59:12.256][000000000.223] I/user.exair153x_wdt 首次喂狗
[2026-08-21 15:59:12.265][000000000.223] I/user.exair153x_wdt 初始化成功: GPIO24, 脉冲=250ms, 周期=180s
[2026-08-21 15:59:12.283][000000000.223] I/user.wdt_demo 看门狗已初始化
[2026-08-21 15:59:12.294][000000000.224] I/user.wdt_demo 等待10秒后触发强制复位...
```
- no_feed模式演示
设置 DEMO_MODE = "no_feed" 烧录并运行脚本
程序运行后会显示以下典型日志:
```
[2026-08-21 16:08:35.041][000000000.209] I/user.main wdt_DEMO 001.999.000
[2026-08-21 16:08:35.046][000000000.222] D/user.exair153x_wdt version -> 202608030000
[2026-08-21 16:08:35.052][000000000.223] I/user.wdt_demo Air153C/Air153D外部看门狗演示 v202608030000
[2026-08-21 16:08:35.059][000000000.223] I/user.wdt_demo 当前模式: no_feed
[2026-08-21 16:08:35.064][000000000.223] I/user.wdt_demo 模式3:无喂狗模式启动
[2026-08-21 16:08:35.071][000000000.224] I/user.wdt_demo 不初始化看门狗,等待看门狗超时自动复位
[2026-08-21 16:08:35.080][000000000.224] I/user.wdt_demo 超时时间取决于Air153C/Air153D芯片的硬件配置
[2026-08-21 16:08:35.087][000000000.224] I/user.wdt_demo 运行中... 第1次循环(无喂狗)
[2026-08-21 16:08:43.635][000000010.225] I/user.wdt_demo 运行中... 第2次循环(无喂狗)
[2026-08-21 16:08:53.634][000000020.226] I/user.wdt_demo 运行中... 第3次循环(无喂狗)
[2026-08-21 16:09:03.627][000000030.226] I/user.wdt_demo 运行中... 第4次循环(无喂狗)
[2026-08-21 16:09:13.629][000000040.226] I/user.wdt_demo 运行中... 第5次循环(无喂狗)
[2026-08-21 16:09:23.628][000000050.226] I/user.wdt_demo 运行中... 第6次循环(无喂狗)
[2026-08-21 16:09:33.630][000000060.226] I/user.wdt_demo 运行中... 第7次循环(无喂狗)
[2026-08-21 16:09:43.626][000000070.226] I/user.wdt_demo 运行中... 第8次循环(无喂狗)
[2026-08-21 16:09:53.633][000000080.226] I/user.wdt_demo 运行中... 第9次循环(无喂狗)
[2026-08-21 16:10:03.632][000000090.226] I/user.wdt_demo 运行中... 第10次循环(无喂狗)
[2026-08-21 16:10:13.638][000000100.226] I/user.wdt_demo 运行中... 第11次循环(无喂狗)
[2026-08-21 16:10:23.628][000000110.226] I/user.wdt_demo 运行中... 第12次循环(无喂狗)
[2026-08-21 16:10:33.629][000000120.226] I/user.wdt_demo 运行中... 第13次循环(无喂狗)
[2026-08-21 16:10:43.630][000000130.226] I/user.wdt_demo 运行中... 第14次循环(无喂狗)
[2026-08-21 16:10:53.633][000000140.226] I/user.wdt_demo 运行中... 第15次循环(无喂狗)
[2026-08-21 16:11:03.631][000000150.226] I/user.wdt_demo 运行中... 第16次循环(无喂狗)
[2026-08-21 16:11:13.627][000000160.226] I/user.wdt_demo 运行中... 第17次循环(无喂狗)
[2026-08-21 16:11:23.630][000000170.226] I/user.wdt_demo 运行中... 第18次循环(无喂狗)
[2026-08-21 16:11:33.633][000000180.226] I/user.wdt_demo 运行中... 第19次循环(无喂狗)
[2026-08-21 16:11:43.637][000000190.226] I/user.wdt_demo 运行中... 第20次循环(无喂狗)
[2026-08-21 16:11:53.635][000000200.226] I/user.wdt_demo 运行中... 第21次循环(无喂狗)
[2026-08-21 16:12:03.634][000000210.226] I/user.wdt_demo 运行中... 第22次循环(无喂狗)
[2026-08-21 16:12:10.737] 工具提示: print com USB 断开连接 COM4 CommError,[WinError 22] 设备不识别此命令。
[2026-08-21 16:12:11.988] 工具提示: soc log port COM4打开成功
[2026-08-21 16:12:12.087] 工具提示: ap log port COM6打开成功
[2026-08-21 16:12:12.099] 工具提示: 用户虚拟串口 COM5
[2026-08-21 16:12:13.039][000000000.000] main_entry 708:SDK base line V017_p001.026
[2026-08-21 16:12:13.054][000000000.007] am_service_init 1374:Air780EPM_A11
[2026-08-21 16:12:13.069][000000000.007] am_get_chip_type 870:6bef6,8,4,11,8,EC718PM
[2026-08-21 16:12:13.080][000000000.007] am_service_init 1382:APB MP 102400000
[2026-08-21 16:12:13.088][000000000.048] bsp_user_init_io 400:io volt 3.3v
[2026-08-21 16:12:13.097][000000000.049] BSP_CustomInit 558:hardfault mode init 4
[2026-08-21 16:12:13.101][000000000.049] Uart_ChangeBR 1461:uart0, 6000000 6028985 26000000 69
[2026-08-21 16:12:13.106][000000000.070] I/pm poweron: Power/Reset
[2026-08-21 16:12:13.111][000000000.070] luat_pm_get_poweron_reason 332:ap 2, cp 2
[2026-08-21 16:12:13.114][000000000.070] I/pm poweron reason: 0 0 5
[2026-08-21 16:12:13.117][000000000.186] self_info 125:model Air780EPM_A11 imei 864317085627837 dbversion 0x74e6478d
[2026-08-21 16:12:13.119][000000000.186] self_info 127:firmware[1] BASIC fs 168kbyte script 256kbyte
[2026-08-21 16:12:13.122][000000000.186] I/main LuatOS@Air780EPM base 26.04 bsp V2048 64bit
[2026-08-21 16:12:13.124][000000000.186] I/main ROM Build: Aug 3 2026 20:26:39
[2026-08-21 16:12:13.126][000000000.188] W/pins /luadb/pins_air780epm.json not exist!!
[2026-08-21 16:12:13.128][000000000.190] D/main loadlibs luavm 1048568 15712 16776
[2026-08-21 16:12:13.131][000000000.190] D/main loadlibs sys 2369808 82836 89356
[2026-08-21 16:12:13.134][000000000.191] D/main loadlibs psram 2369808 82836 89356
[2026-08-21 16:12:13.139][000000000.208] I/user.main wdt_DEMO 001.999.000
[2026-08-21 16:12:13.142][000000000.220] D/user.exair153x_wdt version -> 202608030000
[2026-08-21 16:12:13.145][000000000.221] I/user.wdt_demo Air153C/Air153D外部看门狗演示 v202608030000
[2026-08-21 16:12:13.148][000000000.222] I/user.wdt_demo 当前模式: no_feed
[2026-08-21 16:12:13.152][000000000.222] I/user.wdt_demo 模式3:无喂狗模式启动
[2026-08-21 16:12:13.156][000000000.222] I/user.wdt_demo 不初始化看门狗,等待看门狗超时自动复位
[2026-08-21 16:12:13.160][000000000.222] I/user.wdt_demo 超时时间取决于Air153C/Air153D芯片的硬件配置
[2026-08-21 16:12:13.163][000000000.222] I/user.wdt_demo 运行中... 第1次循环(无喂狗)
```