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:OSPI 闪存-更改协议使能配置

Guru**** 2457760 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1484087/am2432-ospi-flash---change-protocol-enable-configuration

器件型号:AM2432
主题中讨论的其他器件:SysConfig

工具与软件:

您好!

是否能够使用与 OSPI 控制器相关的闪存相关的两个不同读取/写入命令?

我的目标是使用两个不同的读取/写入命令、一个用于读取/写入存储器的一个部分(比如标准方式)、一个用于读取/写入 SSR 区域(如 OTP 区域)。 我的闪存为这两部分提供这两种不同的命令、我需要使用这两种命令。

此致

Stefano

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

    Stefano、您好!

    感谢您的提问。

    那么、我将根据 MCU 和 SDK AM243产品来评论您的问题。

    这是流程。

    1. 假设您正在运行示例应用程序、如 ospi_flash_io、如下所示: https://software-dl.ti.com/mcu-plus-sdk/esd/AM64X/10_01_00_32/exports/docs/api_guide_am64x/EXAMPLES_DRIVERS_OSPI_FLASH_IO.html
    2. 对于该应用、打开应用程序的 SysConfig 后、可以前往名为 OSPI 和闪存的部分。
    3. 这两节定义了主要方面:
      1. 在 OSPI 部分中、您可以配置频率、时钟分频器、DMA 模式以及要用于闪存操作的行。
      2. 在"Flash"部分、我们定义了闪存配置、例如各种擦除/读取/ write.commands 以及闪存、块大小等。 我们还在此处定义运行模式、也可以说是协议、例如1S-1S-1S 或8D-8D-8D。 请注意、在这里只能定义一个选项、而不是两个选项。
      3. 因此,当您的应用程序运行时,驱动程序_open()被调用 post 调用 Board_driversOpen()。
      4. 在 Board_driversOpen ()中、我们根据应用程序 SysConfig 中"闪存"部分下定义的值初始化闪存配置寄存器和 OSPI SoC 寄存器。
      5. 它还将闪存设置为按照我们在闪存部分中定义的协议运行、因此在从0xFC40000开始的 OSPI SoC 配置寄存器中定义和设置读取和写入的虚拟周期。 您可以从 TRM 对此进行检查。
    4. 由于以上所有这些、我认为改用不同的协议是不可行的、因为需要再次调用 Board_driversOpen 或仅调用低级 API 序列、根据所选的闪存协议初始化 SoC 的 OSPI 寄存器。

    我写这个详尽步骤的目的是为了确保您了解流程是如何发生的、否则顶级答案是否定的

    以下问题仅供我理解、以便我可以更好地了解您的系统。

    • 请告诉我这些写入/读取的频率以及您希望在协议之间切换多少次?
    • 如果您不碰巧按照上述几点在协议之间切换、这将对您的用例产生多严重的影响。

    期待您的答复。

    此致、

    Vaibhav

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

    您好、Vaibhav

    我想我只需要在协议之间切换几次、只需要在器件构建后写入一些参数。

    如果开关出现故障、参数会被写入错误的部分。 这不是很糟糕、但这不是正确的行为。

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

    Stefano、您好!

    感谢您提到您的用例、让我来看看我是否可以在本例中做一些工作。

    我需要在结束时进行一些很好的测试、以了解是否只要做一些尽可能小的更改、我就可以让您的用例正常工作。

    那么、请继续、告诉我以下流程对您是否有用?

    1. 初始化闪存以在1S-1S-1S 模式下工作
    2. 擦除、写入128个字节并从闪存的已知偏移量中读回128个字节、假设值为0x200000
    3. 重新初始化闪存以在协议下工作(1S-1S-1S 模式以外)
    4. 在当前新协议下读取相同的128个字节。

    如果您要修改上述任何步骤或添加您自己的一些步骤、请告诉我?

    另请注意、这是我最后检查协议开关的工作、我最初说这将是"否"、但如果您允许我在某个时间运行此操作、我可以尝试满足您的要求。

    此致、

    Vaibhav

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

    您好!

    从我的角度来看、协议无关紧要、但我只需找到一种管理这两条命令的方法。  

    闪存和 OSPI 在8D-8D-8D 中配置、因为用于其他原因(固件更新、保存参数和 ECC...)、但现在我需要使用闪存的另一部分、对某些参数更安全。

    我认为您的解决方案可能很好、如果我可以更改命令并管理闪存、然后按现在配置的方式进行更改。

    此致

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

    您好!  

    谢谢、我将尝试此开关协议实现并让您知道。

    此致、

    Vaibhav

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

    您好!

    您是否有关于此问题的任何更新?

    此致

    Stefano

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

    Stefano、您好!

    我看到了执行协议切换所需的工作量。

    在其他高优先级的问题上、我不能花些时间来落实。 但我可以建议您使用该方法、以便您可以继续尝试自己的方法。

    请构建一个简单的应用程序、如 ospi_flash_io、该应用程序随附于 MCU plus SDK 安装程序、可在 examples/drivers/ospi 目录下找到。

    构建它之后、完成名为 ti_board_open_close.c 的生成文件之一

    这里、您将看到为用户在 SysConfig 中设置的特定协议定义的闪存配置值。 该文件中定义的闪存配置值与某个协议关联、如果您更改协议、则会在该文件中生成一个全新的闪存配置值。 因此、您需要确保在切换协议时、确保为要要求 OSPI 控制器和闪存运行的新协议更改这些配置值。

    下面是伪代码:

    1. drivers_open();
    2. Board_driversOpen();
    3. 现在您定义并设置了协议 P1、使用 Flash_write 和 Flash_READ 完成一些操作。
    4. 此时您需要将协议切换到 P2。
    5. Board_driversClose ();
    6. drivers_ospiClose();
    7. 重新定义 ti_board_open_close.c 文件中的闪存配置值、以确保新值与协议 p2相同。
    8. drivers_ospiOpen();
    9. Board_driversOpen();
    10. 现在使用新协议 P2执行 Flash_write 和 Flash_READ。
    11. Board_driversClose ()
    12. DRIVERS_CLOSE()

    此致、

    Vaibhav