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.

[参考译文] AM2434:OSPI NOR 闪存:将 DAC 用于 XIP、并将 INDAC 用于文件系统

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1640225/am2434-ospi-nor-flash-using-both-dac-for-xip-and-indac-for-filesystem

器件型号: AM2434

在 AM243x 上、我想同时在两种模式下使用 OSPI 闪存:

  • 用于 XIP 执行的 DAC 模式
  • 用于文件系统访问的间接读取/写入

MCU+ SDK OSPI 文档描述了直接(存储器映射)和间接模式、驱动程序具有单独的 API。

但是、 对于每次间接访问、电流驱动器似乎都暂时禁用 DAC 模式
我的担心是、如果在间接事务期间获取了 XIP 代码、这会导致中止。

我从 TRM 中的理解是、 如果 DAC 区域位于 XIP 地址窗口之外、则可以在通过间接访问触发区域触发间接访问的同时保持启用。

因此:
硬件是否确实需要在间接访问期间停用 DAC、或者是否仅限于 SDK 驱动程序的当前实现方式?
如果硬件同时允许这两个条件、将 DAC 保持启用状态并将间接触发区域远离 XIP 区域是否有效?

非常感谢您对本主题的任何帮助!
此致、Stefan

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

    您好、Stefan:

    强烈建议单独使用这两个访问权限。 需要并发访问的任何原因、您如何操作? 如果您能围绕闪存/OSPI 控制器解释一些系统/设计、我将不胜感激。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    我们目前正在设计一个多任务应用程序:

    XIP 应用于在闪存中放置大型非时间关键型代码。
    应使用间接访问来访问位于同一闪存上基于 littlefs 的文件系统。

    实施基于信标的机制来协调文件系统访问与通过 XIP 执行代码之间的协调会非常困难、这会在整个代码库之间造成紧密耦合。

    防止并发间接访问可以在通用闪存驱动程序中非常轻松地处理、也可以直接在文件系统中处理。
    但是、我看不出如何针对直接 XIP 访问实现这一点。

    据我了解介绍 DAC 和 INDAC OSPI 控制器的 TRM 一节所述、硬件本身应该能够通过插入等待状态来处理并发访问。
    MCU SDK 甚至指出、由于 DAC 会插入等待状态、因此对多个 CPU 内核进行并发 DAC/XIP 访问不会出现问题。

    但是、我尚未针对 DAC/INDAC 组合进行测试、希望大家能有所建言。

    此致、
    Stefan

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

    您好、Stefan:

    但是、我尚未针对 DAC/INDAC 组合测试过此测试、我很想听听您对此的想法。

    因此、当同时使用 DAC 和 INDAC 用例组合在一起进行访问时、可能会导致未定义的行为。

    启用 DAC 后、闪存的内容将映射到从 0x60000000 开始的 SOC 地址、然后发出 DAC 读取。 总之、OSPI 处于 DAC 状态、从而在 DAC 状态下访问闪存。

    但是、如果将其设置为 INDAC 模式、即使 INDAC 的地址与 DAC 不同、也会导致未定义的行为。 OSPI 控制器在任何给定的时刻都可以处于 DAC 或 INDAC 状态、但不能同时处于两者的行为。

    请告诉我、这是否进一步阐明了 DAC 与 INDAC 方面的内容。

    此致、

    Vaibhav

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    OSPI 控制器在任何给定的时刻都可以处于 DAC 或 INDAC 状态、但其行为不能同时处于这两种状态。

    我对 TRM 的理解不同意这一点。

    显然、OSPI 只能在任何给定的时刻为 DAC 或 INDAC 请求提供服务、但似乎 CPU 的 DAC/INDAC 接口可以同时打开。 无论使用 DAC 还是 INDAC 控制器、都由 INDAC 存储器地址触发区域决定。

    以下是 TRM 中的一些相关片段:

    12.3.2.4.8.3 访问转发

    对于合法访问、数据接口会将所有访问转发到两个访问控制器之一:直接访问控制器和间接访问控制器。 假设 DAC 已通过 OSPI_CONFIG_REG[7] ENB_DIR_ACC_CTRL_FLD 位启用、则默认情况下、所有访问都将转发到此控制器。 在将任何访问转发到 INDAC 之前、必须首先通过软件对其进行配置。 第 12.3.2.4.10 节“间接控制器 (INDAC)“中详细介绍了此过程。 如果 DAC 被禁用、任何无法属于 SPRUIM2H–2020 年 5 月–2023 年 10 月修订提交文档反馈 8399 AM64x/AM243x 处理器器件修订版本 2.0 Texas Instruments 系列产品版权所有Copyright2023 Texas Instruments Incorporated Peripherals www.ti.com 转发给 INDAC 的传入访问都将立即完成且附有错误。 如果启用 DAC、则同一访问将由 DAC 转发和提供服务。

    甚至似乎有一种为并发访问提供服务的固定优先级方案(我刚刚找到该部分):  

    12.3.2.4.12 直接/间接访问控制器与 Stig 之间的 OSPI 仲裁

    当多个控制器同时运行时、使用一个简单的固定优先级仲裁方案在每个接口之间进行仲裁并访问外部闪存。 固定优先级定义如下、最高优先级优先。 •间接访问写入•直接访问写入••直接访问读取•间接访问读取

    我认为后一节回答了我原来的问题:理论上应该是可行的。

    但是、当前的 SDK 驱动程序目前不支持此行为。

    此致、
    Stefan

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

    您好、Stefan:

    在 INDAC 实现中、首先在软件驱动程序中执行的操作是禁用 DAC 模式。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    是的、我知道、 但我认为 OSPI 外设不需要这一点。

    我的想法是修改驱动程序、使 DAC 保持激活状态、从而允许并发访问 DAC/INDAC。

    此致、
    Stefan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的想法是修改驱动程序以使 DAC 保持激活状态、从而允许并发访问 DAC/INDAC。

    我来内部检查一下。

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

    您好、Stefan:

    [引述 userid=“648235“ url=“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1640225/am2434-ospi-nor-flash-using-both-dac-for-xip-and-indac-for-filesystem/6324281

    我认为后一节回答了我原来的问题:理论上应该是可行的。

    但是、当前的 SDK 驱动程序目前不支持此行为。

    [/报价]

    当前驱动程序以轮询模式写入。

    我已向 SW 团队询问此问题以进行确认。

    我会在有更多发现后更新您。

    谢谢、

    Vaibhav

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

    您好、Stefan:

    我已经确认它是有效的。

    TRM 规范提到了多个控制器、我假设这里的控制器是 OSPI 控制器、但以 DAC 和 INDAC 控制器为基准。

    我也在 SDK 中进行了测试、运行正常。

    因此、基本上我始终启用 DAC、当我从 OSPI_writeIndirect API 中删除禁用 DAC 的逻辑时、它会起作用。

    并不是我们将来会在 SDK 中更改此设置、但是的、这是可能的、它与 TRM 中所述的内容相匹配。

    谢谢、

    Vaibhav

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

    尊敬的 Vaibhav:

    感谢您调查此问题!

    我也尝试了一个简单的测试、让 DAC 保持启用状态、并可以确认您的结果。

    然而、我随后偶然发现了我们的 NOR 闪存芯片的一个限制、该芯片在写入/擦除操作期间无法执行有效读取。
    最后、我们在闪存写入/擦除期间仍然必须锁定 XIP 访问。

    尽管如此、我认为 SDK 中应该改变这种行为、因为有些闪存芯片允许读写访问。

    此外、如果驱动程序和闪存芯片未配置为 XIP 模式、闪存读取 API 可以使用 OSPI_readIndirect () 而不是 OSPI_readDirect ()、这似乎相当慢。

    此致、
    Stefan