TC3xx-SMU_EMS分析

文章介绍了SMU(SafetyManagementUnit)的基本概念,特别是其在硬件安全中的作用,如portemergencystop功能。该功能在警报触发时将pad强制转为GeneralPurposeInputMode,并发送请求给SCU。配置过程中涉及AGC寄存器、SMU(Keys)寄存器以及中断向量表。文章通过示例代码展示了如何配置alarm行为、触发PES以及设置中断处理。
摘要由CSDN通过智能技术生成

PS:该文要求阅读者具备基本的SMU知识

1.基本概念

        SMU--Safety Management Unit;主要是硬件(少量软件)的功能安全机制触发警报后,对这些警报进行统一处理;

        在阅读datasheet时,发现SMU有一个port emergency stop功能可以强制将pad拉成General Purpose Input Mode;同时还会把这个请求发给SCU;这就很有趣了,这种功能的应用场景在哪?在这之前,我们来分析下如何触发这种EMS。

        

2.配置

        首先我们查看AGC寄存器PES位域;

       SMU alarm behavior触发后,硬件是可以触发PES;这就是说我们在配置Alarm 行为时同时也要考虑PES配置。ps:alarm behavior如下:

         其次,由于SMU与安全紧密相关,对于SMU寄存器的配置除了常见的endinit保护,也需要有其他的机制进行处理;因此SMU_KEYS寄存器的锁存机制也必须考虑

         最后,当我们想用中断的方式来进行处理时,SMU的中断配置也必须考虑,中断向量表的设置也势在必行。那么接下来,我们来看看代码如何处理。

3.参考代码

          首先,我们选用IGCS0来触发PES,那么需要配置的寄存器有,AGC.PES\IGCS0,AGCF[group][0-2]

3.1 配置密钥到SMU_KEY

 

        配置SMU寄存器时,需要对CFGLCK写入0xBC,这时候SMU_core寄存器配置才会生效;

    /* Check if SMU cfg registers is not locked */
    if (MODULE_SMU.KEYS.B.PERLCK != 0xFFU)
    {
        passwd = IfxScuWdt_getSafetyWatchdogPassword();
        /* disable the write-protection for registers */
        IfxScuWdt_clearSafetyEndinit(passwd);

        /*Write Config key to configure the SMU registers. */
        MODULE_SMU.KEYS.U = (uint32)0x000000bc;

        /* Restore back the write-protection for registers */
        IfxScuWdt_setSafetyEndinit(passwd);
    }
    else
    {
        /* If SMU config is permanently locked then return false */
        status = 0U;
    }

        当配置SMU寄存器完成后,需要给PERLCK写入0xFF,完成锁存;保证在当前上电周期SMU alarm的配置不被修改 

/* Write the key reg to lock config registers */
        MODULE_SMU.KEYS.B.PERLCK = 0xFFU;

3.2 配置alarm行为

        我们选择软件功能安全机制group10的第0、1个机制;因此首先我们需要配置AGC。

         

 /* Set the IGCS0 field of AGC register to 1 to trigger SMU Interrupt Request 0 */
    MODULE_SMU.AGC.B.IGCS0 = 1;
    /* Enable the SMU Port Emergency Stop and SMU_IGCS0 activates the PES */
    MODULE_SMU.AGC.B.PES = 1;
    /* configurate software alarm 0 action igcs0*/
    AG10CF0 = 0x0000 0000;
    AG10CF1 = 0x0000 0001;
    AG10CF2 = 0x0000 0000;

3.3 配置SMU中断

SRC_SMU0.B.SPRN = priority;
SRC_SMU0.B.TOS= Tos_cpu0;
SRC_SMU0.B.CLRR= 1;


/*configurte Interupt for SMU*/
IFX_INTERRUPT(ISR_SMU, 0, ISR_PRIORITY_SMU_INT0);

3.4 软件触发alarm

IfxSmu_setAlarmStatus(IfxSmu_Alarm_Software_Alarm0);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CyberSecurity_zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值