1.概述
PMIC作为系统的电源管理模块,其输入电压一般会比较高,为保证芯片自身的安全,PMIC芯片会有独立的安全域,和功能域完全隔离,拥有独立的电压和电流输入,独立的晶振模块,内部运行监控状态机,实时监控芯片的运行状况,保障芯片的安全和稳定运行,故障安全域需要满足QM、ASIL B或ASIL D级别的功能安全等级。
2.解决的问题
PMIC的安全域,主要作用是监控系统运行、系统故障恢复,系统运行中,随时可能出现过压、欠压、程序跑飞等各种问题,PMIC的安全域正是为了解决这些问题而发明的,当系统出现这些故障,要根据故障级别,执行对应的故障恢复策略。
下面以VR5510进行详细分析。
3.VR5510安全域
3.1 系统框图
3.2 功能模块
1.初始化
VR5510在电源上电复位或从待机模式或深度睡眠模式唤醒后,RSTB引脚被释放,故障安全状态机将进入INIT_FS阶段,为各个寄存器写入值,进行初始化操作。为了确保在INIT_FS期间的写入过程的安全性,MCU必须对所有INIT_FS寄存器执行以下序列操作:
在FS_I_Register_A(DATA)中写入所需的数据,在FS_I_NOT_Register_A(DATA_NOT)中写入FS_I_Register_A数据的一位补码。
例如,如果FS_I_Register_A = 0xABCD,则必须将0x5432(0xABCD的一位补码)写入FS_I_NOT_Register_A。
也就是说,INIT_FS阶段,所有INIT_FS相关的寄存器,都存在寄存器和它的互补寄存器。
VR5510实时计算DATA XOR DATA_NOT的异或结果。如果计算结果为真,则FS_STATES寄存器中的REG_CORRUPT位被设置为0。如果计算结果为假,则REG_CORRUPT位被设置为1。在INIT_FS阶段第一次有效的看门狗刷新而关闭后,REG_CORRUPT的监控立即激活。
INIT_FS必须在看门狗窗口超时之前通过第一次有效的看门狗刷新来关闭。窗口持续时间可以通过WD_INIT_TIMEOUT_OTP[1:0]位(CFG_2_OTP寄存器)进行编程。
在INIT_FS关闭后,可以通过设置FS_SAFE_IOS寄存器中的GOTO_INITFS位,从任何其他FS_state状态重新进入INIT_FS阶段。
2.看门狗
看门狗有Simple和Challenger两种类型,都是带有窗口的监控。窗口的第一部分被称为“CLOSED”窗口,而第二部分被称为“OPEN”窗口。
在“OPEN”窗口期间进行的正确看门狗响应被视为好的看门狗刷新。而坏的看门狗刷新则包括以下几种情况:在“OPEN”窗口期间进行的错误看门狗响应、在“OPEN”窗口期间没有进行任何看门狗刷新,或者在“CLOSED”窗口期间进行了正确的看门狗响应。
无论是好的还是坏的看门狗刷新之后,都会立即开始一个新的窗口周期,以确保微控制器(MCU)与带窗口的看门狗保持同步。
首次成功的看门狗刷新会关闭INIT_FS。看门狗窗口继续运行,MCU必须在看门狗窗口周期的“OPEN”窗口内刷新看门狗。看门狗窗口的持续时间可以通过FS_WD_WINDOW寄存器中的WD_WINDOW[3:0]位进行配置,范围从1毫秒到1024毫秒。新的看门狗窗口设置将在下一次看门狗刷新后生效。
看门狗窗口只能在INIT_FS阶段被禁用。一旦INIT_FS阶段关闭,看门狗禁用的操作才会生效。在INIT_FS阶段结束后,如果看门狗窗口被禁用,它将不再监控MCU的运行状态,将无法恢复MCU故障。
Simple看门狗使用了一个独特的种子值。微控制器(MCU)可以将自己的种子值发送到WD_SEED位字段(FS_WD_SEED寄存器)中,或者它可以使用默认值0x5AB2。这个种子值必须在OPEN看门狗窗口期间写入到WD_ANSWER位字段(FS_WD_ANSWER寄存器)中。当结果正确时,看门狗窗口会重新启动。如果结果不正确,WD错误计数器会增加,并且看门狗窗口也会重新启动。
在Simple看门狗配置中,不能将0xFFFF和0x0000的值写入WD_SEED。如果尝试写入0x0000或0xFFFF,则会报告通信错误。这是因为这些值可能被看门狗机制用作特殊标记或保留值,以防止意外的配置错误。因此,在配置Simple看门狗时,应确保使用有效的种子值,并遵循看门狗机制的规定来刷新看门狗,以确保系统的稳定运行。
Challenger看门狗是基于VR5510和微控制器(MCU)之间的问答交互机制。在INIT_FS阶段,VR5510使用线性反馈移位寄存器(LFSR)来生成一个16位的伪随机数。
MCU可以发送一个不同的LFSR种子,或者使用VR5510默认的LFSR值(0x5AB2)来执行一个预定义的计算。计算结果在OPEN看门狗窗口期间通过I2C接口发送,并由VR5510进行验证。当结果正确时,看门狗窗口会重新启动,并生成一个新的LFSR值。如果结果错误,WD错误计数器会增加,看门狗窗口会重新启动,但LFSR值不会改变。
在初始化阶段(INIT_FS),MCU发送LFSR的种子,或者使用VR5510生成的默认LFSR值(0x5AB2),该值存储在WD_SEED寄存器中。使用此LFSR,MCU根据以下公式执行一个简单的计算,并将结果发送到WD_ANSWER寄存器中。
通过这种方式,Challenger看门狗提供了一种比Simple看门狗更高级别的保护,可以防止未经授权的访问或篡改。如果MCU在OPEN窗口期间无法提供正确的答案,那么看门狗会认为系统可能出现了故障,并采取相应的恢复措施,如重启MCU。
看门狗错误策略适用于Challenger看门狗和Simple看门狗。设备中实现了看门狗错误计数器,用于过滤不正确的看门狗刷新。每次发生看门狗失败时,设备会将计数器增加2。每当看门狗被正确刷新时,错误计数器就会减少1。这一原则确保了循环的“OK/NOK”行为最终会收敛到故障检测上。
为了在应用中提供灵活性,在INIT_FS阶段,可以通过FS_I_WD_CFG寄存器中的WD_ERR_LIMIT[1:0]位字段来配置看门狗错误计数器的最大值。这样,开发者可以根据具体的应用场景和需求,设置合适的错误计数阈值,以便在检测到一定数量的错误后采取相应的恢复措施。
MCU故障恢复
当MCU通过其FCCU(故障捕获和纠正单元)引脚触发故障时,设备会激活FS0B引脚,并将看门狗窗口的持续时间自动转换为一个开放窗口状态,即在此期间不再受原有的占空比限制。这个开放窗口的持续时间在INIT_FS(故障安全初始化)阶段可以通过FS_WD_WINDOW寄存器中的WDW_RECOVERY[3:0]位字段进行配置。
3.FCCU监控
FCCU(故障捕获和纠正单元)的负责监测来自MCU的硬件故障。这些输入引脚可以按对配置,也可以作为单独独立的输入。一旦INIT_FS通过第一个有效的看门狗刷新信号关闭,FCCU的监测功能就会立即激活。
4.电压监视器
负责监测VCOREMON、HVLDO、VDDIO以及VMON1/2/3/4输入引脚上的过压和欠压情况。当这些引脚中任何发生过压时,相关的稳压器将被关闭,直到故障被清除。电压监测功能在FS_ENABLE=1时立即激活。故障发生时,会报告欠压(UV)和过压(OV)标志。
电压监视器能够实时地检测和处理电源供应中的异常情况,从而保护微控制器和其他敏感电路免受损坏。当检测到过压或欠压时,电压监视器可以通过关闭受影响的稳压器来防止进一步的损害,并等待故障被修复后再重新启用稳压器。同时,通过报告UV/OV标志,VR5510还可以向MCU提供关于电源状态的信息,以便MCU处理故障。
5.故障管理
R5510集成了一个可配置的故障错误计数器,用于统计与设备本身相关的故障数以及与外部事件相关的故障数,包括过压、欠压、FCCU、看门狗刷新错误。故障错误计数器具有两个输出值:中间值和最终值。中间值可以根据FS_I_FSSM寄存器中FLT_ERR_IMPACT[1:0]位字段的配置,用于强制激活FS0B(故障安全信号0)或生成RSTB(复位信号)脉冲。
当故障错误计数器记录到中间值时,系统可以根据FLT_ERR_IMPACT[1:0]的设置来决定是触发FS0B以启动故障安全机制,还是发送RSTB脉冲来复位系统。
在正常工作状态下,当FS0B和RSTB被释放时,如果VR5510的故障安全状态机检测到故障,则故障错误计数器会增加。如果未将故障配置为断言RSTB和FS0B,则不会增加故障错误计数器的值。在这种情况下,仅提供标志供微控制器(MCU)进行诊断。
6.引脚说明
三个安全输出引脚(PGOOD、RSTB、FS0B)在层次上被赋予了优先级,以确保系统能够安全地达到稳定状态。
PGOOD(电源良好)具有最高优先级(一级)。如果PGOOD被断言(即电源良好信号被激活),则RSTB和FS0B也会被断言。
RSTB(复位)具有次高优先级(二级)。如果RSTB被断言,FS0B也会被断言,但PGOOD可能不被断言。
FS0B(故障安全)具有最低优先级(三级)。如果FS0B被断言,RSTB和PGOOD可能不被断言。
STBY 引脚,可以在应用中连接到 MCU。STBY(待机)输入引脚的极性可以通过 STBY_POLARITY_OTP 位(CFG_DEVID_OTP 寄存器)进行配置,以选择是在待机模式下高电平有效/正常模式下低电平有效,还是在待机模式下低电平有效/正常模式下高电平有效。
STBY 功能通过 STBY_EN_OTP 位(CFG_2_OTP 寄存器)启用。
进入待机模式有两种可能的路径,这取决于 STBY_SAFE_DIS_OTP 位(CFG_2_OTP 寄存器)的设置:
标准路径:仅使用 STBY 引脚的电平变化。
安全路径:使用 I2C 请求(FS_SAFE_IOS 寄存器中的 STBY_REQ 位)以及 STBY 引脚的电平变化。
7.自测试
故障安全状态机包含一个逻辑内置自测试(LBIST),用于验证安全逻辑监控的正确功能。LBIST 在每次上电复位(POR)之后,或者在每次从待机模式唤醒后进行。如果 LBIST 失败,RSTB 和 PGOOD 会被释放,但 FS0B 会保持在低电平状态并且无法被释放。
故障安全状态机包括两个模拟内置自测试(ABIST),用于验证安全模拟监控的正确功能。
ABIST1 在每次上电复位(POR)之后,或者在每次从待机模式唤醒后自动执行。在 ABIST1 期间,要检查的稳压器的分配是通过 OTP(一次性可编程存储器)完成的。
ABIST2 是在 INIT_FS 阶段之后通过 I2C 使用 Vxxx_ABIST2 位(FS_I_ABIST2_CTRL 寄存器)来执行的。
如果 ABIST 失败(无论是 ABIST1 还是 ABIST2),RSTB 和 PGOOD 会被释放,但 FS0B 会保持在低电平状态并且无法被释放。这表示系统已进入故障安全状态,以防止在不安全条件下继续运行。
5.总结
本文对PMIC的安全策略进行了讲解,拿VR5510进行具体分析,其他PMIC芯片也是类似的原理。
本文的实操,已在github公开,需要深入研究的自取。
https://github.com/sydyg/Vehicle_Soft_Class.git