【FUSA笔记-002】TI SDL用户手册:模块设计及安全示例

本文介绍了STL架构图可仿照TI SDL架构图绘制,阐述应用程序在不同模式下使用SDL的功能。还介绍了构建和使用SDL的依赖工具,详细说明了SDL包含的多个模块,如ESM、ECC等的功能及安全示例,最后提及SDL的开发笔记,包括写配置回读和静态配置定时回读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STL架构图可以仿照TI SDL的架构图来画的,体现的是SDL的范围,与应用程序和外部模块的交互关系。

应用程序在不同模式下使用SDL的功能如下:

  1. 设备启动阶段
  • 自检诊断,以验证设备的正确运行
  • 初始化连续诊断的SDL API
  1. 运行时
  • 通过ESM处理程序通知连续诊断检测到的错误
  • 执行定期诊断的SDL API

构建和使用SDL的依赖工具包括:CGT代码生成工具、TI ARM Clang编译器工具、SDK RTOS J721E处理器、CCS(code composer studio)用于应用程序调试

SDL包含一个位于SDL_INSTALL_DIR/的顶级makefile文件,用于构建SDL库、测试和示例。在构建之前,用户需要安装正确的工具链并更新SDL Rules中的路径。make文件位于SDL_INSTALL_DIR/。

使用make命令构建模块、示例或测试的说明:

cd SDL_INSTALL_DIR

make help

下表中列出一些可用的构建命令和说明

构建SDL库的命令及描述由下表所示:

SDL仅支持在MCU R5F内核上执行

SDL提供的测试和示例使用PDK提供测试和引导加载程序SBL在目标上执行示例,首先需要将SDL应用程序转换为适当的格式,使用PDK中提供的工具来完成

创建可执行文件.xer5f file,运行以下命令创建.appimage文件:

SDL包含的模块和功能如下:

1. ESM故障信号模块:将设备内的安全相关时间和诊断导致的错误聚集,在内部或者外部进行监控,它允许将事件指定为高优先级或低优先级中断,也可以直接操作I/O错误引脚向外部硬件(例如外部监视器)发出错误发生的信号

SDL为应用程序提供到ESM的接口,SDL提供了用于初始化和配置ESM以检测HW错误的api,应用程序可以使用api来配置ESM中断和优先级

SDL通过以下方式为ESM提供支持

  • ESM配置API
  • 用于错误处理和通知的ESM处理程序
  • 错误引脚操作API
  • ESM静态寄存器/写入配置读回api

在J7ES上有3个ESM实例:WKUP_ESM0(唤醒域ESM), MCU_ESM0 (MCU域ESM)和ESM0(主域ESM)

ESM安全示例

此安全示例演示了通过应用程序注册的回调从WKUP_ESM、MCU_ESM和ESM(主域ESM)接收到的高优先级和低优先级事件,它还显示了到MCU_SAFETY_ERRORn引脚的事件的routing and clearing清楚。

此示例将ESM设置为

  • 为每个ESM实例启用/禁用ESM模块的输入事件
  • 为每个ESM实例的ESM错误事件注册应用程序回调
  • 为每个ESM实例指定高优先级或低优先级的输入事件
  • 指定直接引脚routing到MCU_SAFETY_ERRORn引脚,用于外部监视器通信

以下模块用于监视和处理ESM事件的触发器:电压和热管理器VTM、Timer、ECC

应该使用SDK中辅助引导加载程序(Secondary Boot Loader, SBL)将示例加载到硬件上

2. ECC纠错码:提高功能和系统的可靠性,模块和子系统采用ECC保护可以实现单错误纠正和双错误检测,检测到的错误通过ESM报告反映。ECC聚合器连接到这些具有ECC的内存和互连组件。ECC聚合器提供对模块或子系统中ECC保护内存的控制和监控

SDL提供对ECC聚合器的支持,通过传递不同的实例,可以通过相同的SDL API独立配置每个ECC聚合器实例。SDL还支持使用ECC聚合器的错误注入特性来执行ECC聚合器自检。ECC聚合器应该在启动时配置,在运行BIST之后

SDL通过以下方式为ECC提供支持

  • ECC配置API
  • ECC自检API
  • ECC错误注入API
  • ECC静态寄存器回读API
  • ECC错误状态

ECC安全示例

此示例展示Main域中几个事件设置和使用一些ECC聚合器,显示如下:

  • 设置ESM应用程序回调以接收单错误纠正(SEC)和双错误检测(DED)事件,并设置ECC聚合器
  • 少量RAM ID触发ECC事件,包括Interconnect类型和Wrapper类型
  • 在收到ECC事件后,在ECC回调中打印错误信息

