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.

[参考译文] 单闪:Uniflash 无法使用“vfill”函数在未使用的闪存地址中对 ECC 进行编程

Guru**** 2398735 points
Other Parts Discussed in Thread: UNIFLASH, TMS570LS1114, TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1134670/uniflash-failed-to-program-ecc-in-unused-flash-address-with-vfill-function

器件型号:UNIFLASH
主题中讨论的其他器件: TMS570LS1114TMS570LS3137

大家好、

我的客户使用 Uniflash 对 TMS570LS1114进行编程、并使用 TI cmd 链接器文件为所有闪存地址生成 ECC。

但有时 Uniflash 无法成功将正确的 ECC 编程到未使用的闪存地址。

下面是成功编程的情况与失败的情况的比较、两者都是相同的编程设置和相同的编程进度。

Uniflash 设置:

成功编程的情况:请参阅视频的最后几秒钟、未使用的闪存地址的值由 ECC 编程。

未成功编程的情况:请参阅视频的最后几秒钟、未使用的闪存地址的值仍然为0xFFFFFFFF、未使用 ECC 编程。

但是、当客户使用"填充"而不是"vfill"函数来填充闪存 ECC 时、也会将0x5A5A5A 编程到未使用的闪存中、而不是像 vfill 方法那样使用0xFFFFFFFF、那么到目前为止似乎没有发生未成功的情况。

我注意到发布了类似的问题、即"vfill not programmed with ECC"。

您能否提供帮助建议:对于未使用的闪存地址、uniflash 是否只能识别由 fill 命令生成的 ECC? Uniflash 无法识别为未使用的闪存生成的 Vfill ECC?

如果是、为什么?

谢谢!

此致

云晶

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

    您好 Yunjing、

    应检查"整个闪存"以对未使用的闪存及其 ECC 空间进行编程。  

    使用的是哪个版本的 Uniflash?

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

    下面是有关 fill 和 vfill 之间差异的一些信息。  Vfill 在编程前需要执行擦除步骤。

    以下两者之间的区别是什么:

      FLASH0 (RX) :origin=0x00000020 length=0x001FFFE0 vfill = 0xffffffff

      FLASH0 (RX) :origin=0x00000020 length=0x001FFFE0 fill = 0xffffffff

    前者(vfill)不会导致链接器在指定的整个区域内输出0xFFFFFFFF 的填充值。 相反、当链接器计算 ECC 区域的数据值时、它指示链接器将存储器区域视为填充了0xFFFFFFFF。

    后一个(填充)将实际输出闪存的所有闪存内容以及填充数据。

    当使用较慢的调试探针(如 launchpad 中包含的 XDS100类探针)时、这两个选项之间的差异主要很明显。 使用 vfill 将导致下载大小等于程序的大小加上 ECC 数据(大约512K)。 而使用'f填 充'指令意味着即使对于小型'blinky'程序也要下载4MB 映像。

    假设闪存在编程前被擦除-这两种选择都将导致闪存被编程为每个地址具有有效的 ECC 内容-但基于 vfill 的.out 文件程序大约需要1分钟而不是4-5分钟。

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

    谢谢 John。 我与客户进行了电话会议、他们了解 vfill 和 fill 之间的区别。 除了异常矢量表(前8个32位字)外、它们对整个闪存使用 vfill。 假定未使用的闪存内容为0xFFFFFFFF、并且 ECC 值包含在*。out 文件中、则计算未使用闪存的 ECC 值。 正确、在加载程序之前必须擦除整个闪存。

    Uniflash 用于将*。out 文件加载到其产品线中的 MCU 闪存中、并对大多数电路板进行正确编程。 他们注意到、一些电路板未成功编程:代码及其 ECC 已正确加载、但未使用闪存的 ECC 未编程。 重新加载无法解决问题。 但是、在上电复位后、可对电路板进行正确编程(使用的闪存和未使用的闪存)。   

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

    您好、Qingjun、John

    客户使用您列出的"Entire flash Erase option"、uniflash 版本7.1.0.3796。  

    擦除过程条指示所有闪存已成功擦除。

    但是、 如 Qingjun 所述、使用 vfill 方法仍然无法将 ECC 加载到未使用的闪存中。

    在使用 vfill Generate ECC 时、您能否检查 Uniflash 是否需要任何其他额外配置? 或者 、此版本 Uniflash 和其他版本的任何更新都可以解决此问题?  

    谢谢!

    云晶

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

    Yunjing、感谢您提供详细信息。

    Meng 博士在会议呼叫中提到、他可以通过重现此问题

    1.启用“自动 ECC 生成”,加载代码 -->闪存被擦除,但代码加载失败

    2.禁用"自动 ECC 生成"、然后加载代码、-->产生问题(未使用的闪存的 ECC 未编程)

    我尝试过这种方法、但无法重现问题。  

    您能否向 Meng 咨询如何重现此问题? 谢谢

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

    您好、清军、

    他们使用相同的流程重现问题。 但您使用的是哪一个 TMS570项目? 似乎客户共享的 TMS570LS3137代码在 cmd 文件中不包括 Vfill 和 ECC 生成、您需要将这个部件添加到代码中。

    更新您的信息、当客户重现问题时、他们仍然能够擦除所有闪存地址值、并且所有值可擦除为0xFFFF。 但是、当它们完成擦除、然后加载程序(通过 vfill 方法生成的 ECC)时、仍然无法成功对未使用的闪存 ECC 进行编程。

    请告诉我、如果您找到了一种方法来重现此问题、并获得解决此问题的任何解决方案。 谢谢!

    此致

    云晶  

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

    关闭此帖子、因为已 离线跟踪。