打印
[通用 MCU]

TC3xx SMU之看门狗alarm处理

[复制链接]
759|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-9-3 08:28 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
1. TC3xx WDT速览
根据相关文档描述,TC3xx看门狗总体架构如下:




它内部总共实现了两类Watchdog:

1个Safety Watchdog:Safety Watchdog用于保护芯片系统层级超时。
每个核独有1个CPU Watchdog:内核独有CPU Watchdog,主要看管关联核的执行情况。
今天不讲看门狗的内部基本原理,主要关注发生超时它内部的行为是什么样的。

在功能安全机制上,英飞凌将内核看门狗超时、所有看门狗超时合并为一个功能安全机制:SM[HW]:SCU:ENDINIT_WATCHDOG,如下:



对于Safety看门狗,则设计为另一个功能安全机制:SM[HW]:SCU:SAFETY_WATCHDOG



而从实际alarm输出来看,从上图虚线部分可以看到,例如CPU内部看门狗发生超时,一方面通过ALM_WDTCPUx(x=0~5)进行反映,另一方面会与每个核的对应信号、以及Safety看门狗的超时信号,进行或运算,最终合并为一个ALM_WDTALL。

这里我们也可以通过对应手册得到印证,例如TC37x共计三核,ALM8[10-12]分别表示CPU0\1\2的看门狗超时:



ALM8[16]对应Safety看门狗超时,ALM8[17]则表示所有看门狗超时的或情况,如下:



既是Alarm,那这些看门狗超时的具体行为就是可以配置的,我们来看看在SMU里对应alam的默认值是什么。

根据TC37x的用户手册,ALM8的默认配置为如下图:



其中,AG8CF0、2默认值为0x1FC00,AGC8CF1默认值为0x00;

因此ALM[10-16]得到的行为配置为b101 = 5,对应行为为发送NMI给SCU,如下:



注意ALM8[17]没有进行配置行为,即NoAction。

这就很有意思了,我们都理解看门狗超时一般复位呀,为何默认触发NMI?

接下来我们就看看SMU里面管理看门狗超时alarm的处理。

2. TC3xx SMU Watchdog Alarm
2.1 Watchdog Alarm处理流程
根据文档描述,当出现没有及时喂狗的情况,虽然触发了alarm,但仍需要一段特殊流程来保证MCU行为,特别是在重启前给与软件一小段时间用于保存现场,这是非常关键的。

因此,SMU 看门狗alarm处理流程可用下图进行总结:



当WDT timeout发生时,如果采用默认配置,则直接触发NMI;同时有一个名叫Recovery Timer的计时器用于监控WDT Alarm处理的超时,一旦超过预配置的阈值(RTD)后,就会产生一个Recovery timeout的alam(对应ALM10[16-17])。



这个alam的默认配置为Reset(b110:RESET):



这个路径就很清楚了,那么我们来看看比较关键的Recovery Timer该如何配置。

2.2 Recovery Timer详解
在SMU里,Recovery Timer共有两个实例,每个实例均可配置服务不同的WDT timeout alarm。

与Recovery Timer相关的寄存器包括:

RTC
Recovery Timer Configuration,用于配置超时阈值、使能RT0\1,如下:



阈值常见使用默认值0x3FF,RT均打开。

RTAC00\01
RTAC00\01用于配置RT0的服务对象,包括CPU Watchdog Timeout、Safety Watchdog Timeout等;

以RTAC00为例,



默认值为0xA80108,即对应ALM Group GID0 = d8 ,Alarm ID ALID0 = d10 ,对应ALM8[10]CPU0 看门狗超时,



每个寄存器可以配置2个Alarm,因此RTAC00\01共计可以配置服务4个Alarm,在默认配置中,RT0主要服务 Safety WDT, CPU0\1\2 WDT

RTAC10\11
RTAC10\11用于配置RT1的服务对象,包括CPU Watchdog Timeout、Safety Watchdog Timeout等,与上述配置类似,RT0默认服务CPU3\4\5 WDT。

2.3 NMI里可以做什么?
配置好RT后,我们继续来看看看门狗超时的行为--NMI,全称Non-Maskable Interrupt。

它是Tricore内核Trap系统中的一个具体实现。

SMU通过内部行为配置NMI触发一个Trap事件给到SCU,再有SCU仲裁生成Trap给到对应CPU,如下:



Trap发生时,会由硬件自动生成一个Trap ID,该ID由两部组成,

TCN:Trap Class Number,作为Trap table的索引,由硬件根据BTV生成
TIN:Trap Identification Number,硬件自动加载到的数据寄存器D[15]
Trap是伴随一些特殊事件例如NMI、指令异常、内存管理异常、非法访问等错误的发生而发生,因此可以理解为TriCore对于硬件错误的进一步细化处理,所以在实际实现时,就像定义Vector Table一样,我们仍需要定义一个Trap Table,在启动代码里进行初始化,设置寄存器BTV(Base Address of Trap Vector table),如下图:



这也意味着,当Trap发生时,PC会自动跳到TrapTable,并根据TCN跳转至不同处理函数,然后我们在Trap函数里根据TIN,进行不同处理。



那根据手册描述,NMI的TCN为7,TIN为0,故我们在该函数中就可以自定义一下内容,例如保存现场到某retention ram,下一次复位后查询异常原因。



3.小结
通过上面的分析,我们将看门狗超时的Alarm处理路径完整梳理了一遍,分别涉及到SCU.WDT、SMU、SMU RT、SCU.TRAP、CPU Trap Handler;限于篇幅,Trap TCN生成逻辑、TIN获取方式留在TriCore Trap系统里具体描述吧。


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/djkeyzx/article/details/141821398

使用特权

评论回复
沙发
呐咯密密| | 2024-9-3 10:01 | 只看该作者
英文的文档看着有点费劲

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15611

帖子

11

粉丝