使用SDK中的辅助引导加载程序(Secondary Boot Loader, SBL)将示例加载到硬件上

3. PBIST内存内置自检:内置自检(BIST)是一种无需任何外部测试设备即可对集成电路(IC)中的存储区域和逻辑电路进行自检的功能。在嵌入式系统中,这些测试通常在系统启动或关闭期间使用,以检查SoC的健康状况。PBIST主要提供永久性故障的检测,测试SoC中的内存区域,PBIST的主要用例在启动时调用它。

SDL提供对PBIST特性的支持,例如执行PBIST test-for-diagnostic来测试PBIST逻辑和PBIST的执行。使用相同的API和不同的配置参数来执行每个实例。还支持HW POST PBIST执行状态检查。

关于PBIST的注意事项包括:

  • 预计在Boot阶段和每个驱动周期运行一次PBIST
  • PBIST必须运行与和内核测试的不同阶段,因为PBIST测试本质是破坏性的,因此BIST测试之后也有必要重置模块
  • BIST由硬件在启动时自动执行,作为HW POST的一部分

SDL PBIST提供如下服务:执行制定实例的PBIST测试、PBIST测试例的配置信息、开始PBIST测试、检查PBIST结果、恢复内核到系统控制(PBIST复位和释放测试模式)、返回测试的状态

每个PBIST实例都有一组用于配置测试的golden值,执行PBIST测试前需要将被测IP设置为上电和复位状态。

BIST安全示例

此示例演示了如何使用SDL PBIST和LBIST API来检查上电自检POST的状态,以及对设备上的各种控制器执行软件启动的PBIST和LBIST测试。该示例显示了分阶段执行BIST检查,类似于引导应用程序在启动时引导内核时执行PBIST和LBIST的方式。该测试从MCU R5F核心执行,不使用操作系统。

以下控制器将在相关阶段进行测试

  • 前期准备:HWPOST结果检查和报告/对主基础设施和MSMC进行了阴性和阳性PBIST测试
  • #0阶段:Main Pular0的阴性和阳性PBIST试验/Main Pular0的LBIST测试
  • #1阶段:Main Pulsar 1, C7x, C66x, VPAC and DMPAC的阴性和阳性PBIST试验/Main Pulsar 1, C7x, VPAC, DMPAC的LBIST测试
  • #2阶段:A72, HC, Encoder and Decoder的阴性和阳性PBIST测试/A72的LBIST测试

在示例应用程序中执行PBIST时,首先执行用于诊断的测试(阴性测试),然后执行PBIST测试本身。在测试结束时,将打印每个测试的结果

使用SDK中的辅助引导加载程序(Secondary Boot Loader, SBL)将示例加载到硬件上

5. LBIST逻辑内置自检:内置自检(BIST)是一种无需任何外部测试设备即可对集成电路(IC)中的存储区域和逻辑电路进行自检的功能。嵌入式系统中,这些测试是在系统启动或关闭期间使用,以检查SoC的健康状况。LBIST用于测试与CPU内核相关的SoC中的逻辑电路。SoC中有多个LBIST实例,每个实例都有一个与之关联的不同处理器核心。存在一些LBIST测试可以由软件发起,这些是由SDL支持的,SDL还提供对HW POST LBIST状态检查的支持。

关于LBIST的注意事项包括:

  • LBIST在启动时或每个驱动周期运行一次
  • LBIST必须从与被测试内核不同的内核发起
  • BIST由硬件在启动时为MCU和DMSC自动执行,作为HW POST的一部分

软件也可以运行时启动LBIST,LBIST对运行它的内核/IP是破坏性的,如果被测IP已经在系统中使用之后执行,则应用程序有责任为内核/IP执行必要的上下文保存/恢复。不支持在内核本身运行LBIST测试!!

SDL的LBIST模块提供以下服务:执行制定实例的LBIST测试、LBIST测试例程的配置信息、开始LBIST测试、检查LBIST结果、将内核恢复到系统控制(LBIST复位和释放测试模式)、返回测试状态

执行LBIST测试需要在执行测试之前将被测ip设置为一定的电源和重置状态,在执行LBIST之前,应用程序需要将内核/ ip置于适当的状态,在执行LBIST测试之后,需要一个“退出序列”将内核/ ip带回系统控制。

5. VTM电压和热管理:电压和热管理(VTM)控制模具中的温度监视器,VTM通过错误信令模块(Error Signaling Module, ESM)为过温提供中断和事件生成。

