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.

[参考译文] AM2754-Q1:AWE SDK (11.00.00.17) 如何使用 OSPI_readDirect () 读取闪存?

Guru**** 2540720 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1561463/am2754-q1-awe-sdk-11-00-00-17-how-to-use-ospi_readdirect-to-read-flash

器件型号:AM2754-Q1


工具/软件:

我们使用 AM275-AWE-SDK_11.00.00.17。 根据 freertos_sdk_am275x\source\board\flash\ospi\flash_nor_ospi.c、只有这种代码  

状态= OSPI_readDirect (obj->ospiHandle&transaction);
但 freertos_sdk_am275x\source\drivers\ospi\V0\ospi_V0.c 提供了该脚本  
int32_t OSPI_readDirect (OSPI_handle handle、OSPI_Transaction * TRANS) 和  
int32_t OSPI_readIndirect (OSPI_Handle handle、OSPI_Transaction * trans.)。
请提供如何使用 OSPI_readIndirect () 读取闪存的示例。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    顺便说一下、我读取了 C75 内核中的闪存。

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

    您好、

    感谢您回答准确的问题。

    我了解您的要求。

    因此、当更精确地使用 OSPI/QSPI NOR 闪存时、由于 DAC 读取速度比 INDAC 读取快得多、因此始终建议执行 DAC 读取。

    当前对于 NOR 闪存、在 SDK 中、当您运行名为“ OSPI_FLASH_IO “、您会看到 Flash_read 和 Flash_write API 调用。

    Flash_read 会调用直接读取 API。

    FLASH_WRITE 会引发调用写入间接 API。

    目前、从 TI 的软件产品的角度来看、这就是支持和建议的组合。

    此外、要了解不支持 DAC 写入的原因、请阅读以下内容:  关于 AM6421:OSPI 支持 DMA 吗? 

    请注意:

    为了使用间接读取、您只需在调用它的位置将直接读取的 API 调用替换为间接读取、无需其他修改。 请同时考虑我在上面提供的建议。

    谢谢、

    Vaibhav

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

    实际上、我已经尝试将 OSPI_readDirect 替换为  OSPI_readIndirect、但替换后、该线程消失了。

    我的代码  

    静态 int32_t fla_norOspiRead (Flash_Config *配置uint32_t 偏移uint8_t * buf、uint32_t len)
      int32_t 状态= SystemP_Success
      Flash_Nor OspiObject *obj =(Flash_Nor OspiObject *)(config->object);
      Flash_Attrs *attrs = config->attrs;

      if (obj->phyEnable)
      {
        OSPI_enablePhy (obj->ospiHandle);
      }

      /*验证地址输入*/
      如果 (((offset + len)>(attrs->flashSize))
      {
        状态= SystemP_FAILURE
      }
      IF (STATUS == SystemP_SUCCESS)
      {
        OSPI_事务

        OSPI_Transaction_init (&transaction);
        transaction.addrOffset =偏移
        事务.buf =(void *) buf
        transaction.count = len
        transaction.dmaCopyLowerLimit = OSPI_NOR_DMA_COPY_LOWER_LIMIT
        状态= OSPI_readIndirect (obj->ospiHandle&transaction);
      }

      if (obj->phyEnable)
      {
        OSPI_disablePhy (obj->ospiHandle);
      }

      返回状态
    }
    并且我使用了 JTAG、调用栈就是  
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的 cfg

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

    您好、

    对于 INDAC 读取、我建议您禁用 PHY 模式和 DMA、并检查它是否适合您。 它应使用禁用 DMA 和 PHY 的这种组合。

    谢谢、

    Vaibhav