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.

[参考译文] AM2612:与闪存擦除相关的问题 AM2612

Guru**** 2673945 points

Other Parts Discussed in Thread: UNIFLASH, AM2612, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1579841/am2612-problems-related-to-flash-erasure-am2612

器件型号: AM2612
主题中讨论的其他部分: UNIFLASHSYSCONFIG

我正在使用 UniFlash 9.1.0 擦除 AM2612 的闪存。 我在“Settings & Utilities“中选择“Custom Flasher“、然后使用文件“flash_JTAG_uniflash.out"进行“进行擦除。 擦除后、我还使用 UniFlash 的 MEMORY 函数读取闪存地址、具体来说是如此  0x60081000 。 我发现被擦除的闪存的内容变成 00000000 或 FFFFFFEE,而不是预期的 FFFFFFFF。 此问题会阻止闪存在我将程序写入后正确引导。 如何解决这个问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    擦除后、我还可以使用 UniFlash 的 MEMORY 函数来读取闪存地址、特别是  0x60081000 .

    我认为外部闪存的存储器读取是无效的 (TI 的 TBC)、因此您看到的数字可能是垃圾的、不代表实际的闪存内容。 请参阅以下内容: AM263P4-Q1:UniFlash 特性请求:OSPI 闪存的存储器读取 — 基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

    此问题会阻止闪存正确引导

    请考虑、由于存储器读取不起作用、原因可能不是闪存内容。

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

    尊敬的 Zhou:

    通过 uniflash 擦除后、您可以尝试使用 CCS 中的内存浏览器功能来读取闪存。 为此、您可以运行一个在 SysConfig 中启用了 DAC 模式的 OSPI 示例。

    因此、一旦闪存打开完成、在“Memory Browser“中输入闪存地址、闪存内容将会可见。 此步骤可用于确保正确擦除闪存

    完成闪存后、可以使用相同的方法来检查闪存内容、以确保代码正确刷写。  

    您能在设置中尝试一下吗?

    此致、

    Aswin

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

    尊敬的 Kier:

        很抱歉、由于一些问题导致延误。 我可能错过了一些补充信息。 我使用自己的控制板、而不是 LaunchPad。 此闪存器可在除此闪存板之外的其他 7 块电路板上正常进行擦除、编程和引导。 大小  OSPI (4S)-四路读取模式  引导、但只有一个板在擦除过程中遇到问题。 我运行了 QSPI_FLASH_IO_am261x 测试程序、结果显示  [Cortex_R5_0]所有测试均已通过!! 、表示我的硬件工作正常。

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

    尊敬的 Zhou:  

    通过 uniflash 刷写内容后、您是否已检查闪存转储? 请使用启用了 DAC 的 CCS 内存浏览器来检查闪存转储。

    此外,在闪烁后,当您尝试引导时,什么是 osbervation ?

    此致、

    Aswin

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

    尊敬的 Zhou:

    在开发引导模式下重新启动后、您可以运行在 SysConfig 中启用了 DAC 的 ospi 示例 (ospi_flash_io)。 电路板驱动程序打开后、只有您应该通过存储器浏览器检查闪存。  

    如果您有任何混淆、请告诉我、我将提供详细的操作步骤。

    关于闪存擦除、实际需要什么? 例如、对于闪存擦除、您可以在 ospi_flash_io 示例中检查闪存擦除 API。 该示例确实演示了闪存的擦除

    此致、

    Aswin

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

    尊敬的 Aswin:

       您的意思是、在通过 UniFlash 擦除闪存后、我应该在开发引导模式下重新启动并运行 OSPI 闪存 IO 示例来检查闪存是否已擦除?
    我会尝试一下并查看结果。
    我的实际目标是将代码编程到闪存中并使其启动。 但是、根据我在其他 AM261 电路板(来自以前的工程,也是我们的定制电路板)的经验、少量电路板存在错误:如果闪存未完全擦除到 0xFFFFFFFF、但在使用 UniFlash 进行擦除后擦除到 0xFFFFFFFF、没有多少调试操作可以解决这些电路板上的闪存问题。
    但是目前、该工程中的所有 AM261 电路板都遇到了这个问题、即使原理图中与闪存相关的部分与前一个工程相同也是如此。 因此、我想完全解决这个问题。
    此致。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Zhou:

    在所有情况下、uniflash 存储器读卡器可能无法提供准确的视图。 在您提到看到 0xFFFFFFEE 后的用例中、为了 再次确认它、我提到了另一种使用内存浏览器的方法。  

    若要通过存储器浏览器查看闪存内容、您需要启用 DAC。 在 前面的方法中、我想您在简单连接到目标后检查了闪存。 这是不够的。 您需要运行一个示例来打开 DAC、然后通过存储器浏览器查看闪存地址空间。 同样、刷写内容后、可以检查闪存区域以查看其是否已正确刷写。

    上一个项目在这里意味着什么、这是哪一个设备?  

    此外、为了消除对闪存器的任何疑虑、您可以尝试在 SDK 中使用定制闪存器吗? 请按照以下步骤将闪光灯适应您的闪存器件、

    1.在 CCS 中打开 JTAG_uniflash 项目、它位于以下路径中:tools/flasher/JTAG_uniflash。

    2:根据您的板调整闪存和 ospi 配置。 由于 ospi_flash_io 示例在您的用例中工作、因此您只需要将此工程(闪存和 OSPI)的 SysConfig 配置与 ospi_flash_IO 工程的配置对齐

    3、该项目构建完成后。  

    4.现在,在 unfilash GUI 应用程序中,使用此自定义闪存器,勾选自定义闪存器选项并填写路径和闪存器名称,如下所示。

    您是否可以尝试使用自定义闪存器进行刷写、使用 CCS 存储器浏览器(启用 DAC)验证闪存操作的结果?

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
       您的意思是、我通过 UniFlash 擦除闪存后、应该在开发引导模式下重新启动并运行 OSPI 闪存 IO 示例以检查闪存是否已擦除?

    是的、您回答正确。 您可以运行示例并 在 打开闪存后暂停。 由于 DAC 在 SysConfig 中保持启用状态、因此您可以在“Memory Browser“中输入闪存地址并查看闪存的状态。

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

    尊敬的 Aswin:  

       非常感谢。 问题已解决。 我将 syscfg 文件的配置复制到 flasher_jtag_uniflash_am261x_lp  SDK 中的工程中、在前面设置一个断点 Drivers_close()、然后通过 CCS 地址读取进行检查。 地址 0x60081000 全部变为 0xFFFFFFFF。 当我使用 UniFlash 读取时、它也显示 0xFFFFFFFF。 果然、完成此操作后、我可以成功地对闪存进行编程。
    我想示例程序也有闪存擦除功能? 之前的闪光灯可能不稳定。
    此外、我想问:除了 UniFlash 之外、是否有任何可以替换 UniFlash 以对闪存进行编程的示例? 因为有一些示例可以替换 UniFlash 以擦除闪存。
    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Zhou:

    Flasher 是在场景后面工作的代码、用于在 UniFlash GUI 工具中擦除以及刷写(写入)外部闪存。

    通过 将 flasher_JTAG_uniflash_am261x_LP 工程的输出文件用作自定义闪存器、也可以 使用 UniFlash GUI 工具刷写应用程序。  

    如果您想使用 Uniflash 刷写/擦除外部闪存、 请参阅此工程

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM261X/10_02_00_15/exports/docs/api_guide_am261x/EXAMPLES_DRIVERS_SBL_JTAG_UNIFLASH.html

    这是一个 CCS 工程、可用于通过 JTAG 刷写应用程序映像。  

    您还可以查看 UART uniflash 工具

    https://software-dl.ti.com/mcu-plus-sdk/esd/AM261X/10_02_00_15/exports/docs/api_guide_am261x/TOOLS_FLASH.html#TOOLS_FLASH_UART_UNIFLASH

    此致、

    Aswin

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

    尊敬的 Aswin:

       我尝试使用您之前提到的 examples/drivers/boot/sbl_JTAG_uniflash 中的示例程序来对闪存进行编程。 输入文件地址后、当我输入闪存偏移量 0x81000 时、为什么控制台显示函数地址为 0x70040020? 如果我输入 1 并按 Enter 键、程序会立即提示验证错误。 完整的控制台输出如下所示:

    [Cortex_R5_0]  
     
     ==================
     JTAG Uniflash Menu
     ==================
     
     1: Erase Complete Flash
     2: Write File to Flash and Verify
     3: Verify file in Flash
     
     x: Exit
     
     Enter Choice: 3
    
     Enter file name along with path to write or verify : C:/A01Projects/A03github/LV_am261x/LV/LV_Release/LV_AM2612.appimage
     Enter flash offset (in hex format) : 0x81000
     Enter below command in CCS scripting console to load the file data to memory.
     AFTER the file load is done, enter '1' to continue ...
    
     loadRaw(0x70040020, 0, "C:/A01Projects/A03github/LV_am261x/LV/LV_Release/LV_AM2612.appimage", 32, false);
    1
     [FLASH WRITER] Verify Failed !!!

    闪存编程错误是否由错误的第一个地址引起? 如果是、应如何修改? 我注意到 0x70040020 来自  

    uint8_t gFileBuf[FILE_MAX_SIZE] __attribute__((aligned(128), section(".bss.filebuf")));

    如果第一个地址正确、为什么无法将程序编程到闪存中? 如何解决这个问题? (我也无法使用 Uniflash 对程序进行编程。 即使 Uniflash 显示编程成功、通过 CCS 从 0x60081000 读取的十六进制内容也明显异常。) 谢谢你。

    此致

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

    尊敬的 Zhou:  

    因为我是 OOO、所以很抱歉耽误了我的时间。

    1.我假设闪存配置是正确的,如前面的答复中所述。  

    使用 SBL JTAG uniflash 时、电路板处于哪种引导模式? 是设备引导模式还是 ospi 引导模式?

    根据引导模式的不同、刷写过程也不同。 如果是开发引导模式、则该过程很简单。

    2.输入闪存偏移并按 Enter 键时,应用程序会要求粘贴加载原始命令。 是否从脚本控制台执行了 loadRaw 命令?

    在工程内部、当发出命令 3 时、选择操作类型作为闪存验证。 根据类型发出需要在脚本控制台上执行的命令。

    loadRaw 命令中打印的地址实际上是 RAM 中保存数据的缓冲区的地址。 这不是进行刷写的地址。  

    3.从 uniFlash 刷新时遇到的问题是什么? 工具是否显示成功刷新? 是否使用了正确的闪光灯? 用于擦除的那一个。 您也尝试使用 uniflash 多次刷写映像。 擦除闪存后、该工具可能无法成功刷写首次闪存。  

    此致、

    Aswin

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

    尊敬的 Aswin:

       我的电路板处于开发模式。  抱歉、我可能没有仔细检查。 我需要复制程序提供的 load Raw 命令。 我尝试这样做:首先复制了程序提示的 load Raw 命令、然后输入 1、但得到了相同的结果。

    [Cortex_R5_0]  
     
     ==================
     JTAG Uniflash Menu
     ==================
     
     1: Erase Complete Flash
     2: Write File to Flash and Verify
     3: Verify file in Flash
     
     x: Exit
     
     Enter Choice: 2
    Enter file name along with path to write or verify : C:/A01Projects/A03github/LV_am261x/LV/LV_Release/LV_AM2612.appimage
    Enter flash offset (in hex format) : 0x81000
    Enter below command in CCS scripting console to load the file data to memory.
    AFTER the file load is done, enter '1' to continue ...
     
    loadRaw(0x70040020, 0, "C:/A01Projects/A03github/LV_am261x/LV/LV_Release/LV_AM2612.appimage", 32, false);
    loadRaw(0x70040020, 0, "C:/A01Projects/A03github/LV_am261x/LV/LV_Release/LV_AM2612.appimage", 32, false);
    1
    [FLASH WRITER] Write Failed !!!

    当通过 UniFlash 刷写闪存时、进度条甚至在发生错误之前都不会向前移动。 我已经尝试过几次、问题仍然是一样的。 用于擦除闪存的文件是 SDK 中的“flasher_JTAG_uniflash_am261x_LP"工程“工程。 错误消息如下所示:

    [11/13/2025, 5:28:37 PM] [ERROR] Cortex_R5_0: Error Code 40000001
    [11/13/2025, 5:28:37 PM] [ERROR] Cortex_R5_0: Error Loading the data...
    [11/13/2025, 5:28:37 PM] [ERROR] Cortex_R5_0: Run failed...
    [11/13/2025, 5:28:37 PM] [ERROR] Cortex_R5_0: File Loader: Memory write failed: Algorithm indicated it failed to flash the data
    [11/13/2025, 5:28:38 PM] [INFO] Cortex_R5_0: Writing 1 chunk at offset 0x0
    [11/13/2025, 5:28:38 PM] [ERROR] Cortex_R5_0: Error Code 40000001
    [11/13/2025, 5:28:38 PM] [ERROR] Cortex_R5_0: Error Loading the data...
    [11/13/2025, 5:28:38 PM] [ERROR] Cortex_R5_0: Run failed...

    此致

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

    尊敬的 Zhou:  

    我想再次确认闪存配置是否对齐。 您是否能够在定制板上运行 ospi_flash_io 示例?

    完成该操作后、如果闪存器的闪存配置也对齐、则不应该出现问题。

    此外,我们可以打电话来检查问题吗?

    此致、

    Aswin

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

    尊敬的 Aswin:  

       抱歉、我实际上 6 天前没看到您的消息、可能是因为没有收到 TI 的通知、或者我错过了您的消息。 巧合的是、本周我还忙于其他事情、因此我可能需要在下周解决这个问题。 我之前曾尝试运行过 ospi_flash_io 示例、但它有效、但我会再试一次。 我也希望安排电话来解决这个问题,虽然它将不得不等到下周。 谢谢你。

    此致。

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

    尊敬的 Zhou:

    没问题。 我们可以在下周致电、看看问题。 同时、您能否告诉我们正在使用哪个闪存部件?

    此外,是可能的,你分享我正在使用的 sysonfig. 我只想查看闪存配置

    此致、

    Aswin

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

    感谢您共享闪存器件和 SysConfig。

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

    尊敬的 Aswin:

      很抱歉这些天被另一个项目占用。 您是否会有时间对此星期四或星期五进行简要讨论? 我是否需要提前准备其他测试? 或者、我们可以通过电子邮件进行简短沟通吗? 至少我认为它会比网站更有效:)

    此致

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

    尊敬的 Zhou:  

    如果我们能就星期一展开讨论、可以吗? 这是否可行? 是的、我们可以通过电子邮件进行沟通。

    此致、

    Aswin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Aswin:
    恐怕我只能在北京时间下一个星期一下午 3 点后使用。 您能告诉我这段时间是否适合您吗? 如果没有,我们可以重新安排到另一个方便的时间。
    我们也可能会先通过电子邮件进行初始通信。 我的电子邮件地址是 nanyi.zhou@se.com
    此致
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Aswin:

      请提供您的电子邮件地址吗? 我有一些新的测试结果要分享。

    此致。

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

    尊敬的 Zhou:  

    我已经向您发送了一封电子邮件。 请检查它。

    此致、

    Aswin