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.

[参考译文] TMS570LS3137:损坏测试后闪存仿真 EEPROM 写入行为

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1623671/tms570ls3137-flash-emulated-eeprom-writing-behavior-after-corruption-test

器件型号: TMS570LS3137

您好:

在费用存储器损坏测试的背景下、我尝试更改节省费用的字节值、并检查启动时由于 CRC 机制、我们的应用程序是否能够在读取保存的数据时正确检测结果。

我们的应用程序初始化代码确实正在检测损坏的数据、但尝试在这里写回正确的值时、我有一些奇怪的行为。 在这一切之前,我们使用 TI_TI_ Fee_Init () 正确地初始化了费用。

似乎无法(或部分)以物理方式正确写入费用中的数据、即使该代码显示我们进入写入序列并使用 FlashAPI F021 写入函数也是如此。

image.png

然而、重新启动后、仍会检测到损坏、最终会正确写入数据。

我不理解之间的行为,因为你可以看到下面的绿色区域:

费用为 Blocks.dat image.png

上方的红色区域是用 2 个手动损坏的 Code Composer Studio(蓝色)刷写的初始数据、然后在中间(绿色区域)进行单独的重启尝试似乎写入仅部分有效、最后是黄色区域、一个启动序列设法正确写入数据且收费。

此外,请在这里找到从地址 0xF0200000 的费用转储。

测试中的调试器可能存在干扰吗? 之类的设置。

谢谢您、

此致、

