专栏名称: 汽车MCU软件设计
汽车MCU软件工程师,分享汽车功能安全、网络安全和AutoSAR
目录
相关文章推荐
新疆949交通广播  ·  刚刚,利好传来!事关AI→ ·  昨天  
新疆949交通广播  ·  或致大脑变迟钝!这个小习惯的伤害不可忽视→ ·  2 天前  
新疆949交通广播  ·  新疆这座机场,有新进展! ·  2 天前  
新疆949交通广播  ·  “比价神器”来了! ·  2 天前  
新疆949交通广播  ·  速看!新疆放宽招考标准 ·  2 天前  
51好读  ›  专栏  ›  汽车MCU软件设计

TC3xx MTU概述

汽车MCU软件设计  · 公众号  ·  · 2024-05-06 19:00

正文

目录

1.MTU基本功能

2.MBIST

3.如何配置NDT

4.小结


1.MTU基本功能

在TC3xx中,MTU(Memory Unit Test)被用来管理控制芯片内部各种RAM的测试、初始化和数据完整性检查。
既然MTU主要是管理和控制,那干活的想必另有他人。所以在该平台中,我们可以看到SRAM周围设计了特别的数字逻辑电路,称之为SRAM Support Hardware(SSH);SSH主要用于控制其关联SRAM的ECC、MBIST(Memory Built In Self Test)等。
因此MTU、SSH、RAM在TC3xx的结构示意如下:
其中,CPU通过SPB总线访问MTU;MTU针对每个SSH又都有一套独立寄存器,可以配置不同的SRAM测试类型、控制SSH的功能运行。 根据TC39x-B UserManual描述,在该平台中设计了多达96个SSH(包括预留),截图如下:
这意味着,在不同IP的内部SRAM也可以通过MTU和SSH配置进行测试,即使CPU不能直接访问该SRAM。
值得注意的是,SSH寄存器只能通过MTU->SSH这样的路径进行访问,因此在访问效率上会比直接通过SPB访问寄存器要慢一些。

2.MBIST

MBIST是一种功能安全机制,用于检查SRAM内部Cell是否出现永久随机硬件失效。TC3xx使用MTU来实现MBIST,在UserMannul里仅提供了Non-Destructive Test的实现方法、功耗和耗时。
这是为什么呢?
因为在ISO26262中,SRAM的Cell故障被认为是潜伏故障,而在一次驾驶循环内至少得有一次测试用于覆盖潜伏故障,所以使用者有权决定在MCU启动、APP运行和下电这三个阶段任意时刻进行MBIST,因此这种非破坏性测试(NDT)是最为友好。
NDT允许在程序运行时进行memory的测试,并且不会破坏当前memory里的应用数据。之所以能这样,是因为该算法的运行逻辑如下:
  1. 从SRAM一个地址读取一个word,包括数据+ECC bits,记为"r" ;
  2. 对上述word取反,并写回当前地址,记为 “w*”;
  3. 再次读取该地址上的数据word,记为 “ r* ”;
  4. 对上述word再次取反,写回SRAM,记为“w”;
其中 “ * ”表示始终对原始数据相反,可以看到要保证应用数据不被污染,写"w"的次数必须是偶数次,因此NDT的算法在时间复杂度上至少为4N。
执行MBIST期间,每次发生读访问,SRAM自身的ECC机制会计算此次读出数据的校验码,并检查该校验码是否与存入该数据时计算的校验码一致。如果不一致,则会产生错误并通知SMU或者产生中断。
不过,在执行MBIST前还需要注意如下事项:
  • 测试期间,被测试SRAM不可访问;
  • 测试前,SRAM应该被正确初始化。
这些事项与我们设计Online Bist任务息息相关。
在CP AUTOSAR RamTst模块里提出了Foreground Test和Background Test两个概念;其中Foreground Test是同步测试,不可以被中断;Backgroud Test由OS或者调度器周期调度,它可以在每个测试序列完成时被打断。
由于Background Test涉及到数据一致和中断概念,目前用的比较少,比较常见的就是在上电前执行NDT,运行期间选择关键memory进行测试。

3.如何配置NDT

前面聊了那么多概念,我们还是来看看如何配置MTU来实现NDT。
MTU寄存器分为了两大块,MTU配置寄存器和SSH寄存器。
  • MTU 配置寄存器:用于使能SSH,寄存器位宽32bits;
  • SSH寄存器:用于控制关联SRAM的MBIST和ECC设置等,寄存器位宽16bits。
