1 复位源
Zynq soc有多种复位源
1.1 上电复位 (PS_POR_B)
上电复位由外部输入引脚检测。
PS支持外部上电复位信号。上电复位是整个芯片的主复位。
PS_POR_B信号通常连接到来自电源的power-good信号。当PS_POR_B信号取消后,系统对引导模式引脚进行采样,并开始其内部初始化过程。
上电复位之后的启动流程如下:
只有上电复位才会采样BOOT MODE引脚。
1.2 外部系统复位(PS_SRST_B)
外部系统复位由外部输入引脚检测。
上电复位清除所有调试配置。外部系统复位允许用户在不干扰调试环境的情况下复位设备内的所有功能逻辑。
例如,用户先前设置的断点在外部系统重置后仍然有效。
系统复位会擦除PS中的所有内存内容,包括OCM。PL也在系统复位中被复位。
系统复位不会重新采样引导模式引脚。
1.3 系统软件复位(System Software Reset)
除了外部引脚输入复位,用户可以通过软件复位来复位整个系统。
通过寄存器控制PSS_RST_CTRL[SOFT_RST],可以复位整个系统,最终结果与用户按PS_SRST_B引脚相同(除了REBOOT_STATUS寄存器值不同)。
就像其他系统复位一样,所有ram都被清除,PL也被重置。
1.4 看门狗定时器复位(Watchdog Timer Reset)
当看门狗计时器被启用并且计时器到期时,看门狗计时器复位由看门狗计时器在内部生成。
PS中有三个不同的看门狗计时器:
- CPU0看门狗(AWDT0),可以复位CPU0,或整个系统
- CPU1看门狗(AWDT1),可以复位CPU1,或整个系统
- 系统级看门狗计时器 (SWDT) ,复位整个系统
1.5 安全违规复位(Secure Violation Lock Down)
安全违规复位发生在安全启动失败的时候,安全启动涉及到加密授权这一部分的校验,如果校验失败则触发安全违规复位。
安全违规复位发生之后,只能通过上电复位来取消。
1.6 调试复位(Debug Reset)
debug复位发生在系统debug过程中,包括两种:
- System Debug Reset,是来自Arm DAP的命令,由JTAG控制。这导致系统复位,就像外部系统复位。
- Debug Reset,复位SoC调试块的某些部分,包括JTAG逻辑。
2 复位影响
复位名 | 触发源 | 被复位的系统组件 | RAM是否被清除 | REBOOT_STATUS寄存器被置1的Bits |
上电复位PS_POR_B | pin | 整个芯片,包括调试(全部) PL必须重新编程 | ALL | |
安全违规复位(要求上电复位才恢复) | 设备配置接口(DevC) | ALL | ||
外部系统复位PS_SRST_B | pin | 除调试和持久性寄存器外的所有寄存器。PL必须重新编程。 | ALL | |
系统软件复位 | 系统级控制寄存器(SLCR) | ALL | ||
System Debug 复位 | JTAG | ALL | ||
系统看门狗复位 | SWDT | ALL | ||
CPU0,CPU1私有看门狗复位(当RS_AWDT_CTRL{1,0}=0) | AWDT | ALL | ||
CPU0,CPU1私有看门狗复位(当RS_AWDT_CTRL{1,0}=1) | AWDT | 只复位对应的CPU | Nome | |
Debug 复位 | JTAG | Debug逻辑 | None | |
外设独立复位 | 系统级控制寄存器(SLCR) | 复位SLCR寄存器指定的外设 | None |
3 Persistent寄存器
上电复位时,所有的寄存器都被重置。
除上电复位(外部系统复位,软件复位,看门狗复位等)时,有一些寄存器和寄存器bits不会被重置。
- slcr.REBOOT_STATUS寄存器记录了系统复位的类型,只要不断电,每次复位都会置位相应的bit。
- devcfg.MULTIBOOT_ADDR寄存器的高16bit,是用户自定义的,可读写区域,可以用来存储用户数据,非上电复位的复位都不会清空这16bit,可以用来在多次复位中传递信息。
4 REBOOT_STATUS寄存器,复位状态检测
- 上电复位:0x00400000
- 上电之后,reboot指令重启复位:0x00480000
- 上电之后,软件看门狗复位:0x00410000
- 上电之后,reboot指令重启复位之后,软件看门狗复位:0x00490000
多次复位,不会清除之前设置的bit。所以如果出现了多次不同来源的非上电复位,并不能直接从这个寄存器知道最新的一次复位是什么原因(该状态寄存器是可读可写的,可已每次系统起来,读取完这个寄存器后,重新写成默认值,下次重启只保留最新的复位状态信息了)。