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.

[参考译文] AM2432:设置为混合模式后出现闪存错误

Guru**** 2694645 points

Other Parts Discussed in Thread: AM2432, UNIFLASH, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1581044/am2432-flash-error-after-setting-to-hybrid-mode

器件型号: AM2432
Thread 中讨论的其他器件: UNIFLASHSYSCONFIG

您好、

我将 AM2432 与工业 SDK 11.00.00.08 配合使用、

我尝试按照 本指南将闪存 (S28HS512T) 设置为混合模式
它在最初的几次工作,我能够在我设置的最后 4 KB 扇区以混合模式编写。
然后、在下电上电后随机变化、闪存似乎不再响应、不再能够对其进行读取或写入。 上次我运行我的程序时、我从 SBL OSPI 开始、然后连接到调试器以检查执行情况、但我没有做任何异常、我之前已经以类似的方式运行过、没有出现任何问题。

现在、如果我从 OSPI 引导模式开始、然后与调试器连接、我会看到执行在 0x418019F0 处停止、这在我看来是正确的、因为 RBL 可能正在尝试读取 SBL、但无法从闪存中读取任何内容。

如果我从 DEV 引导模式开始、则使用 CCS Scripting 执行 SOC 初始化、然后尝试加载 sbl_JTAG_uniflash 示例、我会卡在 Flash_open () 中、输出为:

错误: Board_flashOpen:186:闪存打开失败实例 0 !!!
 【闪存写入器】无法打开闪存!!!
一些测试失败!!

我可以做些什么来理解为什么闪存不再响应、并按照指南找出问题所在?

谢谢您、  

此致、

