首页/文章/ 详情

PMIC功能安全策略(1)--看门狗

1年前浏览2703

首先了解一下失效安全(Fail safe),是指一个系统失效后特定功能关闭能够让系统维持在安全状态


例如,对于发动机管理系统的避免非预期扭矩输出这个安全目标,可以考虑采用关闭发动机扭矩输出作为安全状态。或者对于L2及以下的自动驾驶系统功能,也通常考虑采用关闭该特定功能作为安全状态


看了好几篇PMIC ISO26262的关于安全机制方面的讲解,对于各部分的描述比较简略,自己做个文档归纳一下。


以下主要比较PMIC ASIL B和ASIL D Fail-safe模式看门狗的两种设置。


1. Simple watchdog  (ASIL B)


看门狗的作用就是防止程序发生死循环或者说程序跑飞。

工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。因此在使用带看门狗的芯片时,要注意清看门狗定时器。

注意:看门狗定时时间要设的大于主程序的运行时间,给主程序留有一定的的裕量。

if  主程序运行完成需10ms, 则喂狗时间需>10ms, 比如12~15ms。



2. Challenger watchdog  (Enhanced ASIL B或ASIL D)


Challenger 看门狗基于MCU的question/answer流程。

在PMIC中通过LFSR(Linear Feedback Shift Register)实现生成16位伪随机字。

MCU可以使用FS85生成的LFSR,并执行预定义的计算。

在看门狗打开窗口期间通过SPI/I²C发送,并由PMIC验证结果。

当结果正确时,将重新启动看门狗程序窗口并生成新的LFSR;

当结果错误时,看门狗错误计数器递增,看门狗窗口重新启动并且LFSR值不会改变。


3. PMIC实例


以FS5600为例,Challenger 看门狗工作流程如下,其他PMIC芯片处理方式大同小异。


首先需要知道什么是窗口看门狗?为什么需要设置窗口?


窗口就是因为其喂狗时间有上下限的范围,你可以通过设定相关寄存器,设定其上限和下限时间,喂狗的时间不能过早也不能过晚。对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗 操作,这样的情况下一般的看门狗就检测不出来了;如果使用窗口看门狗,可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前也不会滞后,这样可以检测出是否跳过了某些程序段的情况。


FS5600提供了Challenger和Simple看门狗

这个Challenger方案仅在增强型ASIL B版本中可用。

看门狗通过设置OTP_WD_DIS=0启用计时器。如果OTP_WD_DIS=1。

当OTP_WD_SELECTION=0时,选择Simple方案。

OTP_WD_SELECTION=1,则选择Challenger方案。

在窗口看门狗中,看门狗持续时间分为OPEN和CLOSE窗口。

窗口的前半部分关闭,窗口的后半部分为OPEN。


打开期间必须进行良好的刷新,以下为错误的看门狗刷新:

• OPEN窗口期间,看门狗Answer错误;

• OPEN窗口期间,无看门狗刷新;

• 在CLOSED窗口期间,看门狗的Answer是Good data 还是 Bad data 。

为了使看门狗刷新被视为有效,必须在正确的时间窗口回复正确的answer,如下图所示。



在好的或坏的看门狗刷新后,一个新的窗口周期立即开始。

当看门狗 Timing 刷新时发生错误,“BAD_WD_TIMING”诊断时会被置 1。

当看门狗 Data 刷新出现错误,“BAD_WD_DATA”诊断时会被置 1。

看门狗窗口的持续时间可通过WD_window[3:0]位,配置为1 ms~1024 ms。

新的看门狗窗口在下一次看门狗刷新后有效,看门狗窗口可以设置为无限大。

WD_WINDOW[3:0]有一个互补寄存器NOT_WD_WINTOW[3:0],必须用互补值写入该寄存器,输入才能生效。

默认情况下,初始监视窗口设置为1024ms,直到第一次刷新。

为了让MCU有时间启动并首次刷新看门狗,看门狗程序启动时,初始窗口周期都是1024 ms。



看门狗窗口的占空比可通过WDW_DC[2:0]位从31.25%配置为68.75%。新的占空比在下一次看门狗刷新后生效。



如果MCU反馈数据错误,“WD_BAD_DATA”位设置为1;

如果看门狗时域响应错误(关闭期间超时或刷新窗口),“WD_BAD_TIMING”位设置为1。

在初始化阶段(INIT_RUN),MCU通过WD_SEED寄存器写入LFSR的初始值,或使用FS5600默认初值(0x5AB2)。

使用初始值时,MCU应根据以下内容进行简单公式计算,并将结果发送到OPEN窗口中的WD_ANSWER寄存器中有效的监视器刷新。



看门狗错误计数器可用于Challenger和Simple看门狗。

看门狗错误计数器用于计算坏看门狗的数量刷新(数据和时间错误)。

每次出现看门狗故障时,设备将此计数器递增2;

每次正确刷新看门狗时,看门狗错误计数器递减1。

这一原则确保循环“OK/NOK”行为覆盖故障检测。



为了允许应用程序的灵活性,此计数器的最大值是可配置的,使用WD_ERR_LIMIT[1:0]寄存器,如下表所示。



MCU可以通过WD_ERR_CNT[3:0]寄存器读取看门狗错误计数器值进行诊断。

当看门狗错误计数器达到或超过其最大值时,计数器重置为“0”,并根据下表WD_FAIL_IMPACT[1:0]配置,确认系统失效状态。



从OTP_WD_FAIL_IMPACT[1:0]加载WD_FAIL_IMPACT[1:0]的初始值。

仅当OTP_WD_PGOOD1/2=1时,WD_FAIL_IMPACT[1:0]=01或10。


看门狗刷新策略可用于Challenger和Simple看门狗。

每次正确刷新看门狗时,看门狗刷新计数器递增“1”。

每次监视器刷新计数器达到最大值时(默认为“6”),并且下一次WD刷新也正常,则故障错误计数器(FLT_ERR_CNT)递减“1”。

无论看门狗刷新计数器处于什么位置,只要每次出现错误的刷新,看门狗刷新计数器重置为“0”。



为了使应用程序具有灵活性,此监视器刷新计数器的最大值可通过WD_RFR_LIMIT[1:0]寄存器配置。

MCU可以通过MCU诊断WD_RFR_CNT[2:0],读取看门狗刷新计数器值。



参考:FS5600 Datasheet


来源:射频工程师的日常
ACT芯片自动驾驶
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-05-12
最近编辑:1年前
EE小新
硕士 签名征集中
获赞 77粉丝 69文章 212课程 1
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