4、复位系统故障:POR上电复位异常、外部复位按键失效、看门狗复位异常、复位信号毛刺
复位系统,说白了就是芯片的「重启按钮」。它要是出了问题,整个板子就别想正常干活。我这些年经手的瑞芯微项目,至少有三成硬件故障跟复位相关。你想想看,芯片上电后第一件事就是复位,这一步都走不稳,后面跑系统、挂外设全是白搭。
今天咱们就掰开揉碎,把复位系统最常见的四类故障讲清楚。嗯,这四类我全踩过坑,有些甚至让我熬了好几个通宵。
4.1 POR上电复位异常
POR(Power-On Reset)是芯片上电时的「第一口气」。瑞芯微芯片内部有个POR电路,它会监测VCC_IO(通常是3.3V或1.8V)的上升斜率。如果电压爬得太慢,或者中间有抖动,POR就可能不触发,或者触发不完全。
典型现象:上电后芯片没反应,电流很小,或者偶尔能启动、偶尔不能。
排查思路:
- 用示波器抓VCC_IO的上升波形。我个人习惯用DC耦合,时基设在10ms/div,看从10%到90%的时间。
- 瑞芯微官方要求VCC_IO上升时间在0.1ms~100ms之间。太快或太慢都不行。
- 检查电源的软启动电容。有些LDO的软启动时间太长,会导致POR失效。
关键点:POR不是简单的「电压到了就复位结束」。它需要电压稳定后,内部延时一段时间(通常是几十微秒到几毫秒)才释放复位。这个延时由芯片内部的RC振荡器决定,外部无法调整。
我在项目中遇到过:有一款RK3568的板子,上电后大约30%的概率起不来。查了两天,最后发现是PMIC的PG(Power Good)信号没接对。PG信号应该连到芯片的NRST引脚,但设计时漏了,导致POR时序完全乱掉。加上一个10kΩ上拉电阻到3.3V,问题解决。
4.2 外部复位按键失效
外部复位按键,就是板子上那个小按钮。按下去,系统重启。听起来简单,但失效的情况我见过不少。
常见原因:
- 按键接触不良,氧化或弹片疲劳。
- 去抖电路设计不当。复位信号本身是低电平有效,如果去抖电容太大,按键松开后复位信号恢复太慢,芯片可能误判。
- 上拉电阻阻值不对。瑞芯微的NRST引脚内部有上拉,但很弱(约50kΩ~100kΩ)。外部再加一个10kΩ上拉会更可靠。
排查方法:
- 用万用表测按键两端的电压。不按时应该是高电平(3.3V或1.8V),按下后拉低到0V。
- 用示波器抓按键按下时的波形。看有没有毛刺或抖动。
- 检查去抖电容。我建议用0.1μF,不要超过1μF。
小技巧:如果你发现按键按下后系统重启了,但松开后又死机,那大概率是复位信号恢复太慢。试着减小去抖电容,或者在软件里加一个复位后的延时等待。
我曾经踩过这个坑:一个RK3399的项目,客户反馈说复位按键「时灵时不灵」。我飞线出来抓波形,发现按键按下时复位信号确实拉低了,但松开后有一个大约200ms的缓慢上升沿。芯片在上升沿过程中反复复位了三四次。最后把去抖电容从1μF换成0.1μF,问题消失。
4.3 看门狗复位异常
看门狗(Watchdog)是系统最后的防线。它负责在系统卡死时强制复位。但看门狗本身也可能出问题。
典型场景:
- 系统正常运行,但莫名其妙被看门狗复位了。
- 系统真的卡死了,但看门狗没动作。
- 看门狗复位后,系统无法正常启动。
排查步骤:
- 先确认看门狗是芯片内部的还是外部的。瑞芯微芯片内部有WDT(Watchdog Timer),但有些设计会外挂独立看门狗芯片(如MAX706)。
- 如果是内部WDT,检查软件喂狗的位置。喂狗太频繁或太晚都不行。我建议在主循环里喂一次,在关键中断里再喂一次。
- 如果是外部看门狗,检查WDI(Watchdog Input)引脚的波形。正常时应该有一个连续的脉冲信号。
注意:看门狗复位和POR复位不是一回事。看门狗复位时,芯片内部的某些寄存器可能保持原值。如果你在代码里依赖这些寄存器的默认值,就可能出问题。我习惯在看门狗复位后的初始化代码里,把所有关键寄存器重新配置一遍。
举个例子:RK3588的内部WDT,超时时间可以设置从125ms到16s不等。我一般设成8s,主循环每2s喂一次。这样既不会误触发,也能在系统卡死后快速恢复。
// 瑞芯微内部WDT初始化示例(RK3588)
// 注意:不同芯片的寄存器地址可能不同
void watchdog_init(void)
{
// 使能WDT,设置超时时间为8秒
// 具体寄存器操作请参考芯片手册
writel(0x1234, WDT_CRR); // 喂狗操作
writel(0x5678, WDT_CR); // 配置控制寄存器
}
void watchdog_feed(void)
{
writel(0x1234, WDT_CRR); // 写入固定序列喂狗
}
4.4 复位信号毛刺
复位信号毛刺,是最隐蔽、最难查的故障之一。它可能让系统偶尔重启,或者在某些特定操作下死机。
毛刺来源:
- 电源噪声耦合到复位线上。
- PCB走线过长,形成天线效应。
- 相邻信号线串扰(尤其是时钟线或高速数据线)。
- ESD(静电放电)事件。
诊断方法:
- 用示波器长时间抓取复位信号。我一般设成「正常触发」模式,触发电平设在1.5V(对于3.3V系统),时基用100ms/div,等它触发。
- 如果抓到毛刺,看它的宽度和幅度。宽度小于1μs的毛刺,芯片可能忽略;但大于10μs的毛刺,基本就会触发复位。
- 检查复位信号的上升沿和下降沿。理想的复位信号应该是干净的方波,没有回勾或振荡。
根治方法:
- 在复位引脚上加一个RC低通滤波器。R取1kΩ~10kΩ,C取0.1μF。这样能滤掉大部分窄毛刺。
- 复位走线要短,远离时钟线和电源开关管。
- 如果板子空间允许,加一个复位监控芯片(如MAX809),它内部有去抖和毛刺抑制功能。
我记得最清楚的一次:一个RK3328的项目,客户说「机器运行半小时左右会重启一次」。我抓了整整一天的复位信号,终于抓到一次毛刺。毛刺宽度约50μs,幅度3.3V,看起来像是从旁边的DDR时钟线串扰过来的。最后在复位引脚上加了一个10kΩ+0.1μF的RC滤波,再也没出过问题。
总结一下
复位系统故障,说难也难,说简单也简单。你只要记住三点:
- 看时序:上电复位、按键复位、看门狗复位,都有严格的时序要求。
- 看波形:示波器是你最好的朋友。别偷懒,多抓几次。
- 看设计:复位电路的设计要保守一点。上拉电阻、去抖电容、滤波电路,该加就加。
嗯,这章就到这里。下一章咱们聊聊时钟系统故障。时钟要是乱了,整个系统就跟喝醉了一样,啥怪事都可能发生。