您好!
首先、我必须说、这个 SafeTI 文档非常糟糕(并且示例项目几乎和文档一样糟糕、因为这些项目在启动时没有使用 SafeTI 功能、也没有执行所有测试、而 IAR 和其他测试有一些细微的差异... Windows 风格的"帮助"就像一个笑话、它看起来是从源代码生成的、而不提供任何有用的信息。
您还提到了 SafeTI 示例只是一个示例的每个地方-我想说它只是一个_坏_示例:)并且实施者有责任选择正确的测试并正确执行...
-如果该示例得到正确的制作、则此工作将会更加简单->在引导中执行所有可能的测试等。这样人们就可以基本地敲入代码以离开必要的测试、现在您实际上必须从头开始执行所有操作。 当每个人都必须单独确定事情时、适当的示例还可以为实施者节省数千小时的工作量。
我在这里只列出我遇到的几个问题
===========================
问题1)哪个测试类型映射到安全手册中的哪个唯一标识符?
例如、让我们看看闪存/ECC、SafeTI 提供了这种测试类型
- FEE ECC 数据校正模式
- FEE ECC 测试模式1位
- FEE ECC 测试模式2BIT
- FEE ECC SYN_REPORT_MODE
- FEE ECC 故障_MODE1
- FEE ECC 故障模式2
- FLASH_ECC_TEST_MODE_1位
- FLASH_ECC_TEST_MODE_2BIT
- FLASH_ECC_ADDR_TAG_REG_MODE //例如、这在引导序列中的#if 0内
- FEE ECC ADDR_TAG_REG_MODE //例如,没有人在引导序列中调用此操作
和列出了闪存函数的以下唯一标识符
FEE1 FEE 数据 ECC SL_SelfTest_Flash //注意、闪存功能测试 FEE
FLA1闪存数据 ECC SL_SelfTest_Flash
FLA10闪存包装程序诊断模式5测试 sl_SelfTest_Flash
FLA11闪存包装程序诊断模式7 SL_SelfTest_Flash
奇偶校验逻辑 SL_SelfTest_Flash 的 FLA12软件测试
所以我们有5个唯一的标识符和3个测试类型 这意味着某些测试类型会使多个唯一标识符成为唯一标识符、但哪些是唯一标识符?
这些用于 FEE 功能:
FEE8闪存包装程序诊断模式1测试 SL_SelfTest_FEE
FEE9闪存包装程序诊断模式2测试 sl_SelfTest_FEE
FEE10闪存包装程序诊断模式3测试 SL_SelfTest_FEE
FEE11闪存包装程序诊断模式4测试 SL_SelfTest_FEE
- 4个唯一标识符和7个测试类型(显然需要多个测试类型来填充一个唯一标识符、但填充哪个是唯一标识符)
================================================================
问题2)是否允许修改 SafeTI 的源代码(通常情况下不会这样说)、通常情况下、安全软件会提供 CRC 或其他一些方法来验证源代码是否完整。
——这在任何地方都没有说过……
由于 sl_ESM、SafeTI 代码无法与(OS 和)传统中断一起使用。 在中断处理函数中包含__IRQ 和__Fiq 关键字(当然包括任何文档),这将导致堆栈/PC 损坏,同时在调用这些函数后尝试返回到高级 IRQ 处理程序...
================================================================
问题3)对于故障插入测试类型、返回值没有意义、即返回给它的值。 我们以 PSCON_SELF 测试错误强制_FAULT_INPUT. 在这种情况下、没有人提到不应检查返回值。
tStatus.stResult = ST_FAIL;
BRT = sl_SelfTest_PSCON (PSCON_selfTest_error_Forcing_FAULT_Inject,true,&tStatus);
DBG_PRINT ("Ret:%u、Stat:%s\r\n "、 Bret、tStatus.stResult = ST_PASS? “通过”:“失败”);
-->
RET:1、Stat:失败
和
tStatus.stResult = ST_PASS;
BRT = sl_SelfTest_PSCON (PSCON_selfTest_error_Forcing_FAULT_Inject,true,&tStatus);
DBG_PRINT ("Ret:%u、Stat:%s\r\n "、 Bret、tStatus.stResult = ST_PASS? “通过”:“失败”);
-->
RET:1、STAT:通过
===========================
问题4)对于窗口帮助和源代码,请参阅过时的函数 SL_SelfTest_PBIST_ExecStatus()
===========================
问题5) SafeTI 安全手册第6.1章规定、应遵循_may _中所述的 init 命令... 很好、示例在这里有一些东西、但没有任何东西映射到任何东西... 没有人提到、例如、在使用 SafeTI 函数执行此操作时、此阶段包含什么内容
是所有这些还是其中的一部分、还是 IT 实施者的决定????
- SRAM_PAR_ADDR_CTRL_self_test
- SRAM_ECC_ERROR_ENCERAING_1位
- SRAM_ECC_ERROR_性能 评测
- SRAM_ECC_ERROR_ENCED_2BIT
- SRAM_RADECODE_DIAGNOSTICS //这在相位~42 ESMInit()之后的 SafeTI 示例中运行
- SRAM_LIVECLOCK_DIAGNOSTICS //在示例引导序列中根本不运行
===========================
问题6)如果启用了 FIQ 中断(不想显示哪些中断:)、那么至少在调试器复位后、无法运行 SafeTI 示例中的某些启动时间测试- CPU 崩溃到未定义的指令也是很好的... 调试器复位后、CPU 寄存器中的 FIQ 为1、但
===========================
问题7) sl_config.h 中的堆栈定义是愚蠢的、+甚至不在 SL_ASM_API_IAR.asm 中使用这些定义!!!! 它再次定义了这些内容,甚至不包括 sl_config.h :)。 因此、如果不想使用默认设置、您必须将自己的 ASM-function 写入初始化堆栈、因为只有其他选项可以修改 SafeTI 源代码。
此外、IAR 设置堆栈的链接器脚本很糟糕、通过"微调"、您可以定义堆栈、以便仅在一个位置(在链接器文件中)给出长度、并且链接器还会监控为堆栈保留的空间是否未超出- 当前的 SafeTI 解决方案远不及这个问题--必须编写自己的堆栈初始化函数,该函数使用链接器提供的符号,如 SVC_STACK_$LIMIT。
===========================
问题8) Init 文档没有提及任何内容。 _errata_CORTEXR4_66_()、ja _errata_CORTEXR4_57_()和 errata_PBIST_4 ()。 执行这个操作的实际正确位置是什么、HalcogGen 代码有很多错误、以至于没有石膏、HalCoGens 对于这些错误的放置是正确的...
关于 errata_PBIST_4 (),您明确地推荐了论坛中不应使用 select.c 例程而应使用 SafeTI-routines 的每一个地方--这不是例程,因此必须根据建议使用 select.c。。。
===========================
问题9)由于某些自检.c 功能仍在使用,因此需要在自检故障通知()中实现某些功能,因为此函数可能从某个位置调用... SafeTI 文档不会指导用户在此处放置一些合理的代码
===========================
问题10) SafeTI 文档不提供任何检查列表、如9中提到的问题已得到处理...
===========================
问题11) FIQ 和操作系统(操作系统)以及 FIQ 中断不能被屏蔽(除非手动将 CPU 更改为 FIQ 模式)这一事实、文档中对此没有提及、如果尝试使用 FIQ 处理程序中的操作系统服务、则必须进行一些特殊处理... 尚未真正对此进行过控制,但至少 uC/OS 会尝试禁用 CPSR 中的 IRQ&FIQ 位(启用 FIQ 后无法禁用),之后,操作系统会相信在执行自身的神奇操作时不会发生上下文切换。 通过简单看、看起来不能从 FIQ 调用 OS 例程、因此、如果 ESM 变为高电平、则需要使用其他一些方法来处理它... 可能其他一些操作系统或 uC/OS 端口已经解决了这个问题。
===========================
这些已发布的产品中有"百万"件、但我在此停留、这只是表明 SafeTI 成熟度远远没有"仅将"安全集成到项目中。 我花了几天时间(实际阅读数周)来制作链接器脚本、拥有 ASM 堆栈初始化程序、正确的引导序列(甚至还没有完成)、方法是使用 SafeTI 功能"仅"、它能够通过 RAM pbist&init 存储测试结果... 我100%确定每个人都必须遇到相同的情况、首先弄清为什么在启动中的特定测试完成后会给出用于调试器复位的未定义指令、为什么即使在 sl_config.h 和链接器中正确设置了所有内容、堆栈也会溢出等等 (这些设置不会帮助 ASM 覆盖它们:)(不有趣)...
我还100%确信、如果编码和 Hercules 安全功能方面的专家能在几天内让当前的 SafeTI 示例变得近乎完美-我想知道 TI 为什么没有这么做、那么当前的情况与营销材料相去甚远... 当前示例编译就是这样。 修复此示例后、需要更多的时间来修复文档、当前唯一的标识符列表以及到 SafeTI 函数的映射(当然没有测试类型...) 它仅提供有价值的信息...