1. 问题背景与硬件分析
最近在调试一块基于RK3568的开发板时,遇到了一个棘手的问题:系统上电后不断自动重启。经过排查,发现问题出在主板上贴装的STM6823SWY6F硬件看门狗芯片上。这个看似简单的问题背后,涉及到硬件看门狗的工作原理和SoC GPIO配置的深层知识。
STM6823SWY6F是一款常见的硬件看门狗芯片,它的WDI(Watchdog Input)引脚有一个关键特性:如果WDI保持高电平或低电平超过1.6秒,内部看门狗定时器就会触发系统复位。只有当WDI检测到上升沿或下降沿,或者复位信号被激活时,看门狗定时器才会被清除。这意味着我们需要特别注意WDI引脚的状态配置。
在实际应用中,如果不需要使用硬件看门狗功能,通常有三种处理方式:
- 将WDI引脚悬空(不推荐,可能引入噪声)
- 连接到三态缓冲器输出
- 将对应的GPIO配置为高阻态(最佳方案)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. RK3568 GPIO子系统解析
2.1 RK3568 GPIO地址映射
RK3568的GPIO控制器采用分组管理方式,每组GPIO都有独立的寄存器组。根据芯片手册,我们需要重点关注以下几个关键信息:
- PMU_GRF基地址:0xFDC20000
- GPIO0_A5的偏移地址:0x0004
- GPIO0_A5的完整地址:0xFDC20004 (基地址+偏移量)
GPIO寄存器主要分为两类:
- 数据寄存器(GPIO_SWPORT_DR)
- 低位寄存器(_L):控制GPIO0A和GPIO0B
- 高位寄存器(_H):控制GPIO0C和GPIO0D
- 方向寄存器(GPIO_SWPORT_DDR)
- 同样分为_L和_H两部分
2.2 GPIO模式配置详解
要将GPIO配置为高阻态,需要正确设置以下几个寄存器位:
- IOMUX配置:选择GPIO功能模式而非复用功能
- 方向寄存器:配置为输入模式
- 上下拉电阻:禁用上下拉
以GPIO0_A5为例,其配置过程如下:
c复制// 设置GPIO0_A5为GPIO模式
writel(0x00700000, 0xfdc20004);
// 设置GPIO为普通操作模式(高阻态)
writel(0x0c000000, 0xfdc20020);
这里需要