因此在设计代码时需要重点关注MC的寄存器配置,主要是位宽限制。
经总结,要运行NDT须掌握MTU\SSH中的四个关键寄存器CONFIG0,CONFG1,MCONTROL和RANGE。
  • CONFIG0:用于配置SSH访问类型和每个地址的访问次数
  • CONFIG1:用于选择测试pattern等;
  • MCONTROL:用于控制MBIST开启,测试地址运行方向等;
  • RANGE:用于设置SRAM测试地址范围。
以测试LMU0为例,具体步骤如下:
1.使能LMU0的SSH控制器,配置MTU_MEMTEST0.BIT30。
2.配置NDT:
由于LMU0属于第31个SSH,因此我们需要配置MC30_CONFIG0\1、RANGE等。
我们要搞清楚mbist不同算法下CONFIG0和1里的位域是有关联的;
CONFIG0位域如下:
  • [7:0]:ACCSTYPE,每一位代表对单个地址的一次访问,0表示写访问、1表示读访问。例如ACCSYYPE[0] = 1,表示对当前单个地址的读访问。
  • [15:12]:NUMACCS,配置每个地址的访问次数,最多8次。
CONFIG1位域如下:
  • AC_MOD:用于SSH执行更复杂的寻址方案
  • SELFASTB:选择fast bits
  • ACCSPAT:访问pattern配置,当AG_MOD选择NDT后,该位域就与CONFIG0.ACCSTYPE关联,当ACCSPAT[0] = 0时表示上一次读访问的正常数据,等于1时表示上次读访问是取反的数据。
有了上述基本概念,我们尝试来构建一个时间复杂度为4N的NDT逻辑,一个Cell的完整测试逻辑为{ r, w*, r* ,w }。
那么首先CONFIG1.AC_MOD就要配置为0x5,
针对CONFIG0.NUMACCS,就应该为4,表示单个地址访问四次;ACCSTYPE就应该配置为0b0101,表示 w
同理,CONFIG1.ACCSPT就应该配置为0b1000 ,逻辑如下:
第一次读取sram 是正常读取,故ACCSPT[0] = 0;第二次是写访问,写入的是上一次读取的取反,第一次是正常读取,故ACCSPT[1]=0;第三次是读取取反的值,但是由于第一次读取是正常读取,故ACCSPT[2] = 0;最后一个是对取反值取反,并写回SRAM,由于第三次读取的是取反值,故ACCSPT[3] = 1;
故MC30CONFIG0 = 0x4005;MC30CONFIG1 = 0x5008。
完成CONFIG0\1的配置后,接下来需要考虑待测SRAM的地址上下限。
这与我们在Memmap里定义的地址大有不同,毕竟对于特定SSH来说,它只是到自己关联SRAM的相对地址,从0x00开始以64word为单位增长到SRAM最大Size。
因此我们在配置RANGE寄存器时,通常采用每个SSH RANGE的默认值,表示SRAM全量测试,如果需要测某块,就需要大家自己去锁定每个SRAM的size。
最后,我们通过MC_MCONTROL配置MBIST测试方向(高地址->低地址或者相反),并开启测试。
测试如果有问题,我们可以通过寄存器MC_ETRR来查询出错的位置,如下:

4.小结

通过上面简单描述,我们了解了TC3xx的MTU基本功能, 进一步打通MTU->SMU的功能逻辑闭环 同时也明白了MTU应该放在SafetyLib这个 维度。
MTU承载的MBIST功能不仅是对功能安全要求的具体硬件机制实现,也是对AUTOSAR中RamTest模块的需求承接。

往期回顾:

1.汽车标定精选

汽车标定技术--标定概念详解
汽车标定技术--Bypass的前世今生
万字长文:汽车标定技术--XCP概述

2.AUTOSAR 精选

AUTOSAR CryptoStack--CSM Job夹带了哪些私货
AUTOSAR 诊断栈分析(一)






请到「今天看啥」查看全文


推荐文章
新疆949交通广播  ·  刚刚,利好传来!事关AI→
昨天
新疆949交通广播  ·  新疆这座机场,有新进展!
2 天前
新疆949交通广播  ·  “比价神器”来了!
2 天前
新疆949交通广播  ·  速看!新疆放宽招考标准
2 天前
medworld器械世界  ·  最新全球医疗器械100强,美敦力强生GE前三
7 年前