1 TC377 Memory Test Unit (MTU)
MTU功能:控制和监测内存测试、内存初始化和内存数据完整性校验。MTU提供了寄存器接口用于配置和控制不同的内存控制器。
SSH功能:SSH是SRAM Support Hardware的简称,是一个硬件模块,该模块用于控制SRAM的地址或数据错误监测和纠正、Memory Built-In-Self-Test(MBIST)。每个SSH块提供一个统一的接口来控制不同的功能。每个SSH实例可以控制一个或多个内存控制器。
1.1 MTU的特性
- 提供到内部SSH实例的统一接口。
– MTU提供一个统一的寄存器接口用于控制每个内部SSH实例的操作和功能。
– 系统中每个SRAM的各种可配置的测试类型可以通过MTU控制。 - 数据初始化
– 系统中每个SRAM块都能通过MTU进行硬件初始化。
– Security-Sensitive存储器可以自动初始化,防止通过MTU将数据读出。 - 内存错误纠正和检测
– 系统中每个SRAM的内存错误纠正和检测都能通过MTU配置。
– 可纠正的和不可纠正的错误检测。
– 地址错误检测。 - SMU警告通知
– 来自SRAM/SSH的3个警告(CE alarm, UCE alarm and ME alarm)被发送到MTU,然后被MTU转发到SMU。
疑问:上述概述中MTU SSH SRAM在系统中到底如何分布并连接呢?
1.2 MTU, SSHs and SRAMs框图
5. 不同的IP模块可以包含一个或者多个SRAM,每个SRAM对应一个SSH、SSH寄存器及MBIST。
6. MTU通过SPB总线访问各个SSH寄存器。
7. SSH提供了对内存的直接访问,而不涉及CPU。即使是不能通过CPU直接访问的小内存,也可以通过SSH进行测试。
8. SPB总线支持16bit数据访问,因此SSH寄存器应使用16bit读写访问。
1.3 功能描述
从TC39xA-Step 到 TC39XB-Step / TC38XA-Step存在功能变化,如果使用的芯片是TC38X或者TC39X的同学,请前往芯片手册,查看13.3.1章节内容。
MCi_MCONTROL(i=0-95).START/RESUME可以在测试器件被写入清除,但是其它位在测试后被修改将可能导致不可预测的行为。
测试开始后,寄存器中的测试参数禁止被修改 (i.e. CONFIG0, CONFIG1 and MCONTROL (except
START & RESUME))。如果在测试期间,在设置完成之前更改了SSH寄存器,将可能导致未定义和错误的行为。
1.3.1 SSH使能
每个SSH功能的开启受MTU_MEMTSETx(x=0-2)寄存器对应位的控制。只有当SSH功能开启后,才能访问对应的SSH寄存器(除MCi_ECCS (i=0-95), MCi_ECCD (i=0-95),MCi_ETRRx (i=0-95;x=0-4),MCi_ERRINFOx (i=0-95;x=0-4), MCi_ALMSRCS (i=0-95) and MCi_FAULTSTS (i=0-95),这些寄存器只要MTU时钟通过MTU_CLC寄存器启用就可以被访问),否则将返回SPB错误。
对于某些SSH,MEMTEST寄存器启用或者禁用SSH可能会导致整个或者部分内存根据配置自动初始化,该初始化可能需要数百个时钟周期。在此期间,无法访问SSH寄存器,任何访问都将导致SPB总线错误。
请注意,在通过MTU访问任何SSH寄存器之前,必须通过CCU寄存器对包含SRAM的模块的时钟输入通过CCU寄存器启用。除了这个CCU时钟配置之外,不需要启用模块时钟(例如使用CLC寄存器)来访问SSH寄存器。
注意事项:
9. 启用SSH之后,对内存的功能性访问暂时不可用。即当测试内存时,软件应禁止对该测试内存的访问。
10. 启用SSH后,重置包含被测内存模块的行为可能会导致意外行为。因为模块重置复位后,会尝试功能性的访问SRAM,而SSH不会因为模块重置而关闭,所以模块重置之后,SSH还是处于开启状态,而SSH开启时是禁止访问SRAM的。因此在SSH开始后,应避免模块重置的情况。
11. 如果当模块重置发生时,MTU和SSH之间正在进行通信(例如SSH寄存器读写),通信中断,在几个周期内,在SPB上立即触发总线错误,没有任何超时。只有正在进行的读/写可能会被损坏,并且未来的通信不受影响。
1.3.2 Security-Sensitive存储器和自动初始化与SSH之间的关联
对于Security-Sensitive内存,MTU必须阻止通过SSH模块读取或修改这些内存的内容。
自动数据初始化和部分擦除功能可以通过
12. DMU中的 PROCONRAM寄存器启用或者禁用。若PROCONRAM.RAMIN = 00, 01 or 10将启用自动内存内容初始化,PROCONRAM配置初始化是否由冷复位、热复位或两者都触发。
13. 也可以通过MEMTEST.MEMx_EN使能SSHx或MTU_MEMMAP的状态的改变所触发。MEMSTATi(i=0-2)寄存器位表示内存x的自动数据初始化是否已被MEMTESTMEMx_EN或MTU_MEMMAP的状态的改变所触发,且初始化序列尚未完成。
14. 如果 MEMSTAT.MEMx_AIU位被置起,这意味着该内存的自动初始化仍在进行中。SSH仅在自动初始化之后启用,并在自动初始化启动之前禁用。该软件可以通过轮询此位来等待自动初始化完成。
15. 若PROCONRAM.RAMIN=11,在复位时不执行RAM内容的自动初始化,当使用MTU_MEMTEST.MEMx_EN或MTU_MEMMAP寄存器位启用或禁用SSH模块时,也不执行RAM内容的自动初始化。这允许应用程序使用SSH(例如,用于错误注入、数据修改或运行时内存测试),而不会不必要地损坏内存内容。
请注意,自动数据初始化和部分擦除是标称函数,并不是为了保证它们在所有条件下都满足安全要求。即,可能中断初始化。启动时内存初始化的安全性不受影响。
1.3.3 SSH操作 - Memory Testing and Initialization
1.3.3.1 启动内存测试序列
- 在启用MCONTROL.START位之前,需要正确配置配置寄存器MCi_CONFIG0 (i=0-95), MCi_CONFIG1 (i=0-95)。
– CONFIG0.ACCSTYPE指定将在当前内容的每个单一地址上执行的访问类型(read/write)。
– CONFIG0.NUMACCS指定当前内容中单个地址的访问总数。
– CONFIG1.ACCSPAT指定访问模式。
– CONFIG1.AG_MOD指定SSH使用复杂的寻址方案。
– CONFIG1.AG_MOD指定配置测试为无创测试。当使用无创测试时,MSTATUS.FAIL是不固定的,此时软件必须检测 ECCD, ETRR , ERRINFO寄存器是否在测试过程中检测到任何错误。 - 每个内存测试序列通过写SSH的MCONTROL.START位来启动。(参考 MCi_MCONTROL (i=0-95) register))。
- 当测试完