RK3588 外部硬件看门狗完整实现:从原理图到代码落地

电子说

1.4w人已加入

描述

在嵌入式系统尤其是工业级应用中,系统稳定性是第一优先级。即使是经过严格测试的软件,也可能在复杂的现场环境中出现死锁、崩溃或跑飞的情况。此时,看门狗(Watchdog)就成为了最后一道防线,能够在系统异常时自动复位,确保设备 24 小时不间断运行。

瑞芯微 RK3588 虽然内置了硬件看门狗,但在某些高可靠性场景下,外部独立看门狗芯片仍然是更优选择。本文将结合实际原理图和完整代码,详细讲解如何在 RK3588 平台上实现基于 SGM819/TPV710 的外部硬件看门狗。

看门狗

一、为什么选择外部看门狗?

很多开发者会问:RK3588 已经有内置看门狗了,为什么还要额外加外部芯片?主要有以下三个核心原因:

1.独立性更强:内置看门狗与 CPU 共享时钟和电源,当 CPU 时钟异常或电源波动时,内置看门狗可能同时失效;而外部看门狗是独立的芯片,不受 CPU 内部状态影响。

2.可靠性更高:外部看门狗芯片经过专门的工业级设计,工作温度范围更广,抗干扰能力更强,适合恶劣的工业环境。

3.复位更彻底:外部看门狗直接控制系统复位引脚,能够实现真正的硬件级全系统复位,包括 CPU、内存和所有外设,避免部分模块未复位导致的残留问题。

二、硬件原理图详解

本次设计采用的是SGM819S-DBQN5G/TR(兼容 TPV710NYQ-S5TRS)看门狗芯片,这是一款低功耗、高精度的硬件看门狗,采用 SOT-23-5 封装,非常适合嵌入式系统使用。

2.1 芯片引脚功能

引脚号 名称 功能说明
1 WDO/ 看门狗输出,低电平有效,超时后输出复位信号
2 GND
3 EN/ 使能引脚,低电平有效,拉低时看门狗工作
4 WDI 喂狗输入引脚,需要定期翻转电平
5 VCC 电源输入,支持 1.6V~5.5V 宽电压范围

2.2 关键电路连接分析

1.电源电路:VCC 引脚通过 0Ω 电阻 R91114 连接到 VCC_1V8_S3 电源,同时并联 10μF 滤波电容 C10080,确保电源稳定。

2.使能电路:EN / 引脚通过 22Ω 电阻 R91112 连接到 RK3588 的 DWG_EN 引脚。在本设计中,我们将 EN / 引脚直接使能,看门狗在上电后立即开始工作。

3.喂狗电路:WDI 引脚通过 22Ω 电阻 R91113 连接到 RK3588 的 WDG_DI 引脚(对应 GPIO8)。CPU 需要定期向该引脚输出高低电平翻转信号,否则看门狗会超时复位。

4.复位输出电路:WDO / 引脚通过 100Ω 电阻 R91111 连接到系统复位信号 RESET_L,同时与手动复位按键 SW11 并联。当看门狗超时或按下复位按键时,都会产生低电平复位信号。

2.3 重要参数说明

SGM819S-DBQN5G 的固定超时时间为 1.6 秒。这意味着 CPU 必须在 1.6 秒内至少翻转一次 WDI 引脚的电平,否则看门狗就会输出复位信号。

三、软件实现方案

根据硬件设计,我们需要在 Debian 12 系统中实现一个后台服务,定期翻转 GPIO8 的电平,完成喂狗操作。

3.1 喂狗脚本实现

创建/etc/init.d/gpio_watchdog.sh脚本,实现 GPIO 初始化和无限循环喂狗功能:

 

#!/bin/bash# 看门狗喂狗脚本:GPIO8 每4秒高低电平切换# 适用系统:Debian 12# 作者:嵌入式技术笔记# GPIO引脚编号(根据实际硬件修改)GPIO_PIN=8GPIO_PATH="/sys/class/gpio/gpio$GPIO_PIN"# 1. 初始化GPIO:如果未导出,则导出并设置为输出模式if [ ! -d "$GPIO_PATH" ]; then    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 正在导出 GPIO$GPIO_PIN..."    echo $GPIO_PIN > /sys/class/gpio/export    sleep 0.1fi# 设置GPIO方向为输出echo "[$(date '+%Y-%m-%d %H:%M:%S')] 设置 GPIO$GPIO_PIN 为输出模式"echo "out" > $GPIO_PATH/direction# 2. 无限循环喂狗(4秒一个周期,确保在1.6秒超时前完成翻转)echo "[$(date '+%Y-%m-%d %H:%M:%S')] GPIO看门狗服务启动成功,开始喂狗"while true; do    # 拉高电平    echo 1 > $GPIO_PATH/value    sleep 2    # 拉低电平    echo 0 > $GPIO_PATH/value    sleep 2done

 

