TC3xx的LBIST自检

本文介绍了英飞凌AURIXTC3xx系列32位高性能MCU的LBIST逻辑自检功能,包括其工作原理、启用方法以及结果验证,确保系统级功能安全。

英飞凌的TC3xx系列是符合ASIL D的MCU,自身带有很多自检功能,今天我们来分享下LBIST,逻辑数字部分的自检功能。代码使用AURIX Development studio V1.8版本

TC334平台LBIST简介

英飞凌Aurix TC3xx作为满足ASIL D的32位高性能MCU,提供了大量安全机制来覆盖MCU不同的失效模式。针对潜在失效部分,TC3xx有PBIST(电源自检),LBIST (逻辑自检), MBIST(内存自检),MONBIST(二级电压监控自检)等特性来满足客户系统级的功能安全需求。

LBIST是一种片上硬件机制,可用于检测MCU潜在故障。AURIX TC3xx平台的LBIST实现允许对MCU逻辑执行定期自检。LBIST在MCU应用模式下的执行基于为生产测试而实施的DFT结构,因此可重复使用MCU中已有的扫描链、控制和状态机制。启动LBIST有两种可配置的方式:作为启动序列的一部分或由MCU功能模式下的应用软件启动。LBIST的执行结果在LBIST结果和状态寄存器中提供,应用软件可利用这些结果在检测到潜在故障时达到 MCU安全状态。

LBIST功能开启

LBIST执行函数存放于Ifx_Cfg_Ssw.c文件,根据函数定义只需将Ifx_Cfg_Ssw.h文件中的IFX_CFG_SSW_ENABLE_LBIST定义改为1,程序就会在SSW执行过程中进行逻辑自检。

e47a992e6633e8ad7faf0eca1343ecbd.png547ba2c2058a7920342b36645eaf97eb.png

LBIST功能执行函数

默认值为0,写1打开LBIST

结果验证

593a37f3f6774183c39030c1c7736ab5.png

b5940af9bfe8ee62c8878f5b4c58edd5.png

期望签名

30fbbe172ebb4e989e495126cc90c595.png

LBISTDONE位显示为1,表明自上电复位以来,至少有一次LBIST过程成功执行。且SCU_LBISTCTRL3.SIGNATURE为0x740ef25a,与期望配置中的签名一致,代表逻辑自检成功。

如若逻辑自检不成功,则用户在此处可以进行相关处理。

ab9dadd17c45208c50c542f55a481aa2.png

通过查看以上寄存器的的值,表明LBIST功能成功执行。

<think>好的,我现在需要解决用户关于英飞凌TC3xx芯片在执行LBIST复位时,noninit区域的变量发生变化的问题。用户想知道LBIST复位到底是什么类型的复位,以及为什么noninit区域的变量会变。让我先理清楚思路,然后逐步分析。 首先,我需要回顾一下英飞凌TC3xx芯片的复位类型。通常,微控制器会有多种复位源,比如上电复位、看门狗复位、软件复位等。LBIST逻辑内建自测试)通常用于检测芯片内部的逻辑故障,可能在测试期间或启动时运行。执行LBIST时可能会触发某种复位,但具体是哪一种呢? 接下来,关于LBIST复位的类型。根据之前的知识,LBIST复位可能属于功能复位(Functional Reset)或者系统复位。这类复位可能不会初始化所有内存区域,尤其是标记为noninit的区域,这些区域通常用于在低功耗模式下保持数据,或者在特定复位后保留值。如果LBIST复位属于这种类型,那么noninit区域的变量就不会被重置,但用户说变量还是变了,这可能是什么原因呢? 然后,可能的原因有几个方面。首先,虽然noninit区域在功能复位中应该保留,但LBIST测试可能涉及对内存的访问或覆盖,导致数据被修改。其次,可能是内存保护配置的问题,例如访问权限或内存分区的设置不正确,导致LBIST过程中意外写入。另外,也有可能是在LBIST执行期间,电源或时钟的不稳定导致内存内容丢失,但这种情况可能更少见,因为noninit区域通常由备用电源维持。 还需要考虑LBIST复位的具体行为。例如,某些LBIST实现可能在测试完成后执行硬件复位,而这种复位可能比功能复位更彻底,导致更多的内存区域被初始化。或者,LBIST测试本身可能包含对某些内存区域的测试,从而改写其中的数据。 此外,用户提到的变量变化可能涉及到内存的初始化和保留策略。需要确认芯片文档中关于LBIST复位的具体说明,以及noninit区域的定义和复位后的预期状态。如果文档中指出LBIST复位属于系统复位,而系统复位通常会初始化noninit区域以外的部分,但实际中可能由于某些配置或硬件特性导致noninit区域也被影响。 可能的解决步骤包括:检查芯片手册中LBIST复位的类型和其对内存区域的影响;确认noninit区域的内存保护配置是否正确;审查启动代码或LBIST测试程序,确保没有意外操作这些内存区域;使用调试工具监测LBIST执行期间的内存访问情况,确定变量被修改的具体时机和原因。 总结来说,LBIST复位可能属于一种特定的功能或系统复位,但导致noninit区域变量变化的原因可能涉及测试过程中的内存访问、配置错误或复位类型的不同处理方式。需要结合芯片文档和实际测试来进一步定位问题。</think>**问题分析:** 英飞凌TC3xx芯片执行LBIST(Logic Built-In Self-Test,逻辑内建自测试)复位时,`noninit`区域的变量发生变化,需明确LBIST复位的类型及其对内存区域的影响。 --- **分步解答:** 1. **LBIST复位的本质** LBIST复位属于**功能复位(Functional Reset)**,而非全局复位(如电源复位)。 - **功能复位特点**: - 仅复位CPU核、外设模块及部分系统逻辑,**不会初始化所有内存区域**。 - `noninit`区域(标记为“非初始化”的内存)**理论上应保留数据**,因其通常用于低功耗模式或快速恢复场景。 2. **为何`noninit`区域变量会变?** 可能原因包括: - **LBIST测试覆盖内存访问**: LBIST可能对特定RAM区域进行测试,导致数据被覆盖。需检查LBIST配置是否包含`noninit`区域。 - **内存保护配置错误**: - `noninit`区域未正确配置为“保留”属性(如未设置MPU/MMU保护)。 - LBIST执行期间,内存控制器可能强制刷新或重映射区域。 - **硬件时序问题**: LBIST复位可能导致短暂电压波动,若`noninit`区域未由备份电源(VBAT)供电,数据可能丢失。 3. **验证与解决方案** - **查阅芯片手册**: 确认TC3xxLBIST复位类型及对内存区域的定义(参考《TC3xx User Manual》中“Reset Classification”章节)。 - **检查链接脚本(Linker Script)**: 确保`noninit`区域属性为`NO_INIT`或等效配置,例如: ```c .noninit (NOLOAD) : { *(.noninit) } > RAM ``` - **调试监测**: 通过调试器(如Lauterbach)观测LBIST执行期间的内存访问记录,确认是否发生意外写入。 - **隔离测试**: 临时将关键变量分配到`init`区域,观察是否仍被修改,以排除配置问题。 --- **总结:** LBIST复位是功能复位,通常应保留`noninit`区域数据。变量变化的根本原因可能是LBIST测试覆盖、内存配置错误或硬件设计疏漏。需结合芯片手册与实测数据进一步定位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值