最近搞watchdog,差点没搞死,先是喂狗停止后,系统一直卡死,猜测是boot过程中出了问题,因为有网友也遇到过,所以怀疑是spi flash的上电时序慢了,但是虽然怀疑对了,没有办法验证,而且我的spi flash在看门狗重启过程中是不断电的。
然后就看整个reboot过程,上一篇文章写了,当
void kernel_restart_prepare(char *cmd)
{
blocking_notifier_call_chain(&reboot_notifier_list, SYS_RESTART, cmd);
system_state = SYSTEM_RESTART;
usermodehelper_disable();
device_shutdown();
printk("matt-kernel_restart\n");
__raw_writel(~0, IO_ADDRESS(0x20050004)); //当全局软复位放到这个之前,就会出类似的情况,这个现象对我产生了干扰
syscore_shutdown();
}
hi3516a一共三种复位,por上电复位和rtsn硬件管脚复位,这个看POR_SEL ,我这边的POR_SEL
是低电平也就是全部都是上电复位的。然后看看门狗的输出WDG_RSTN
这个在spec178页写了可以复用,当POR_SEL =0的时候是
SYS_RSTN_OUT |
这个功能
这个功能在spec64页写了
功能 1: SYS_RSTN_OUT 系统复位输出,复位有效时间约 为 130ms。 0:复位; |
最重要的是没有看Hi3516A/Hi3516D 硬件设计用户指南.pdf的11页
当 POR_SEL 为低电平时,选择内部复位,主芯片上电后由内部 POR(Power on
Reset)电路对整个芯片进行复位(复位脉冲宽度约为 130ms),此时 RSTN 管脚无
效;当选择内部复位时, RSTN 管脚可悬空处理。
选择内部复位时,为确保系统能正常启动,小系统相关的外设(例如:存放 boot
的 flash 器件)必须先于 Hi3516A 释放复位信号,或同时与 Hi3516A 一起释放复
位信号,否则可能会出现无法启动等异常情况。
我就是没有复位flash导致的所以最后的原因就是这个电阻没上导致