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.

[参考译文] TMS570LS3134:代码单元和 ECC

Guru**** 1969805 points
Other Parts Discussed in Thread: TMS570LS3134, NOWECC, UNIFLASH, HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1437101/tms570ls3134-code-exuction-and-ecc

器件型号:TMS570LS3134
主题中讨论的其他器件: NOWECCUNIFLASHHALCOGEN

工具与软件:

您好!

我目前正在尝试将 ECC 集成到我的代码中、但我有一些问题。 现在有两种类型的执行、第一种是 XIP、代码直接从闪存执行;第二种是将代码复制到 RAM 并从 RAM 执行、但我找不到 TMS570ls3134所使用的类型。  

此外、对于应用于 RAM 的 ECC、我了解到、当数据写入 RAM 时、计算 ECC 位并将其放入相应的地址、然后当从 RAM 读取数据时、会使用计算出的 ECC 位执行检查、如果出现错误、则会进行校正;如果出现两个错误、则会生成中断。 但我不知道闪存的工作原理、我知道必须使用 nowECC 生成 ECC 位、但如何对闪存进行检查呢?

感谢您的帮助!

A. K

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、A. k、

    [报价 userid="620632" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1437101/tms570ls3134-code-exuction-and-ecc "]现在有两种类型的执行:第一种类型(XIP)代码直接从闪存执行;第二种类型的代码复制到 RAM 并从此处执行、但我找不到 TMS570ls3134使用的类型。

    此处、代码直接从闪存执行。

    [报价 userid="620632" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1437101/tms570ls3134-code-exuction-and-ecc 此外、对于 ECC 应用于 RAM 时、我了解到、当数据写入 RAM 时、将计算 ECC 位并将其放入相应的地址、然后当从 RAM 读取数据时、将使用计算出的 ECC 位执行检查、如果出现错误、将纠正错误、如果出现两个错误、将生成中断。

    您完全正确地了解 RAM 中的 ECC 处理。

    [报价 userid="620632" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1437101/tms570ls3134-code-exuction-and-ecc ]但我不明白它是如何为闪存工作的。我知道我必须使用 nowECC 生成 ECC 位、但如何检查闪存?[/QUOT]

    在这里计算 ECC、并将其与代码一起编程到闪存中相应的 ECC 部分中。

    因此、正如下面 pic 中突出显示的那样、存储器闪存和闪存 ECC 中有两个部分。

    应将代码编程到闪存中、相应代码的 ECC 应编程到闪存 ECC 部分中。 启用以下复选框后、CCS IDE 或 UniFlash 将处理此操作。

    CCS IDE:

    UniFlash:

    此后、如果我们启用了 SECDED 模块、则每当进行代码提取时、都会使用其 ECC 验证相应的代码、如果存在 ECC 错误、则会设置相应的 ESM 标志或中断。

    有关更多详细信息、请参阅 TRM 和数据表。

    ——
    谢谢、此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答、

    是否可以在此 MCU 上切换执行类型? 从就地执行切换到在 RAM 中执行。  

    我在 TRM 文档中看到过这种情况、但我不确定是执行交换还是仅仅是地址交换?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ahmet:

    根据我的知识。

    该存储器交换将仅交换 RAM 和闪存的地址。

    我的意思是、在执行该交换操作后、闪存地址将移动到0x08000000、RAM 地址将移动到0x00000000

    但文本程序仍只在闪存中、其 地址为0x08000000、因此执行该交换不会将闪存代码复制到 RAM 地址中。 此交换将直接交换闪存和 RAM 偏移地址。

    如果你想在 RAM 中执行部分代码、那么我建议你参考以下线程:

    (+)[常见问题解答] TMS570LC4357:适用于 Hercules 控制器的示例和演示(例如 TMS570x、RM57x 和 RM46x 等)-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您清除了有关闪存或 RAM 执行的内部演示。

    关于 ECC、我看到我已经在 CCS 选项中选中了 ECC 参数、因此当我刷写电路板时、ECC 位已被放入相应的内存空间中。 为了激活 SECDED 模块、我看一下 FEDACCTRL1 寄存器。

    对于3-0位、除0x05以外的任何值都将激活 SECDED 模块。  

    在我的程序中、SECDED 模块默认启用、这是否正常?

    在正常情况下、除了启用 ESM 中断之外、我还必须做其他事情吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ahmet:

    请参阅下面类似的问题主题:

    (+) TMS570LS1224:FEE - ECC 和 CRC 元数据-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jagadish:

    感谢您的指导。 在实施过程中、我遇到了另一个问题、我使用 Halcogen 生成了一个项目、并且启用了闪存和 RAM ECC。 在我的启动函数中、现在可以启用闪存/RAM ECC 并检查闪存/RAM ECC 函数。 在诊断模式下的检查闪存功能中、会生成 single-bit 和 multiple-bit 错误。 single-bit 错误会得到纠正、但其中的多位会产生中止。 在 dabort.asm 文件中、由于在诊断模式期间生成中止、因此程序继续执行、但其他:  

    如图中所示,它说它将"永远在这里分支"这是否意味着在现实生活多位错误的情况下,程序会卡住?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ahmet:

    如图片所示、它将"永远在这里分支"、这意味着在现实生活中多位错误的情况下程序会卡住吗?

    是的、对于多位错误、它将始终保持中止。 如果需要、您可以编写所需的软件复位 API。

    通常、对于多位闪存错误、最好在闪存中执行可能导致代码执行中出现不可预测的行为的代码。

    ——
    谢谢、此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jagadish、您好、感谢您的回答。

    我想测试发生真正多位错误的情况、我想或许在将 ECC 位刷写到 MCU 之前尝试先处理 ECC 位、但我不知道这是否可行。 此外、在我的应用程序中启用了看门狗、在由于多位而发生中止的情况下 MCU 会复位吗? 我是否有办法知道复位后多位导致了这种情况?

    感谢您的帮助!

    A. K

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、A.K.

    测试多位错误的最简单方法是使用器件上提供的诊断模式。

    您可以按照上述方法操作、并可创建 ECC 错误。 如果您需要此方法的代码、则可以在以下 SafeTI 诊断代码中找到它:

    SAFETI_DIAG_LIB 驱动程序或库| TI.com

    ——
    谢谢、此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jagadish:

    我已经使用诊断模式对闪存进行了测试、一切都按预期正常运行、对 single-bit 错误进行校正以及对多位错误中止。 但是、我在测试期间以及在 dabort.asm 文件中看到的是、如果在诊断模式期间发生中止、代码剂量不会真正中止。 我需要的是用实际情况对其进行测试、并且我想看到程序无法从中止命令返回。  

    我使用 RAM 进行了这方面的测试、能够获得导致多位错误的代码中止、并且在看门狗激活的情况下、我能够进入由它生成的中断。 我想使用闪存测试相同的操作、但我不知道这是否可能、因为 ECC 位是在闪存代码触发之前生成的。 我看到 nowECC 中有一些命令生成错误、但由于时间不够、我无法检查该命令。

    感谢您的帮助、

    A. K

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ahmet:

    [报价 userid="620632" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1437101/tms570ls3134-code-exuction-and-ecc/5542247 #5542247"]我想用闪存测试同样的内容、但我不知道这是否可行、因为 ECC 位是在闪存加法代码前生成的。 我看到 nowECC 中有一些命令生成错误、但由于时间不够、我无法检查它。

    可以尝试从 UniFlash 中执行允许过程。

    1.首先确保已在 UniFlash 中启用自动 ECC 生成选项。

    2.现在选择您的.out 文件并将映像加载到闪存中。

    3.现在使用 UniFlash 将闪存的某些部分数据导出到 bin 文件中。

    4.现在将导出的二进制文件打开到支持的工具中。

    5.现在根据要求更改数据位。

    6.更改.bin 文件中的数据位后、现在删除 UniFlash 中的"Auto ECC generation"选项

    7.同时确保您启用了"擦除"选项仅作为必要的扇区,以前它可以是"擦除完成闪存",但现在我们应该只选择必要的扇区。

    8.现在在步骤5中选择更改后的 bin 文件以从 UniFlash 进行刷写:

    并从导出的位置给出适当的加载地址。

    也许最好是外销和闪存的实习员的部门规模。

    9.由于我们禁用了自动生成功能、因此对于此数据、可能会将 ECC 仅视为旧 ECC。 因此、这个新数据应该会发生 ECC 故障。

    请尝试此方法、查看以下主题、了解有关使用 UniFlash 导出数据和进行闪存的更多详细信息。

    (+) RM48L952:闪存 EEPROM -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    ——
    谢谢、此致、
    Jagadish。

x 出现错误。请重试或与管理员联系。