功能看门狗与窗口看门狗不同步,两者完全独立。
功能看门狗和窗口看门狗可以独立激活和禁用。
看门狗的结果(有效或无效触发)由相关看门狗故障计数器独立监控。
窗口看门狗的状态为WWO,其值可能为“有效WWD 触发”或“无效WWD 触发”。
功能看门狗的状态为FWO,其值可能为“有效FWD 触发”或“无效FWD 触发”。
两个看门狗的设置对安全状态控制的影响在安全状态控制一章中进行了描述,以便更好地理解。
“触发”可以是发送到 WWDSCMD 寄存器的 SPI 命令,也可以是 WDI 引脚上的有效看门狗触发
“Long open Window”中“No Trigger”被视为“无效WWD 触发”,看门狗会再次打开一个“Long Open Window”
“Long open Window”内的“触发”被视为“有效 WWD 触发”,看门狗关闭“Long open Window”并打开“Closed Window”
“CLosed Window”内的“触发”被视为“无效WWD触发”
“Closed Window”结束后,“Closed Window”内的“无触发”会将看门狗移至“Open Window”。
“Open Window”内的“触发”被视为“有效WWD 触发”,看门狗关闭“Open Window”并打开“Closed Window”
“Open Window”中的“无触发”被视为“WWD 触发无效”。
WD的有效触发信号
WDI 触发无效
如果 ROT(监控微控制器相关电压)的复位输出变高,则“Long Open Window”在 INIT 状态下启动。如果窗口看门狗在睡眠状态下被停用,则第一个Open Window将从睡眠状态转换到唤醒状态(由中断指示)开始。第一个Open Window的时间取决于配置的周期时间,为 600 ms (WDCYC = 1) 或 60 ms (WDCYC = 0)。
在“Long Open Window”期间,预计会根据配置的触发选择有效触发 WWD。“长Open Window”的最长时间是固定的,但一旦识别到“有效 WWD 触发”,它就会终止。
窗口看门狗现在将进入“Closed Window”。收到第一个有效触发后,设备将被允许从 INIT 状态移至 NORMAL 状态或从 WAKE 状态移至 NORMAL 状态。
“Closed Window”具有固定的持续时间 tWD,CWt_{WD,CW} (可以通过SPI 命令确定)。它在有效触发信号后立即启动,关闭“Open Window”或“长Open Window”。在“Closed Window”期间不应施加触发信号。不会检测到 WDI 引脚从低电平到高电平的转换,也不会导致触发事件。
有效的触发信号立即终止“Open Window”,因此“Open Window”的时间是可变的,并且取决于微控制器安排触发的时间。这被视为“有效 WWD 触发”。
初始化超时和Long Open Window(LOW)具有相同的典型值。长度。通常这会导致初始化超时在低电平之前或同时完成,这将跳过中断事件 (1)。尽管由于给定的精度,“Long Open Window”内缺少有效触发可能会在低电平结束后导致中断事件,从而使窗口看门狗故障计数器增加 2。
INIT状态定时器第一次超时。由于在 INIT 状态期间未按预期接收到窗口看门狗的有效触发,因此将发出所谓的“软复位”:引脚 ROT 变为零,但后置稳压器的输出电压保持开启状态。附加信息:如果窗口看门狗在接下来的 INIT 阶段的下一个“Long Open Window”内未正确触发,将发出“硬复位”,这意味着引脚 ROT 将变为零,并且输出电压将 也被关闭。在 INIT 阶段第三次无效触发后,设备将进入 FAILSAFE 状态。
经过上电复位延迟时间trd后,所谓的“软复位”引脚ROT再次变高,看门狗打开一个“Long Open Window”,让微控制器有机会触发并同步到看门狗周期 。
有效触发终止“Long Open Window”,这使得“Long Open Window”的持续时间可变并取决于触发。这被视为“有效 WWD 触发”并启动“Closed Window”。在不发出中断的情况下,窗口看门狗故障计数器将减 1。
接下来的“Closed Window”持续时间 tWD,CWt。在此时间内触发将被视为“无效WWD触发”。
“Open Window”内缺少有效触发,导致窗口结束后出现“无效 WWD 触发”。该事件由中断指示,窗口看门狗故障计数器增加 2。
检测到“无效 WWD 触发”后,看门狗将启动一个持续时间为 tWD,CWt_{WD,CW} 的新“Open Window”,以使微控制器有机会触发并同步到看门狗周期。
有效触发终止“Open Window”,这使得“Open Window”的持续时间可变并取决于触发。这被视为“有效 WWD 触发”并启动“Closed Window”。在不发出中断的情况下,窗口看门狗故障计数器将减 1。
如果“Open Window”内出现多次“无效 WWD 触发”,窗口看门狗故障计数器将再次增加 2,直到达到配置的阈值。在这种情况下,将发出重置命令。
接下来的“Closed Window”持续时间 tWD,CWt_{WD,CW} 。在此时间内触发将被视为“无效WWD触发”。
“Closed Window”期间的触发被指示为“无效WWD触发”。该事件由中断指示,并且窗口看门狗故障计数器增加 2。
“Closed Window”将因“WWD 触发无效”而关闭。最初它会持续时间 tWD,CWt_{WD,CW} 。错误触发终止“Closed Window”并启动“Open Window”,以使微处理器有机会同步到窗口看门狗周期。
在此“Open Window”内预计会发生有效触发。有效的触发会终止“Open Window”,这使得“Open Window”的持续时间可变并取决于触发。这被视为“有效 WWD 触发”并启动“Closed Window”。在不发出中断的情况下,窗口看门狗故障计数器将减 1。
接下来的“Closed Window”持续时间 tWD,CWt_{WD,CW} 。在此时间内触发将被视为“无效WWD触发”。
“Closed Window”期间的触发被指示为“无效WWD触发”。该事件由中断指示,并且窗口看门狗故障计数器增加 2。
“Closed Window”将因“WWD 触发无效”而关闭。最初它会持续时间 tWD,CWt_{WD,CW} 。错误触发终止“Closed Window”并启动“Open Window”,以使微处理器有机会同步到窗口看门狗周期。
在此“Open Window”内预计会发生有效触发。有效的触发会终止“Open Window”,这使得“Open Window”的持续时间可变并取决于触发。这被视为“有效 WWD 触发”并启动“Closed Window”。在不发出中断的情况下,窗口看门狗故障计数器将减 1。
接下来的“Closed Window”持续时间 tWD,CWt_{WD,CW} 。在此时间内触发将被视为“无效WWD触发”。
引脚 ROT 的行为取决于 ΣWWO 的值。在上面的例子中,假设无效触发不会导致超过阈值ΣWWO。
首先判断FWD是否使能;如果未使能,停止并清空心跳计数器值;如果使能,请跳至步骤2;
开启心跳计数器,并生成初始化问题;
设置response byte number为3,准备接受第一个回复;
等待回复值;
判断心跳计数器是否超时,如果超时,重置心跳计数器,FWD故障计数器加2,请跳至步骤4;如果未超时,请跳至步骤6;
判断新的回复值是否收到?如果未收到,请跳至步骤4;如果收到了,请跳至步骤7;
判断是否为最后一个回复?如果不是,将response byte number减1,请跳至步骤4;如果是,请跳至步骤8;
判断是否同步了回复?如果未同步,请跳至步骤9;如果同步了,重置心跳计数器,也请跳至步骤9;
判断回复是否正确?如果不正确,请跳至步骤10;如果正确,FWD故障计数器减1,生成新的问题,请跳至步骤3;
判断是否同步了回复?如果未同步,请跳至步骤3;如果同步了FWD故障计数器加2,也请跳至步骤3。
生成一个新问题,同时心跳计数器开始计数(假设之前发生过“有效 FWD 触发”)
收到正确的回复(RESP3)
收到正确的回复(RESP2)
收到正确回复(RESP1)
收到正确的同步回复(RESP0)。所有回复均正确,回复顺序正确,并且在心跳计数器溢出之前收到最后一个同步回复。心跳计数器将被重置(设置为零)。这被视为“有效 FWD 触发”,功能看门狗错误计数器 ΣFWO 减 1(如果功能看门狗错误计数器值大于零)
生成一个新问题,同时心跳计数器开始计数
生成一个新问题,同时心跳计数器开始计数(假设之前发生过“有效 FWD 触发”)
收到正确的回复(RESP3)
收到正确的回复(RESP2)
收到正确回复(RESP1)
接收到正确的回复(RESP0),但未同步(写入错误的寄存器)。到目前为止,所有回复都是正确的,回复顺序是正确的,并且在心跳计数器溢出发生之前收到了最后一个不同步的回复。心跳计数器不会被重置并继续计数。这被视为“有效 FWD 触发”,功能看门狗错误计数器 ΣFWO 减 1(如果功能看门狗错误计数器值大于零)。生成了一个新问题
心跳计数器仍在计数,等待新问题的回复。心跳计数器将到期并发生溢出。这被视为“无效 FWD 触发”。这功能看门狗错误计数器 ΣFWO 加 2。心跳计数器复位
心跳计数器开始计数。,不会产生新问题
生成一个新问题,同时心跳计数器开始计数(假设之前发生过“有效 FWD 触发”)
收到正确的回复(RESP3)
收到正确的回复(RESP2)
收到错误回复(RESP1)
收到正确的回复(RESP0), 心跳计数器将被重置(设置为零), 完整的答案是不正确的。这被视为“无效 FWD 触发”。功能看门狗错误计数器 ΣFWO 加 2。心跳计数器复位
没有生成新问题,但心跳计数器开始计数
生成一个新问题,同时心跳计数器开始计数(假设之前发生过“有效 FWD 触发”)
收到正确的回复(RESP3)
收到正确的回复(RESP2)
缺少回复(RESP1)
收到正确的回复(RESP0)。因此,由于缺少回复(在此示例中为 RESP1),最后一个回复不是最后一个回复,而是倒数第二个回复。功能看门狗将等待所有四个回复被写入,而心跳计数器继续计数。所有四个回复没有固定时间,但必须在心跳计数器到期之前以正确的顺序发送
由于缺少回复RESP1,完整答案不正确。虽然最后的回复是同步的,但是心跳计数器不会被重置并继续计数,直到发生溢出。这被视为“无效 FWD 触发”。功能看门狗错误计数器 ΣFWO 加 2。心跳计数器复位
不再生成新问题,心跳计数器开始计数
Watchdog初始化:通过EcuM模块调用函数Wdg_Init来完成Watchdog的初始化配置;
触发看门狗喂狗:通过WdgM模块调用WdgIf模块提供的函数WdgIf_SetTriggerCondition来触发底层驱动进行喂狗动作;
改变看门狗模式:通过WdgM模块调用WdgIf模块提供的函数WdgIf_SetMode来实现看门狗模式的改变。
Off Mode:表示看门狗关闭状态,对于关键安全系统,一般不能将其切换至Off状态,一旦打开将不能被关闭;
Slow Mode:表示看门狗的一个长时间喂狗窗口,该模式一般用于系统启动初始化过程中;
Fast Mode:表示看门狗的正常喂狗窗口喂狗模式,该模式运用在系统正常运行的过程中。
WdgIf_SetMode:设置看门狗模式
WdgIf_SetTriggerCondition:出发喂狗 操作
WdgIf_GetVersionInfo:获取看门狗模块的Autosar版本信息
WdgIfVersionInfoApi:是否使能Autosar版本读取功能
WdgIfDevErrorDetect:手机否使能模块错误Det错误检测功能 TRUE使能, FALSE禁用
WdgIfDeviceIndex:支持多个看门狗驱动的索引
WdgIfDriverRef:当前看门狗的索引
路径1:如果三种监控状态都返回的是正确,并且最近一次记录的本地状态是OK,那么本地状态将停留在OK状态
路径2:如果上次记录的本地状态是OK,满足任一条件时,本地状态为EXPIRED:至少一个Alive Supervision返回的是incorrect,且容忍度(Tolerance)设置为0 至少一个Dealine Supervision或者Logical Supervision返回的状态时incorrect
路径3:如果上次记录的本地状态是OK,同时满足以下两个条件时,本地状态为FAILED:至少一个Alive Supervision返回的是incorrect,且容忍度(Tolerance)大于0 所有的Dealine Supervision或者Logical Supervision返回的状态都是correct.
路径4:如果上次记录的本地状态是FAILED,同时满足以下两个条件时,本地状态保持FAILED:至少一个Alive Supervision返回的是incorrect,且失败次数小于容忍度(Tolerance) 所有的Dealine Supervision或者Logical Supervision返回的状态都是correct. 或者 至少一个Alive Supervision返回的是incorrect,且错误次数大于1 所有的Dealine Supervision或者Logical Supervision返回的状态都是correct.
路径5:如果上次记录的本地状态是FAILED,同时满足以下两个条件时,本地状态为OK:所有的Alive Supervision返回的是correct,且错误计数器等于1 所有的Dealine Supervision或者Logical Supervision返回的状态都是correct.
路径6:如果上次记录的本地状态是FAILED,满足以下任一条件时,本地状态为EXPIRED:至少一个Alive Supervision返回的是incorrect,且失败次数等于于容忍度(Tolerance) 至少一个Dealine Supervision或者Logical Supervision返回的状态时incorrect。
路径7:如果激活后禁用,则设置为DEACTIVATED状态。
路径8:如果禁用后,Wdg函数没有监控任何SE,则维持为DEACTIVATED状态。
路径9:如果禁用后激活,则切换到OK状态。
路径10:WdgM初始化后,在初始化模式激活的SE的本地状态将处在OK状态。
路径11:如果不在初始化模式激活,SE的本地状态将处在DEACTIVATED状态。
路径12:如果上一次状态是FAILED,禁用后切换到DEACTIVATED状态。
路径1:上次记录的全局状态为OK,当前SE的本地状态为OK或者DEACTIVATED,全局状态保持在OK。
上次记录的全局状态为OK,当前SE至少有一个本地状态是FAILED,且没有SE状态是EXPIRED,全局状态为FAILED。
上次记录的全局状态为OK,当前至少有一个SE的本地状态是EXPIRED,且未超过阈值,全局状态为EXPIRED。
上次记录的全局状态为OK,当前至少有一个SE的本地状态是EXPIRED,且超过阈值,全局状态为STOPPED。
上次记录的全局状态为FAILED,当前至少有一个SE的本地状态是FAILED,且没有EXPIRED,全局状态将保持在FAILED。
上次记录的全局状态为FAILED,当前所有的SE的本地状态是OK或者DEACTIVATED,全局状态为OK。
上次记录的全局状态为FAILED,当前至少有一个SE的本地状态是EXPIRED,且未超过阈值,全局状态为EXPIRED。
上次记录的全局状态为FAILED,当前至少有一个SE的本地状态是EXPIRED,且超过阈值,全局状态为STOPPED
上次记录的全局状态为EXPIRED,当前至少有一个SE的本地状态是EXPIRED,且未超过阈值,全局状态将保持在EXPIRED
上次记录的全局状态为EXPIRED,当前至少有一个SE的本地状态是EXPIRED,且超过阈值,全局状态为STOPPED
上次记录的全局状态为STOPPED,全局状态将保持在STOPPED
如果调用WdgIf_SetMode失败,全局状态为STOPPED
路径13:当WdgM初始化函数调用之后,全局状态为OK
路径14:如果上一次全局状态为OK,成功调用WdgM_DeInit之后,全局状态为DEACTIVATED。
路径15:如果上一次全局状态为FAILED,成功调用WdgM_DeInit之后,全局状态为DEACTIVATED。
路径16:如果上一次全局状态为EXPIRED,成功调用WdgM_DeInit之后,全局状态为DEACTIVATED。
路径17:如果上一次全局状态为STOPPED,成功调用WdgM_DeInit之后,全局状态为DEACTIVATED。
路径18:WdgM的全局状态,初始化状态为DEACTIVATED。
WdgMExpectedAliveIndications:在给定的时间内某监控实体SE调用WdgM_CheckpointReached函数的次数,即Expected值;
WdgMMaxMargin:调用上述函数的次数的增加的偏移值,即实际值=Expected值+WdgMMaxMargin;
WdgMMinMargin:调用上述函数的次数的减少的偏移值,即实际值=Expected值-WdgMMinMargin;
WdgMSupervisionReferenceCycle:基于WdgM_Mainfunction调用函数周期的次数作为监控参考周期。
调用一次WdgM_CheckpointReached --> 发送一次Alive indication --> Alive Counter+1
通过 WdgMSupervisionReferenceCycle 设定 WdgMSupervisionCycle,应该是它的整数倍
Expected-MinMargin < WdgM_CheckpointReached调用次数 < Expected+MaxMargin,如果超出此范围,报监控错误状态,即会影响到该SE的Local Status状态。
为了避免出现有时间设定的WdgM_CheckpointReached函数调用次数为0或者1时,可能会出现即使该监控实体不再执行时,也会出现满足许可调用次数的情况,一般设计建议选取WdgM主函数周期及监控实体SE所在任务周期两者之间的最小公倍数来设置监控参考周期,确保每个监控参考周期内的WdgM_CheckpointReached()函数调用次数都是固定值,此时,上下偏差MinMargin和MaxMargin均设为0即可。
WdgMDeadlineMin:两个Checkpoint的Transition经历的时间最小值;
WdgMDeadlineMax:两个Checkpoint的Transition经历的时间最大值;
对于此类监控模式,必须有两种Start Checkpoint以及End Checkpoint两类 Start Checkpoint --> 通过参数 WdgMDeadlineStartRef 设定 End Checkpoint --> 通过参数 WdgMDeadlineEndRef 设定
需要使用OS Counter去计算两个Checkpoint之间的时间间隔
为了确定WdgM_CheckpointReached调用时的时间戳以及两个Checkpoint之间Transition的时间,那么调用的函数WdgM_CheckpointReached中需要使用OS功能计算两个Checkpoint之间的时间差距;
通过两个Checkpoint之间Transition所经历的OS tick时间,并与配置的时间参数WdgMDeadlineMin以及WdgMDeadlineMax进行比较,如果超过限值,则报出该监控实体Deadline Supervision错误
当程序运行至Checkpoint处,则调用WdgM_CheckpointReached()函数;
在该函数体内会记录上一次的Checkpoint Id以及两个Checkpoint之间的Transition Id,其中Transition Id根据相邻两Checkpoint计算得到,若相邻Checkpoint之间的Transition不是预期的Transition,那么就会报出该监控实体Logic Supervision的状态错误。