Andrea

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

    您好、

    它在前几次工作,我能够在我设置的最后 4 KB 扇区中以混合模式编写。

    根据指南、您能告诉我您选择了哪种配置吗? 请参阅混合模式的所有可能组合部分、并告诉我您打算使用哪一个?

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    感谢您的答复。

    我使用这个配置: 顶部混合配置一个三十二个 4KB 扇区和 256KB 统一扇区地址图,我的代码基本上是 你建议的这个

    谢谢您、

    此致、

    Andrea

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

    您好、

    因此 SBL 位于以下偏移处:0x0000000。 当您将其映射到我们的 SoC 地址时、位置为 0x60000000 +闪存偏移量= 0x60000000 (SBL 存在的闪存偏移量为 0x0000000)。

    因此、该部分根本不会受到干扰。 并且应该只对存储器的该段发出“块擦除“、因为只有 SA512 至 SA543 包含 4KB 扇区。

    因此、我的理解是、如果 SBL 没有、则仍然存在、则不会进行引导。

    请尝试以下操作并告诉我。 将已设置为引导的引导模式设为引导模式。 但是、不要将引导模式 9 引脚设置为 1、这是 SFDP 引脚、将此引脚本身保留为 0。

    “你说什么?

    谢谢、

    Vaibhav

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

    尊敬的 Vaibhav:

    感谢您的答复。

    遗憾的是、我们的定制器件只允许我们在 Dev Mode 和 OSPI Mode 之间进行选择、因此我无法在引脚 9 上进行操作。 在这两种模式中,这些行为是:

    [引述 userid=“623297" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1581044/am2432-flash-error-after-setting-to-hybrid-mode

    现在、如果我从 OSPI 引导模式开始、然后与调试器连接、我会看到执行在 0x418019F0 处停止、这在我看来是正确的、因为 RBL 可能正在尝试读取 SBL、但无法从闪存中读取任何内容。

    如果我从 DEV 引导模式开始、则使用 CCS Scripting 执行 SOC 初始化、然后尝试加载 sbl_JTAG_uniflash 示例、我会卡在 Flash_open () 中、输出为:

    错误: Board_flashOpen:186:闪存打开失败实例 0 !!!
     【闪存写入器】无法打开闪存!!!
    一些测试失败!!

    [/报价]

    我现在担心的是、在编译和测试期间我可能错误地设置了闪存寄存器中的一些位、因为我在第二个器件上运行了许多新测试、到目前为止没有遇到任何问题。 是否有办法通过读取闪存寄存器来验证闪存是否正常工作?  我应该查看哪些寄存器和位、以及采用什么配置(频率,倍频器,协议,其他选项...)?

    谢谢您、

    此致、

    Andrea

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

    您好、Andrea、

    我应该查看哪些寄存器和位、以及采用什么配置(频率,乘法器,协议,其他选项...)?

    您是否碰巧有一个可以读取闪存存储器的外部工具? 或闪存配置寄存器?

    如果没有、那么我可以建议使用 MCU PLSU SDK 路径。

    谢谢、

    Vaibhav

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

    尊敬的 Vaibhav:

    目前我还没有外部工具、您能提供一些建议吗?

    谢谢您、  

    Andrea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    目前我还没有外部工具、您能提供建议吗?

    是的,请允许我一些时间。

    我可以为您提供步骤。

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

    您好、

    感谢您的等待。

    建议的步骤:

    通过打开 SysConfig 来查看 SBL UART Uniflash 的配置。 匹配 SBL JTAG Uniflash 中的相同配置、然后查看错误是否消失。 如果没有、则继续。

    进一步步骤:

    以下是上述建议不起作用时需要遵循的步骤。

    请尝试 以下方法:

    1. 如何运行 OSPI 闪存 IO 应用?
      1. 下载 Tera Term 软件。
      2. 打开 Tera Term 软件并为 AM243 打开 UART 的 COM 端口 X。
      3. 将电路板设置为 UART 引导模式。
      4. 以以下方式发送 SBL NULL 释放 HS FS 文件[为了知道是否需要刷写 HS FS 或 GP 映像、请通读此内容来检查器件类型: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1228618/faq-am6xx-how-to-check-if-device-type-is-hs-se-hs-fs-or-gp  ]


        注意:  如果您一次没有在 UART COM 端口上看到 SBL NULL 日志、则需要再次发送、因为这将克服热复位勘误表。 因此、基本上、一个接一个地发送相同的 SBL NULL 释放 HS FS 文件(如果一次发送,您在 UART COM 端口上看不到 SBL NULL 日志)。

      5. 完成后、内核将初始化、之后您可以打开 CCS 并从目标配置创建 AM243 .ccxml 文件。
      6. 连接到 CCS 中的内核并加载 OSPI 闪存 IO 示例。

    在您逐步加载 OSPI 闪存 IO 和调试的同时、您需要读取状态和配置寄存器、所有这些寄存器都用于闪存。 所以基本上是以 0x800...开头的寄存器 您需要读取所有寄存器、然后告诉我这些配置寄存器的值是多少。

    FLASH_norOspiRegRead 可用于读取配置寄存器以及状态寄存器值。

    在计算 readDataCaptureDelay 且流程从 while 循环中退出后、在函数 Flash_norOspiOpen 中读取这些寄存器。

    谢谢、

    Vaibhav

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

    尊敬的 Vaibhav:

    感谢您的答复。

    我曾尝试过、但我使用 SOC 初始化脚本使用开发模式而不是 UART 模式来初始化器件、因为 我们的自定义器件只允许我们在开发模式和 OSPI 模式之间进行选择、而不允许在 UART 模式之间进行选择。

    无论如何、我加载 OSPI 闪存 IO 示例并尝试读取所有状态和配置寄存器、但结果如下:

    这是我添加的代码:

    diff --git a/mcu_plus_sdk/source/board/flash/ospi/flash_nor_ospi.c b/mcu_plus_sdk/source/board/flash/ospi/flash_nor_ospi.c
    index 6d0ffab9..23062825 100644
    --- a/mcu_plus_sdk/source/board/flash/ospi/flash_nor_ospi.c
    +++ b/mcu_plus_sdk/source/board/flash/ospi/flash_nor_ospi.c
    @@ -1255,6 +1255,41 @@ static int32_t Flash_norOspiOpen(Flash_Config *config, Flash_Params *params)
                 OSPI_setRdDataCaptureDelay(obj->ospiHandle, readDataCapDelay);
                 status = Flash_norOspiReadId(config);
             }
    +
    +        uint8_t regData = 0x00;
    +
    +        status = Flash_norOspiRegRead(config, 0x65, 0x00800000, &regData);
    +        DebugP_log("0x00800000: %x\r\n", regData);
    +        regData = 0x00;
    +
    +        status = Flash_norOspiRegRead(config, 0x65, 0x00800001, &regData);
    +        DebugP_log("0x00800001: %x\r\n", regData);
    +        regData = 0x00;
    +
    +        status = Flash_norOspiRegRead(config, 0x65, 0x00800002, &regData);
    +        DebugP_log("0x00800002: %x\r\n", regData);
    +        regData = 0x00;
    +
    +        status = Flash_norOspiRegRead(config, 0x65, 0x00800003, &regData);
    +        DebugP_log("0x00800003: %x\r\n", regData);
    +        regData = 0x00;
    +
    +        status = Flash_norOspiRegRead(config, 0x65, 0x00800004, &regData);
    +        DebugP_log("0x00800004: %x\r\n", regData);
    +        regData = 0x00;
    +
    +        status = Flash_norOspiRegRead(config, 0x65, 0x00800005, &regData);
    +        DebugP_log("0x00800005: %x\r\n", regData);
    +        regData = 0x00;
    +
    +        status = Flash_norOspiRegRead(config, 0x65, 0x00800006, &regData);
    +        DebugP_log("0x00800006: %x\r\n", regData);
    +        regData = 0x00;
    +
    +        status = Flash_norOspiRegRead(config, 0x65, 0x00800008, &regData);
    +        DebugP_log("0x00800008: %x\r\n", regData);
    +        regData = 0x00;
    +
             /* Enable PHY if attack vector present and PHY mode is enabled */
             obj->phyEnable = FALSE;
             uint32_t phyTuningOffset = Flash_getPhyTuningOffset(config);

    此外、我发现我添加的代码之前的 while 循环被中断、因为 readDataCapDelay 变为 0、而不是因为状态变为 SystemP_SUCCESS。

    你有什么建议吗?
    谢谢您、

    此致、

    Andrea

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

    您好、Andrea、

    此外、我发现我添加的代码之前的 while 循环被中断、因为 readDataCapDelay 变为 0、而不是因为状态变为 SystemP_SUCCESS。

    因此看起来是传统的读取 ID 问题。

    请看、在您将日志放在 Flash_norOspiOpen 中之前、我们会在其中循环某些值、并找出哪个 readDataCaptureDelay 值可以读取闪存的器件并制造 id

    这样做是为了确保 OSPI 控制器能够正确地与闪存通信。

    要深入了解这一点、请参阅这个简短的常见问题解答:  【常见问题解答】AM62x、AM62Px、AM62D-Q1、AM64x、AM275x:了解闪存器件 ID 和制造 ID 读取 

    查看这是否通过并正确调用。

    此外、请与我共享在 OSPI 闪存 IO 示例设置中配置的 SysConfig 闪存和 OSPI 配置。 如果是默认设置、则无需与我共享。 如果不同、您可以共享。

    谢谢、

    Vaibhav

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

    而且、如果您只是遵循了这个逻辑、请告诉我。 或者您遵循了其他一些逻辑、请分享一个相同的片段。

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

    尊敬的 Vaibhav:

    感谢您的答复。

    此外、请告诉我您是否遵循了这个逻辑? 或者您遵循了其他一些逻辑、请分享一个相同的片段。

    在我在之前的回复中提到的第一个器件中、我使用了您上面提到的代码、但没有检查和设置写入变量(基本上只是每次读取和写入两个寄存器,但设置的正确值相同)。  这可能是个问题吗?

    我运行了更多的测试,它似乎现在,甚至似乎是正常工作的设备现在有一个类似的问题(它不卡在同一个点,但问题仍然与闪存访问).   在第二台设备中、我直接复制并粘贴了代码。 但现在我意识到它永远不会起作用、因为测试 if ((regData &((uint8_t)(1 << 3)))== 1) 始终为 false(用 0x08 屏蔽 regData 从不会导致 0x01)。 然而、根据我的经验、4KB 扇区上的擦除扇区功能从未失败。  这可能会导致第二个器件中出现错误吗?

    此外、我跟踪函数的执行、但每次读取 Device ID 和 Manufacturing ID 时、我都会找到值 0x0。

    此外、与我共享在 OSPI 闪存 IO 示例设置中配置的 SysConfig 闪存和 OSPI 配置。 如果是默认设置、则无需与我共享。 如果不同、则可以共享。

    工程的 SysConfig 与这些示例相同。

    谢谢您、

    此致、

    Andrea

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

    您好、Andrea、

    在第二个器件中、我直接复制并粘贴了代码。 但现在我意识到它永远不会起作用、因为测试 if ((regData &((uint8_t)(1 << 3)))== 1) 始终为 false(用 0x08 屏蔽 regData 从不会导致 0x01)。

    默认情况下、闪存驱动程序被设置为在统一模式而非混合模式下工作、因此我更改了上面的逻辑(在代码片段中)以确保闪存可以设置为混合模式。 因此、按此方式修改 IF 条件检查。

    在较新的器件上运行时、您会看到默认情况下闪存的 UNHYSA 位为 0、因此不会达到该条件、如果在任何情况下此位为 1、那么我们会将其修改为 0 并将其写回其非易失性寄存器、以确保在闪存的下电上电/复位期间保持该位的值。

    但是、根据我能够理解的内容、4KB 扇区上的擦除扇区功能从未失败。  这是否会导致第二个设备中出现错误?

    因此、默认情况下、如果启用了混合模式、4KB 扇区擦除肯定不会失败。 这本身不会导致任何问题。

    这些工程的 SysConfig 与示例相同。

    感谢您提到这一点。

    此外、我跟踪函数的执行、但每次它读取 设备 ID 和制造 ID 时、我都找到值 0x0。

    请尝试运行 OSPI 闪存 DIAG(OSPI 闪存诊断)示例、该示例可在 examples/drivers/ospi 下找到

    如果您看到能够成功运行 OSPI 闪存 DIAG、则可以确保闪存已启动且正常工作。

    然后、我可以建议您采取进一步的步骤。

    此致、

    Vaibhav

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

    仅供参考、您可以在此处阅读有关此示例的更多信息: https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/latest/exports/docs/api_guide_am243x/EXAMPLES_DRIVERS_OSPI_FLASH_DIAG.html

    运行此内容的最简单方法是按照我在这里提到的步骤操作、但不要运行 OSPI 闪存 IO、而是运行 OSPI 闪存 DIAG:

    [引用 userid=“531612" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1581044/am2432-flash-error-after-setting-to-hybrid-mode/6103865
    • 下载 Tera Term 软件。
    • 打开 Tera Term 软件并为 AM243 打开 UART 的 COM 端口 X。
    • 将电路板设置为 UART 引导模式。
    • 以以下方式发送 SBL NULL 释放 HS FS 文件[为了知道是否需要刷写 HS FS 或 GP 映像、请通读此内容来检查器件类型: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1228618/faq-am6xx-how-to-check-if-device-type-is-hs-se-hs-fs-or-gp  ]


      注意:  如果您一次没有在 UART COM 端口上看到 SBL NULL 日志、则需要再次发送、因为这将克服热复位勘误表。 因此、基本上、一个接一个地发送相同的 SBL NULL 释放 HS FS 文件(如果一次发送,您在 UART COM 端口上看不到 SBL NULL 日志)。

    • 完成后、内核将初始化、之后您可以打开 CCS 并从目标配置创建 AM243 .ccxml 文件。
    • 连接到 CCS 中的内核并加载 OSPI 闪存 IO 示例。
    [/报价]

    我知道 DUT 上没有 UART 引导模式选项。

    您可以参考下面的代码将引导模式更改为 UART 引导模式: github.com/.../switch_boot_mode

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

    尊敬的 Vaibhav:

    感谢您的答复。

    [引用 userid=“531612" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1581044/am2432-flash-error-after-setting-to-hybrid-mode/6109489
    在第二台设备中、我直接复制并粘贴了代码。 但现在我意识到它永远不会起作用、因为测试 if ((regData &((uint8_t)(1 << 3)))== 1) 始终为 false(用 0x08 屏蔽 regData 从不会导致 0x01)。

    默认情况下、闪存驱动程序被设置为在统一模式而非混合模式下工作、因此我更改了上面的逻辑(在代码片段中)以确保闪存可以设置为混合模式。 因此、按此方式修改 IF 条件检查。

    [/报价]

    当然、操作 ((regData &((uint8_t)(1 << 3)))== 1) 是否应该始终为 false? regData & 0x8 永远不能是 0x1、可以是 0x0 或 0x8、因此比较始终失败。 这是正确的、还是我遗漏了一些内容?

    [引用 userid=“531612" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1581044/am2432-flash-error-after-setting-to-hybrid-mode/6109498

    我知道 DUT 上没有 UART 引导模式选项。

    您可以参考下面的代码将引导模式更改为 UART 引导模式: github.com/.../switch_boot_mode

    [/报价]

    谢谢、 我会尝试一下、并告诉您。 不过、有一件事我不明白、为什么需要进入 UART 模式? 我仍然可以通过脚本初始化从开发模式运行演示。  不应该是一样的吗?

    谢谢您、  

    Andrea

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

    您好、Andrea、

    当然、操作 ((regData &(uint8_t)(1 << 3)))=1) 是否始终为 false?

    感谢您提出这个问题、我更新了常见问题解答。 感谢您指出这一点。

    正确、还是我遗漏了一些内容?

     正确。

    谢谢您、 我会尝试一下并告诉您。 不过、有一件事我不明白、为什么需要进入 UART 模式? 我仍然可以通过脚本初始化从开发模式运行演示。  它不应该是相同的吗?

    是的、您可以这样做。

    此致、

    Vaibhav

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

    你好、Vaibhav、

    两种器件上的结果似乎不同:

    首先、似乎每次都始终读取 0xFF。 在第二次读取时、它设法至少读取制造商 ID 和器件 ID、但不读取预期 ID (0x34 和 0x5B1A)。

    谢谢您、

    此致、  

    Andrea

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

    您好、Andrea、

    然后、让我们执行以下操作。 希望这可以解决该问题。

    我将提供一个代码片段、我将告诉您如何执行相同代码片段的步骤。

    请允许我稍后发送此邮件。

    此致、

    Vaibhav

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

    您好、Andrea、

    感谢您的等待。

    因此、我们将尝试通过手动写入非易失性配置寄存器来修复闪存。

    我将分享您需要在 Flash_norOspiOpen API 内部编写的代码片段。

    请参阅以下代码。

    此致、

    Vaibhav

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

    以下是代码片段:

    e2e.ti.com/.../flash_5F00_recovery.txt

    应用更改后、确保使用命令转到源代码/电路板并构建库

    gmake -s -f makefile.am243x.r5f.ti-arm-clang.freertos profile=debug

    gmake -s -f makefile.am243x.r5f.ti-arm-clang.freertos profile=release

    gmake -s -f makefile.am243x.r5f.ti-arm-clang.nortos profile=debug

    gmake -s -f makefile.am243x.r5f.ti-arm-clang.nortos profile=release

    完成后、重新构建 OSPI 闪存 IO 等基本应用、并逐步开始调试。

    进入 Board_drivers 打开-->… -> Flash_open -->...-> Flash_norOspiOpen

    当您到达此函数时、给它一个自由运行、直到该函数中引入的 while (1) 循环。 与我共享控制台上打印的调试日志值。

    期待您的答复。

    此致、

    Vaibhav

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

    你好、Vaibhav、

    感谢您的答复。

    我尝试了上面的代码。 在实际读取值(不正确,但不同于 0xFF)的器件上、该代码有效。 我能够恢复器件并使用 SBL null 重新刷写它、以继续开发。

    但是、在始终读取 0xFF 的器件上、似乎不起作用、因为打印结果仍然每次返回 0xFF。 您对这最后一台设备有什么想法吗?

    谢谢您、

    此致、

    Andrea

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

    您好、Andrea、

    我尝试了上面的代码。 在实际读取值(不正确,但不同于 0xFF)的器件上、该代码有效。 我能够恢复器件并使用 SBL null 重新刷写它以继续开发。

    很高兴该板已从闪存的观点恢复。

    但是、在始终读为 0xFF 的器件上、似乎不起作用、因为打印内容仍然每次都返回 0xFF。 您对最后一台设备有什么想法吗?

    考虑到它与您拥有的第一个器件完全相同、并且您按照相同的步骤操作、如果它不起作用、我们需要尝试其他方法。

    回答这几个问题来帮助我。

    在闪存始终返回 FFh 的第二个器件上、闪存何时出现故障?

    1. 从一开始就像这样吗?
    2. 或者当你尝试玩 UNHYSA 钻头时发生了这种情况?

    期待您的答复。

    此致、

    Vaibhav

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

    您好、

    我建议、如果恢复功能不适用于闪存、可以让您查看最新的 SDK 文件 flash_nor_ospi.c 如果恢复闪存的机制(我之前提供的)对此电路板不起作用、我将让您运行 OSPI 闪存诊断示例、而不对示例进行任何更改。 如果此操作成功运行、则意味着闪存没有损坏、如果此操作未正确运行、则闪存可能已损坏。

    若要将来进行闪存调试、请按照此处的步骤操作: www.ti.com/.../sprads5.pdf

    此致、

    Vaibhav