VTM支持三种警报

  1. 早期警报,以便固件/软件可以进行高温热管理
  2. 向固件/软件报告温度降至安全水平的后续中断
  3. 晚期中断,其高电平可用于触发硬件电压域复位

SDL支持配置VTM电压域和温度警告,SDL ESM Handler也支持三种不同的警报。

VTM模块为应用程序提供以下功能:初始化VTM的能力、能够根据报警温度检查温度传感器的状态、能够清楚和控制VTM事件中断

VTM安全示例

此示例演示了如何使用VTM检测过温事件,并通过ESM向事件发出信号。展示如何为各种警报配置VTM,并使用ESM侦听VTM事件。它还显示强制错误,以演示过热事件的应用程序通知。

示例演示的内容包括:配置VTM阈值、预警事件检测、关键阈值事件监测、当温度降至安全水平时,后续事件通知

6. RTI窗口看门狗定时器:WWDT产生复位后一个周期,如果没有在该周期内服务。超时边界可配置,并且窗口特性允许对开始时间边界进行配置。如果在由开始时间和超时边界定义的窗口(打开窗口)内没有服务,WWDT可以产生中断。此外,如果在打开窗口之外(在关闭窗口内)服务,WWDT可以生成中断。中断的生成取决于WWDT反应配置。

SDL支持配置看门狗定时器。它还支持通过ESM中断通知错误,提供了用于检查看门狗定时器状态的api。

窗口看门狗定时器提供以下功能:初始化RTI-DWWD模块、配置RTI-DWWD模块、服务RTI实例的能力、读取配置状态的能力、回读静态寄存器的能力

RTI安全示例

此示例显示将RTI设置为:

  • 设置窗口看门狗定时器(WWDT)
  • 处理MCU域R5F中ESM模块收到的WWDT故障中断

使用SDK中的辅助引导加载程序(Secondary Boot Loader, SBL)将示例加载到硬件上

7. Power OK内部电压监视器:POK可以配置检测欠压UV或过压OV条件,并通ESM报告错误。POK模块负责监测和准确检测电压水平。POK模块能够监测一系列供应,并在可编程的上限和下限范围内指示被监测供应的故障。pok用于监控具有可编程阈值水平的电压供应水平。

SDL为POK模块的编程提供支持,包括POR模块的内部POK。可以配置阈值限制,并启用POK监控。编程通常在初始化时完成。所有的POK模块都在唤醒域中。

POK提供以下功能:初始化POK能力、验证写POK配置的能力、能够回读写配置

POK安全示例

此示例演示了POK模块的用法,展示了如何使用ESM侦听POK错误时间,并强制执行一个错误,以演示过压和欠压时间的应用程序通知。

示例演示内容包括:欠压事件检测、过电压时间检测

  • 将过/欠压POK实例配置为强制发生过欠压事件的阈值,使用SDL中辅助引导加载程序SBL将示例加载到硬件

8. TOG超时垫片:互联隔离垫片是TI专有IP,用来防止slave引起的挂起,组织互连并安全地终止此类事务。它跟踪事务,如果未完成时间过长则超时,并通过可监视的中断报告错误。TOG通过监视各种VBUS事务,提供检测任何错误的方法,帮助避免由于事务错误而锁定总线,从而帮助实现不受干扰。

TOG具有以下功能:监视VBUS事务,并提供一种检测错误的方法、帮助避免总线因事务出差而被锁定、跟踪未完成的事务并允许超时/恢复

每个Timeout垫片都可以被编程为一个特定的超时,任何超过该超时的事务都将导致事务中止。这也将导致通过ESM触发的错误事件,这将反过来被编程为中断CPU。超时垫片可随时停止、启动和复位

TOG安全示例

此示例演示了TOG模块的用法,展示了如何使用ESM侦听TUG错误事件,并强制执行错误以演示应用程序超时事件通知。

示例演示内容包括:为TOG示例设置超时、TOG示例的故障注入、超时事件的错误事件检测

TOG被编程为一个足够小的超时,可以在任何访问时触发超时事件,触发错误事件,并通知应用程序该事件;应该使用SDK中的辅助引导加载程序(Secondary Boot Loader, SBL)将示例加载到硬件上

9. DCC双时钟比较器:用于确定应用程序时间执行期间时钟信号的准确性,DCC使用另一个输入时钟作为参考来测量可选时钟源的频率,时钟源和精度由应用程序编程。DCC也可以配置为单发或连续模式。在单发模式下,DCC执行一次倒计时,当计数器达到0时,DCC停止操作。将引发一个完成中断,并且可以检查状态。在连续模式下,DCC在完成后用种子值重新加载两个计数,没有错误。如果出现错误,将引发ESM错误事件。

