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:仅当整个闪存被擦除时、ECC 组7上的 Uniflash 验证错误

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/877639/tms570ls3137-uniflash-verification-error-on-ecc-bank-7-only-when-entire-flash-is-erased

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

大家好、我在 TMS570上遇到了闪存编程问题。
下载包含 ECC 的映像文件时、自动 ECC 被禁用、验证将失败进入包含 ECC 的闪存组0xf0407FF0。

仅当我执行以下步骤时才会发生此问题:
1 -整个闪存被擦除、Uniflash 时我按下"擦除闪存"按钮
2 -关闭然后打开 TMS570LS3137
3-下一个'Load Image'将验证 ECC 故障转移到背面0xf0407ff0

如果我在不关闭的情况下执行相同的操作、则不会发生错误、编程成功。

如果取消整个闪存、为什么 Uniflash 会出错、否则后续编程会正确进行?

感谢您的支持

Davide

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

    您好!

    程序闪存的 ECC 空间为0xF040_0000 +偏移。 如果您只加载程序并使用自动 ECC 选项、会发生什么情况?

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

    如果我使用 AutoECC 选项、我没问题、ECC 组7已正确编程、但 ECC 内容不同。 如果我们在程序前设置黑色复选选项、则第一次失败、但第二次成功。 我们尝试使用 ELF 文件和二进制文件。 对于我们来说、UniFlash 存在第一次对组7进行编程的错误。

    谢谢

    Davide

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

    您好、Davide、

    编程闪存空间来自        0x0000_0000至0x00FF_FFFF

    程序闪存的 ECC 空间为 0xF04_0000至 0xF04F_FFFF

    EEPROM (组7)为   :0xF0200000 ~ 0xF03FFFFF

    EEPROM (组7) ECC: 0xF0100000 ~ 0xF013FFFF

    我的理解是、您将代码加载到编程闪存、而不是 EEPROM (组7)。

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

    您好报价、

    否、否则它将永远不起作用。  在我的链接器文件的以下部分:

    存储器

    /*闪存3Mib*/
    引导程序(X):origin=0x00000000 length=0x00000020
    代码1_FLASH (RX):origin=0x00000020 length=0x00047FE0 vfill=0xFFFFFFFF
    代码2_FLASH (RX):origin=0x00048000 length=0x00138000 vfill=0xFFFFFFFF

    /* ECC 区域*/
    ecc_vectors (R):origin=0xF0400000 length=0x000004 ecc={input_range=vectors、algorithm、fill=true}
    ECC_CODE1_FLASH (R):origin=0xF0400004 length=0x008FFC ECC={input_range=CODE1_FLASH、算法=算法、fill = true}
    ECC_CODE2_FLASH (R):origin=0xF0409000 length=0x027000 ECC={input_range=CODE2_FLASH、算法=算法、fill = true}

    …………

    问题是在 TMS570LS3137为 Virgin 之后(整个闪存填充为0xff)、UniFlash 写入和检查 ECC_CODE1_FLASH 的唯一时间。

    所有后续编程都成功。 这很奇怪。

    Davide

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

    您好、 Davide、

    如果使用链接器 cmd 来生成 ECC、则在将代码加载到闪存时:

    1. 必须取消选中自动 ECC 生成

    2. 在必须取消选中程序加载之前执行空白检查

     3.闪存验证设置必须为“无”

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

    您好 QJ、

    1. 必须  取消选中"Auto ECC Generation (自动 ECC 生成)   "-->" OK (确定)"

    2. 在 必须取消选中程序加载之前执行空白检查  -->确定

     3.闪存验证设置 必须 为“无”  -->否, 设置为“验证”。 为什么我无法验证、如何确保正确写入闪存?

    我重复一遍、验证仅在  TMS570LS3137 是  Virgin 之后的第一次失败 (整个闪存用0xff 填充)。

    谢谢

    Davide

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

    您好、Davide、

    闪存组宽度为144位宽、包括128个数据位和16个 ECC 位。 在标准读取模式或流水线读取模式下、一次读取128位数据和16位 ECC。

    如果启用了"自动 ECC 生成"、CCS 加载程序将为每128位数据生成16位 ECC、并将这些144位数据一次编程到闪存中。

    如果使用链接器生成 ECC、则在链接阶段使用 obj 文件生成 ECC 数据、并将 ECC 数据放入 out 文件中。 加载数据时、加载器将首先对整个数据段进行编程、然后对 ECC 段进行编程。 如果启用了数据验证、则写入的数据(加上16位 ECC)将每128位写操作回读一次以进行验证、但此时 ECC 数据尚未编程。 因此将生成 ECC 错误、并且错误引脚也将被置位。