Marc

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

    您好:Marc、

    您能告诉我虚拟扇区的数量、块的数量和每个块的大小吗? 您知道至少应使用 2 个虚拟扇区。 一个虚拟扇区的大小应大于所有数据块的总大小(加标头)。

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

    尊敬的 QJ Wang:

    虚拟扇区数量:2 个(每个为 32KB)

    块数:4

    块 1:160 字节

    块 2:800 字节

    块 3:8 字节

    块 4:8 字节

      

    在上面所示的测试中、使用 CCS 和 SEGGER RTT 调试器手动损坏块 1 和块 2(用蓝色字节标记)来刷写费用地址。

    感谢您的支持、

    此致、

    Marc

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

    您好:Marc、

    费用配置看起来正常。 您的项目使用了哪个 F021 闪存?

    应使用 F021_API_CortexR4_BE_V3D16.lib。  F021_API_CortexR4_BE_L2FMC_V3D16.lib 仅适用于 TMS570LC43x 和 RM57。

    我分析了您的数据。 以下是费用中的数据块摘要。 很抱歉、我无法上传文件。 将稍后重试。

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

    e2e.ti.com/.../6180.test.txt

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

    尊敬的 QJ:

    我确认我们正在使用  F021_API_CortexR4_BE_V3D16.lib。

    此致、

    Marc

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

    尊敬的 QJ:

    感谢您的分析,我看到您的工具正确解析了不同的 4 块,有几个点我不理解 :

    1) 在 0xF0200450 地址处、根据块标头 0xFFFFFFFF 0x00000000 0xF0200060 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF、对块 1 进行写入的新尝试似乎失败(我看到先前的有效地址  0xF0200060、与块 1 的位置匹配、块 1 具有一个自愿损坏的值)。 之后我们看到一些已部分写入的数据、  

    0xF0200498:0x00000002 0x00000002 ****错误:损坏的块-->写入的块 1 数据
    0xF02004A0:0xFFFFFFFF 0xFFFFFFFF 空块-->未写入块 1 数据
    0xF02004A8:0xFFFFFFFF 0xFFFFFFFF 空块
    0xF02004B0:0x00000002 0x00000002 ****错误:块损坏
    0xF02004B8:0xFFFFFFFF 0xFFFFFFFF 空块
    0xF02004C0:0xFFFFFFFF 0xFFFFFFFF 空块

    相同、  地址为 0xF0200508:地址、0xF0200508:0xFFFFFFFF 0x00000000 0xF0200118 0xFFFFFFFF 0xFFFFFFFF、尝试写入块 2 失败

    0xF0200520:0xFFFFFFFF 0xFFFFFFFF 空块
    0xF0200528:0xFFFFFFFF 0xFFFFFFFF 空块
    0xF0200530:0xFFFFFFFF 0xFFFFFFFF 空块
    0xF0200538:0xFFFFFFFF 0xFFFFFFFF 空块
    0xF0200540:0xFFFFFFFF 0xFFFFFFFF 空块
    0xF0200548:0x0000000A 0x0000000A ****错误:损坏的块
    0xF0200550:0xFFFFFFFF 0xFFFFFFFF 空块
    0xF0200558:0xFFFFFFFF 0xFFFFFFFF 空块

    2) 0xF0200830: 0xFFFFFFFF 0x00000000 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF

        0xF0200C00:0xFFFFFFFF 0x00000000 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF  

    似乎是一个未初始化的新块。

    3) 在  

    0xF0201088: 0xFFFF0000 0x00000000 0xFFFFFFFF 0xFFFFFFFF 0x03200002 块 2

    0xF02014C0:0xFFFF0000 0x00000000 0xFFFFFFFF 0xFFFFFFFF 0x00A00001 block1  

    此处复制了块 1 和块 2、现在标记为无效

    但最终:  

    4) 在

    0xF0202008:0xFFFFFFFF 0x00000000 0xFFFFFFFF 0xFFFFFFFF 0x00A00001  

    0xF020C0:0xFFFFFFFF 0x00000000 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0x03200002  

    两个块都已恢复并标记为有效、没有首先引入损坏的字节、这是预期的行为。

    总的来说、我不会放弃第 1)、2)、3) 点、这 对应于 系统重新启动、系统重新启动应启动恢复并写入有效块、因为它最终在步骤 4 中完成)。

    CCS 的测试和损坏可能会引发一些干扰、需要付费。 我可能会尝试其他方法!

    此致、

    Marc

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

    您使用了正确的闪存库。

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

    您好: Marc、

    请仔细检查 EEPROM 的等待状态是否设置正确。 根据数据表、160MHz 系统时钟处的等待状态应为 3。

    可以通过将 0x3 写入 EEPROM_CONFIG 寄存器:0xFFF8_72B8 的 EWAIT 字段来进行配置。

    代码位于 system.c 中:

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

    尊敬的 QJ:

    感谢您的反馈。

    我向您确认,我们在我们的项目中显示了 EEPROM 的等待状态:  

    总体而言、这种损坏测试代表了我们希望实现的一个稳健性案例。  

    如果是其他人、请返回给我、如何检查。

    谢谢、

    此致、

    Marc

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

    您好:Marc、

    我正在尝试更改一些节省费用的字节值、并通过 CRC 机制检查我们在启动时的应用程序是否可以在读取保存的数据时正确检测结果。

    我假设您使用闪存 API 手动更改了有效数据块的字节(将位“1"翻转“翻转为“0")“)。 如果您更改了数据、您是否更改了 数据块标题中的状态(有效-->无效)。

    如果您不手动中断数据字节、收费驾驶员是否正常工作? EEPROM 也受到 ECC 保护。

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

    尊敬的 QJ:

    我确实在尝试手动翻转收费块中的一些位、以模拟某种损坏、不使用闪存 API、而是直接使用 Code Composer Studio 调试(提供一个字节地址以及一个新值来刷写,并使用 SEGGER 闪存探针和软件触发闪存)。 此外、我不想将块状态更改为无效、因为我的测试损坏场景将只是在块数据区域的字节或更多字节上。

    关于您的问题:

    如果您不手动中断数据字节、收费驾驶员是否正常工作? EEPROM 也受到 ECC 保护。

    -->一般来说、收费驱动程序工作正常、只是使用 Code Composer Studio 进行的这种操作导致出现上述行为。

    如果我错了、我们不会为我们的项目激活 EEPROM 上的 ECC。 因此、我不确定这会产生什么影响。

    如果我对我的测试有进一步的观察、我会再次与您联系。

    谢谢!

    此致、

    Marc

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

    好的、谢谢!