This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好
我在 sdl_ex_ram_ecc_quitance_test.c 文件中有以下问题:
在 runCorrectableECCTest 和 runUncorrectableECCTest 中 、为什么要遵循该序列?
1.浏览 M0 RAM 位置、直到每个位都注入了一个单位错误。
2.遍历 M0 RAM 位置,直到低16位 (位6:0)的每个 ECC 位都有一个错误注入该位置。
3.遍历 M0 RAM 位置,直到高16位 (位14:8)的每个 ECC 位都有错误注入该位置。
为什么选择只测试 M0而不测试 M0和 M1? 我在我的项目中使用的是 M0和 M1、我应该为两者实施测试还是测试 M0是否足够?
3 -在我的项目中、我还使用 LS0和 LS1、我需要对它们运行 RAM ECC 测试?
4-为什么选择在 LS1上运行奇偶校验,在 M0上运行 ECC 测试? 我的意思是没有涵盖在奇偶校验和 ECC 测试中记忆的所有内容?
5-为什么要在测试结束时每循环一次而不是每次将原始数据加载到 m0Data (Restore m0Data)中?
谢谢。
1.为执行 ECC 逻辑的全面测试,我们测试每一位数据和 ECC 中的错误检测。 这使测试具有更高的诊断覆盖率、然后只测试一两个位。
2.我们刚刚演示了 M0作为示例,但是您应该对所使用的每个 RAM 模块重复测试,所以您应该测试 M1。
3. LS0和 LS1没有 ECC。 它们只有奇偶校验、所以您应该测试奇偶校验逻辑。
4.存储器有 ECC 保护或奇偶校验保护、但不能同时具有 ECC 保护和奇偶校验保护。 器件数据表中有一个表格、显示每个存储器具有哪种类型的保护。
5.将原始值写回到存储器位置会在向不同位注入错误之前再次将 ECC 更新为正确值(即覆盖注入的错误)。 虽然我想你可能会认为 runCorrectableECCTest()函数中不需要这个函数,因为硬件已经纠正了错误。
惠特尼
感谢您的回答、
执行以下步骤:
1.浏览 M0 RAM 位置、直到每个位都注入了一个单位错误。
2.遍历 M0 RAM 位置,直到低16位 (位6:0)的每个 ECC 位都有一个错误注入该位置。
3.遍历 M0 RAM 位置,直到高16位 (位14:8)的每个 ECC 位都有错误注入该位置。
为什么您在单次触发中对数据进行测试、但在两个阶段中对 ECC 位进行测试、一个阶段从0:6位开始、另一个阶段从8:14位开始?
循环被分割只是因为低数据、高数据和地址的 ECC 位彼此不相邻——它们之间跳过了一个位。
TRM 中有一个显示映射的表。
惠特尼
感谢您的回答、
在 runCorrectableECCTest 中、在检查 第三个循环中 errorAddr 的部分(从8:14开始的 ECC)。 为什么要将 1UL 添加到(uint32_t)&m0Data?
if (errorAddr!=(((uint32_t)&m0Data)+ 1UL))
在 m0Data = 0xAAAA5555U;中,我能知道您为什么选择这个地址吗?
如果我在 M1上进行测试、我可以使用什么地址范围来在 M1上执行相同的测试? 当我开发相同的测试但针对 M1时、您是否有我应该考虑的特定建议?
、位于 runCorrectableECCTest 中、其中的部分检查了 第三个循环中的 errorAddr (从8:14开始 ECC)。 为什么要将 1UL 添加到(uint32_t)&m0Data?
如 TRM 中所述、这些 ECC 位用于数据的高位字、因此我们专门添加1来寻址32位变量 m0Data 的高16位。
in m0Data = 0xAA55U;,我能不能知道为什么选择这个地址? [/报价]0xAA5555只是分配给存储器位置的随机值-您可以选择任何内容。 m0Data 的地址由链接器确定、但应用程序告诉它使用#pragma DATA_SECTION (m0Data、"ramm0")确保该值位于 M0中
在 M1上执行相同测试时,可以使用什么地址范围? 当我开发相同的测试但用于 M1时,您是否有我应该考虑的特定建议?可以针对 M1执行类似的操作、其中在链接器命令文件中的 M1内定义一个段、然后使用#pragma DATA_SECTION 通知链接器将您的测试变量放置在该段中。 器件数据表将告诉您什么地址范围适用于 M1RAM。
惠特尼
[/quote]
我使用 M0的相同方法来测试 M1、相同的初始化步骤、创建了随机值、并使用与 示例类似的#pragma DATA_SECTION 将其分配给 RAMM1。
我是否需要考虑与 M0不同的任何内容? 我是否需要启用 RAMM1的可纠正错误中断?
除了错误注入位置的位置以及传递给错误注入函数的 MEMCFG_SECT_M1值之外、不应有任何其他变化。 但是、您需要注意的一点是堆栈的位置。 如果堆栈在 M1中、您可能会遇到代码无法正常运行的问题、因为堆栈存储器处于测试模式、因此行为不正常。 如果不调用 MemCfg_setTestMode ()函数将其重写为裸机寄存器写入以避免在启用测试模式时使用堆栈,则可能会有所帮助。
在可纠正的错误函数中,您没有检查范围16:23
该区域用于地址 ECC。 地址 ECC 错误始终是不可纠正的。
惠特尼