关键说明

•我们采用2 秒高 + 2 秒低的周期,远小于 1.6 秒的超时时间,留有充足的余量

•使用 sysfs 接口操作 GPIO,兼容性好,不需要额外安装驱动

•脚本添加了时间戳日志,方便排查问题

3.2 Systemd 服务配置

为了让喂狗脚本开机自启并在异常退出时自动重启,我们创建一个 systemd 服务文件/etc/systemd/system/gpio-watchdog.service:

 

[Unit]Description=GPIO8 Watchdog Feeding ServiceAfter=basic.target[Service]Type=simpleExecStart=/etc/init.d/gpio_watchdog.shRestart=alwaysRestartSec=1User=rootGroup=root[Install]WantedBy=multi-user.target

 

服务参数说明

•Restart=always:无论脚本因何种原因退出,都会自动重启

•RestartSec=1:退出后 1 秒立即重启,最大限度缩短无喂狗时间

•User=root:必须以 root 用户运行,否则无法操作 GPIO

3.3 根文件系统集成

在构建 Debian 根文件系统时,将上述两个文件添加到 overlay 目录,并在mk-debian-rootfs-patch.sh中添加开机自启命令:

 

# 在chroot环境中执行systemctl enable gpio-watchdog

 

这样,在系统烧录完成后,看门狗服务会自动启动。

四、完整工作流程

1.系统上电:外部看门狗芯片 SGM819 同时上电,EN / 引脚使能,看门狗开始计时

2.系统启动:RK3588 启动 Linux 内核,加载必要的驱动

3.服务启动:系统进入多用户模式后,gpio-watchdog.service 自动启动

4.开始喂狗:脚本初始化 GPIO8 为输出模式,开始每 4 秒一次的电平翻转

5.正常运行:只要系统正常工作,喂狗操作就会持续进行,看门狗不会超时

6.系统异常:如果系统死锁、崩溃或脚本异常退出,喂狗操作停止

7.超时复位:1.6 秒后,看门狗检测到 WDI 引脚没有电平变化,输出低电平复位信号

8.系统重启:整个系统硬件复位,重新开始启动流程

五、看门狗功能测试

为了确保看门狗正常工作,我们需要进行以下测试:

5.1 服务状态检查

 

# 查看服务状态systemctl status gpio-watchdog# 查看服务日志journalctl -u gpio-watchdog -f

 

如果服务正常运行,应该能看到 "GPIO 看门狗服务启动成功,开始喂狗" 的日志。

5.2 手动停止服务测试

 

# 停止看门狗服务systemctl stop gpio-watchdog

 

正常情况下,1.6 秒后系统会自动复位。如果系统没有复位,说明硬件连接或看门狗芯片有问题。

5.3 系统死锁模拟测试

编写一个简单的死循环程序,占用 100% CPU,模拟系统死锁:

 

#include int main() {    while(1);    return 0;}

 

编译并运行:

 

gcc -o deadlock deadlock.c./deadlock &

 

观察系统是否会在一段时间后自动复位。

六、注意事项与优化建议

1.喂狗周期选择:喂狗周期必须小于看门狗超时时间,建议留至少 50% 的余量。本设计中 1.6 秒超时,使用 2 秒翻转一次是安全的。

2.GPIO 引脚选择:选择系统启动过程中不会被其他外设占用的 GPIO 引脚,避免启动过程中误触发复位。

3.服务优先级:将看门狗服务设置为较高优先级,确保在系统负载较高时也能及时喂狗。

4.电源稳定性:看门狗芯片的电源必须稳定,建议增加滤波电容,避免电源波动导致误复位。

5.双重看门狗:在极高可靠性要求的场景中,可以同时使用内置看门狗和外部看门狗,形成双重保护。

七、总结

本文详细介绍了在 RK3588 平台上实现外部硬件看门狗的完整方案,从硬件原理图分析到软件代码实现,再到功能测试,覆盖了整个开发流程。

外部看门狗虽然增加了一点硬件成本,但带来的可靠性提升是巨大的。对于工业控制、智能网关、车载设备等不能容忍停机的应用场景,外部看门狗是必不可少的组件。

希望本文能够帮助正在使用 RK3588 进行产品开发的工程师们,快速实现稳定可靠的看门狗功能,提升产品的整体质量。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分