DCC模块提供以下功能:配置DCC实例的能力、能够验证DCC实例的配置、启动DCC实例的能力、禁用DCC实例的能力、能够查询DCC实例的状态包括配置、错误信息、中断状态和计数器值、清除挂起中断的能力、回读DCC静态寄存器、DCC模块在操作期间检测到的错误通过ESM error报告(应用程序将通过ESM应用程序回调接收)

DCC安全示例

此示例演示了如何配置DCC并使用它在两种支持的模式(连续模式和单镜头模式)下监视时钟,并演示了如何在单片机和主域接收DCC产生的错误

示例显示的内容包括:

  • 初始化ESM以检测DCC错误事件
  • 注册用于通知MCU ESM实例的ESM错误事件的应用程序回调
  • 配置一个MCU DCC实例以连续模式监控单个时钟
  • 强制错误创建DCC错误事件
  • 使用单个MCU DCC实例通过在单镜头模式下循环来监控3个不同的时钟
  • 上述操作将首先使用备份时钟源(RC OSC)作为参考,然后使用主时钟源作为参考(HFOSC0/1)。
  • 对于主域DCC实例,将重复上述操作

以下方法可以作为DCC错误事件的触发器

  • 稳定时钟的变化率判据
  • 使用scilient API更改时钟分频器(比率标准稳定)以加快时钟
  • 使用scilient API更改时钟分频器(比率标准稳定)以减慢时钟
  • 关闭监控输入时钟的电源

10. MCRC循环冗余校验:MCRC模块执行CRC循环冗余校验,以验证存储系统的完整性。MCRC控制器用于计算一组数据的签名,然后将计算的签名值与预定的良好签名值进行比较。MCRC控制器提供4个通道在多个存储器上进行CRC计算。

MCRC的4个通道可以配置为3种模式之一操作:

  • 自动模式:在这种模式下,MCRC控制器与DMA控制器一起执行CRC,完全不需要CPU的干预
  • Full模式:由CPU自行完成数据模式传输和签名验证。CPU通过从内存系统读取数据到PSA签名寄存器来执行数据模式传输
  • 半模式:该模式下,由DMA控制器进行数据模式传输和签名验证

MCRC安全示例

此示例演示了MCRC模块的用法,展示如何在semi和full工作模式下设置和使用MCRC控制器,显示匹配CRC的生成以及由于在执行CRC的信息块中插入错误或在提供给PSA签名寄存器的签名中插入错误而导致的不匹配签名(或两者都显示,取决于模式)

示例的演示内容包括:

  • 配置semi和full模式的MCRC控制器计算CRC
  • 配置匹配CRC和不匹配签名
  • 由于模式压缩而产生中断

使用SDK中的辅助引导加载程序(Secondary Boot Loader, SBL)将示例加载到硬件上

11. R5F CCM(CPU比较模块):CCM是R5F子系统对锁步错误检测逻辑的实现,当引导到锁步模式时,R5F子系统有一个逻辑来比较两个内核的输出,并检测到错误时输出中断。

CCM执行以下功能:CPU输出比较、静止监控、VIM比较;CPU输出比较功能对两个R5F内核的核心比较总线输出进行比较。Inactivity监视功能检测由诊断R5F核心发起的任何事务(诊断核心不应以锁步模式发起任何事务)。VIM比较功能用于比较内核的VIM总线输出

每个功能有四种操作模式

  • 比较活动块(正常操作,输出比较):此模式下运行期间检测到的错误通过ESM error报告(应用程序通过ESM应用程序回调接收)
  • 自检(检查块是否有错误,如果检测到错误则生成错误)
  • 强制错误(强制从模块生成错误)
  • 自检错误强制(自检错误信号强制产生)

CCM模块提供以下API

  • 初始化R5F CCM的工作模式,并验证配置
  • 对支持的工作模式进行自检(正常和错误强制)
  • 注入错误
  • 回读静态配置寄存器
  • 清楚由于注入错误或实际故障导致的错误

CPU安全示例

此示例演示了R5F_CPU对于R5F Lockstep的使用,作为一种安全机制来检测R5F执行中的错误。示例展示了如何配置和使用所有4种模式,还展示了如何配置PMU,MPU和非法指令捕获

示例演示内容包括:

  • 设置R5F锁步模式
  • 使用计算比较模块CCM并使用所有4种模式比较活动块、自检、强制错误、自检错误强制使用CPU输出比较功能模式
  • MPU在不同域的使用和三个PMU寄存器用于事件监控的使用

