前言
STCU2(Self-Test Control Unit ),从名字就可以看出来,它是一个自检的控制模块,即 BIST(Build-In Self-Test)控制器。BIST 简单的来说就是一种芯片自我测试方式,用来验证芯片自身部分功能正不正常
芯片上的 BIST 由若干个 BIST 分区组成,每个 BIST 分区负责一部分模块的自检,所有分区加在一起就是整个芯片自检过程
BIST 又根据分区内是逻辑模块还是存储模块分为 LBIST(Logic BIST)和 MBIST(Memory BIST)这两种。而在 K3 中,这两种 BIST 都是有的
BIST 又有两种模式,分别是 off-line 和 on-line,其中 off-line 就是不需要软件的干预,硬件自己完成 BIST 测试,而 on-line 则需要软件来控制
S32K3 只支持 on-line 模式,其中 S32K312 和 S32K311 不支持 LBIST.
LBIST 只有 1 个,包含 DMA,CRC 等模块的自检
MBIST 最高达 18 个
STCU2 通过控制 LBIST_CTRL 和 MCT 来分别完成对 LBIST 和 MBIST 的控制(如上图)
为什么上图分成两个逻辑分区:
猜测是因为每个逻辑分区所需的自检逻辑不一样,所以每个逻辑分区都对应一个 LBIST_CTRL 逻辑自检控制器
而存储的自检逻辑是相同的,因此一个 MCT 便可以控制多个 MBIST
功能简介
STCU2 可以串行(顺序)或并行(同时) 控制 LBIST 和 MBIST 的执行
内置 1 个可编程看门狗定时器,可以监测 LBIST 或 MBIST 是否在规定时间内完成自检,如果超时,产生中断(但是现有 SDK 包中未实现)
简而言之:
- 管理 BISTs 的执行
- 指示每个 BIST 是否通过
- 管理芯片的 LBIST 和 MBIST 块
下图为 STCU 的功能框图:
STCU 有三个 FSM:
- Master FSM 为 STCU 的核心单元,主要负责 BIST 测试控制
- Loader Shifter FSM 主要负责控制参数和测试结果反馈到寄存器之间的交互
- WDG FSM 为 STCU 的超时监测单元,如果 BIST 运行超时,这个模块会打断 BIST 的执行,并默认将其视为可恢复复位错误发送至 FCCU
LBIST 和 MBIST interface:在整个 BIST 自测试中,STCU 只是控制单元,所以这两个 interface 是控制单元与执行单元之间的接口
Interrupt 信号:STCU 检测到 BIST 超时时可以产生一个中断,STCU_LBIST_MBIST_IRQn =191(但是这个中断在 RTD 中并没有被实现)
FCCU 信号:STCU 可以将 recoverable 错误输送给 FCCU,而这个是否为 recoverable 是可配置的。
MBIST 将 K3 分成了 12 个区域,而 LBIST 则共 1 个区域,总共有 12+1 个区域(详情请详见 RM 手册 STCU 章节的 51.1.3 STCU2 LBIST/MBIST mapping)
用户是可以将这些区域的配置成是否为 recoverable 和 unrecoverable 的 BIST,如果是 recoverable 的区域在自测试的时候发生了错误,那么这个错误就会报告到 FCCU 模块,如果 unrecoverable 的错误发生了,则直接发送信号给 MC_RGM 触发破坏性复位。
STCU 也可以控制 EOUT 信号,发生错误时可以使用 EOUT 将错误信号传送给外部 SBC。
配置选择
safetyboot 相比 dia 少了一个 HSE Memory(存疑)的检查
在线 BIST 的预期用途是对应用程序启动至关重要的内存和模块执行测试。这有助于最大限度地减少 MCU 的启动时间。在启动时执行完整的 BIST 将超出许多用户的需求。在线测试主要用于 MCU 的完整 BIST,通常在 ECU 关闭之前执行,此时执行时间不那么关键。在线模式还可用于制造环境中的故障诊断和质量控制。
自检前
取决于 ASIL 目标和性能要求,可以配置自检的测试参数,实现不同级别的覆盖率
禁用所有通信外设,因为通信外设不在 LBIST 自检序列中且自检过程中无法执行应用代码
配置 RGM 功能性复位源为中断(其实就是禁用功能复位源,因为禁用后自动降级为中断了)。
手动禁用功能复位源
手动关闭通讯外设时钟
自检后
自检是由软件启动的,自检完成后 STCU2 将执行功能性复位,但是 STCU2 不会在功能性复位中复位,因此自检结果可以在功能性复位后读取
可以在 main 函数中针对 STCU2 的寄存器进行检查,判断上次复位是功能性复位还是非功能性复位(会重置 STCU2 模块),从而判断是否需要自检,以及上次的自检结果
如果发生了破坏性复位,虽然 STCU2 被复位了,但是其传出的破坏性复位记录被保存在了 MC_RGM 复位模块中
故障处理
recoverable and non-critical faults 会被发送到 FCCU
unrecoverable and critical faults 会被发送到 MC_RGM
其中在 S32DS 下的 BIST 模块下,可以每个 BIST 错误单独配置为 unrecoverable.(默认是 recoverable)
EOUT 引脚
该芯片仅支持 FCCU EOUT 的双稳态协议和故障切换模式
Bi-Stable
指示 FCCU 的状况
Fault-Toggele
指示故障的发生
上电后,EOUT 信号具有高阻抗。只有在软件配置它们之后,它们才会指示操作状态。
如果发生故障事件或软件请求误引脚指示,则脚将设置为故状态最短时间 (参见 DELTA TTDELTA ),即使软件之前尝试释放它
(仅适用于在双稳态模式下配置的错误引脚的情况)。
TBD…
时钟
必须启用 PLL,所以关于自检过程中启用 PLL LOCK 检测的寄存器必须开启
复位相关
寄存器配置
自检启动位
SPD 库 BIST_RUN 逻辑
- 写运行超时看门狗寄存器
- 写算法寄存器
- 写 BSTART 寄存器来选择要运行哪些 BIST
- 写 CFG 寄存器配置 系统时钟分频,执行配置首指针,执行期间延迟等等
- 写各个 LBIST,MBIST 的配置
- 写 RUNSW 的 RUNSW 启动 STCU2 执行