R5F_CPU采用R5F Lockstep模式和CCM使用模式进行编程,并使用所有4种模式;使用SDK中的辅助引导加载程序(Secondary Boot Loader, SBL)将示例加载到硬件上

12. OSAL操作系统抽象层:SDL要求应用程序为各种功能提供一个统一的实现,以便使SDL与操作系统无关。SDL需要用于中断注册和启用/禁用的OSAL实现,以及用于POK编程所需的延迟机制。

提供如下API:SDL_OSAL_init ()、SDL_OSAL_enableInterrupt ()、SDL_OSAL_disableInterrupt ()、SDL_OSAL_registerInterrupt ()、SDL_OSAL_deregisterInterrupt ()、SDL_OSAL_globalDisableInterrupts ()、SDL_OSAL_globalRestoreInterrupts ()、SDL_OSAL_printf ()、SDL_OSAL_delay ()、SDL_OSAL_delay(可选)

  1. R5内核模块:作为SDL的一部分提供的R5内核模块包括:PMU性能监控单元计数器API、MPU内存保护单元API、RAT区域地址转换API、VIM矢量中断管理器API
  • PMU:由三个事件计数寄存器,一个周期计数寄存器和12个CP15寄存器组成,用于控制和询问计数器。性能监视寄存器始终可以在特权模式下访问。控制寄存器可用于单独启用或禁用每个事件计数器,并读取和重置每个计数器的溢出标志。所有三个事件计数器都通过同一个CP15寄存器进行读写。当处理器处于调试半状态时,可以启用计数器来断言中断请求。
  • MPU:R5F MPU与L1存储器系统一起工作,控制L1存储器和外部存储器的存取。MPU可以将内存划分为多个区域,并为每个区域设置单独的保护属性。每个区域都用一个基址和大小进行编程,并且这些区域可以重叠以实现内存映射的有效编程。为了支持重叠,为区域分配优先级,区域0的优先级最低,区域15的优先级最高。MPU返回地址所在的优先级最高的使能区域的访问权限和属性。
  • RAT:RAT模块执行基于区域的地址转换。它将32位输入地址转换为48位输出地址。任何在编程区域内开始的输入事务,如果该区域已启用,则其地址将被转换。任何禁用的区域都会从翻译查找中被忽略。输入地址与所有启用的区域并行比较。区域大小定义了在区域空间中包含多少最低地址位。
  • VIM:矢量中断管理器(VIM)将中断聚合到一个CPU。它旨在与ARM的Cortex R5在拆分或锁定配置中一起使用。VIM每个CPU最多有1024个中断输入,可以是电平输入,也可以是脉冲输入。每个中断都有一个可编程的优先级(最高0到最低15)。每个中断也可以映射为一个irq或FIQ (FIQ通常也表示为不可屏蔽中断,或NMI)

SDL安全手册提供了一个表格,包含支持的模块的软件诊断到SDL软件API和参考示例的映射。

开发笔记---写配置回读和静态配置定时回读

对硬件寄存器进行编程并经过一段时间后确定有效性的软件诊断方法。作为SDL的一部分包含的ip(安全ip), SDL提供了辅助api来协助实现这些诊断。每个模块都有一组具有通用命名的api,可用于完成推荐的诊断

  • 写配置回读:在SDL中,该模块提供如下命名的API,module是SDL模块名(如ESM、VTM),应用程序可以在执行模块的初始化或配置后使用该API来验证配置

SDL_<module>_verifyConfig(&config);

SDL_<module>_init(&config);

ret = SDL_<module>_verifyConfig(&config);

if (ret != SDL_PASS)

{

    // verification failed

}

else

{

    // verification passed

}

  • 静态配置回读:SDL中模块通常提供如下命名的API,该调用将为模块返回一组静态寄存器值。应用程序可以存储这些值,然后定期将它们与存储在内存中的期望值进行比较,以检查是否有任何静态寄存器更改

SDL_<module>_getStaticRegisters(&staticRegs);

每次完成新配置时,都需要更新静态寄存器的存储值。下面的伪代码提供了一个示例用法:

/* global reference memory */

SDL_<module>_staticRegs gStaticRegs;

int32_t setup_code(void)

{

    ...

    ret = SDL_<module>_getStaticRegisters(&gStaticRegs);

    ...

}

int32_t periodic_check(void)

{

    SDL_<module>_staticRegs localRegs;

    ...

    ret = SDL_<module>_getStaticRegsiters(&localRegs);

    if (localRegs != gStaticRegs)

    {

        // check failed

    }

    else

    {

        // check passed

    }

    ...

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值