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.

[参考译文] TDA2EVM5777:需要帮助以提高 QSPI 读取速度

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/664479/tda2evm5777-need-help-to-improve-qspi-read-speed

器件型号:TDA2EVM5777

您好!

我们正在使用 QSPI 读取一些文本文件、为此、我们捕获了用于 QSPI 时钟频率测量的 DSO 屏幕截图。

根据测量时钟频率为74Mhz、但如果您看到波形、则数据读取会以突发方式进行、而不是存在大间隙、并且在每个突发中有8个时钟周期、这意味着它在每个突发中读取一个字(32位)。

我们还分析了代码执行情况、读取2.2MB 文件大约需要2.288秒、这意味着我们在执行中实现了1.8Mhz、这远远低于我们在 DSO 上看到的值。

请建议一种解决此问题并提高 QSPI 文件读取性能的方法。

此致、

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

    您好、Rajesh、

    您没有提到 QSPI 存储器芯片详细信息。 您能指向数据表等吗?

    此致、

    STAN

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

    我们在代码中不对 QSPI 执行任何设置,这意味着存在默认设置。
    但通过调试、我们发现 QSPI 模式为0。

    如果您需要更多信息、请告诉我。

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

    您好!

    我还想知道的一点是、到目前为止、我们正在使用 System_qspiReadSector API 进行 QSPI 文件读取、现在我用 QSPI_ReadSectors _EDMA API 调用替换了该 API 并成功编译、但当我运行应用程序映像时、它会在3秒后冻结应用程序、 最后一个日志行是..

    系统:UART:选择中断模式。

    请在此处说明原因。

    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    除了最后一个问题、我可以在哪里找到一些有关 QSPI_ReadSectors _EDMA API 用法的文档、以及此 API 需要哪些设置。

    我可以在路径 ti_components / drivers/pdk_01_08_00_16/packages/ti/boot/sbl_auto/sbl_utils/src/tda2xx/sbl_utils_tda2xx.c 中看到一种用法、但我无法确定此 API 用法所需的设置是什么。

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

    您能不能看一下 ti_components / drivers/pdk_01_08_00_16/packages/ti/boot/sbl_auto/sbL_utils/src/tda2xx/sbL_utils_tda2xx.c 中定义的 API SBLUtilsQspiBootRprc。
    您需要初始化 QSPI 命令以及 QSPI 频率并设置存储器映射模式。
    在 TDA2xx 上、您应该能够通过适当的设置实现更好的性能。

    此致、
    Rishabh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    按照您的建议、我添加了以下用于 QSPI 初始化的代码
    //======================================== QSPI 初始化=================================
    uint32_t DeviceID、mfgId、DevID;
    QSPI_DeviceType_e deviceType = DEVICE_TYPE_QSPI4;
    char devIdStr[10]={0}、mfgIdStr[10]={0};

    QSPI_Initialize (deviceType);

    /*打印设备 ID 和制造商 ID */
    DeviceID = QSPI_GetDeviceId();
    mfgId = deviceId 和0xFFU;
    DevID =(deviceId 和0xFF0000U)>> 16U;

    SBLLibConvertHexToString (mfgId、mfgIdStr);
    SBLLibConvertHexToString (DevID、devIdStr);

    SBLLibPrintf (SBLLIB_TRACE_LEVEL_INFO1、"\n 制造商 ID -");
    SBLLibPrintf (SBLLIB_TRACE_LEVEL_INFO1、mfgIdStr);
    SBLLibPrintf (SBLLIB_TRACE_LEVEL_INFO1、"\n 器件 ID -");
    SBLLibPrintf (SBLLIB_TRACE_LEVEL_INFO1、devIdStr);

    QSPISetMAddrSpace (SOC_QSPI_ADDRSP0_BASE、
    (uint8_t) QSPI_SPI_SWITCH_REG_MMPT_S_SEL_MM_PORT);
    QSPI_ConfMAddrSpace ((uint8_t) QSPI_SPI_SWITCH_REG_MMPT_S_SEL_MM_PORT、
    QSPI_CS0);
    //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    然后我调用了 QSPI_ReadSectors _EDMA API、它已成功编译、但当我运行应用程序时、它会在3.2秒日志条目后冻结我的应用程序、正如我之前所说的、请回复。

    我进行了清理。

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

    您好、Rajesh、

    您能否通过 CCS 连接并查看程序卡在何处?

    此外、您应该只包括针对 QSPI 功能的相关调用、即 QSPI_Initialize、QSPISetMAddrSpace 和 QSPI_ConfMAddrSpace。

    此致、

    Rishabh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    遗憾的是、CCS 在我的笔记本电脑上无法正常工作、而且我的团队成员都没有配置 CCS。
    还有其他方法吗? 我可以向您发送日志、它是否适合您?

    我还在任何函数调用之前将 VPS_printf 消息保存在该函数的开头、但看不到任何单个 printf 消息。

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

    遗憾的是、如果没有 CCS、很难知道发生挂起/崩溃的原因。
    仍继续并共享日志。 还提供您正在运行的用例和所做更改的说明。

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

    您好!

    我们使用的是"LVDS_VIP_MULTI_CAM_MIRROR_REPLACY"用例和函数"void chains_lvdsVipMultiCamMirrorReplace_SetAppPrms"(我们正在为从 QSPI 读取的 LUT 文件编写代码)。

    请参阅随附的日志文件、我已将 VPS_printf 保留在函数"void chains_lvdsVipMultiCamMirrorReplace_SetAppPrms"的第一行、但我在日志文件中看不到它的条目。

    谢谢、

    e2e.ti.com/.../4341.logs.txt

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

    日志中没有明显的错误。 我可以提供的另一个指针是 QSPI 引脚多路复用器。
    VPS_printf 将打印输出添加到缓冲区中、在将 print 语句发送到 UART 之前可能会发生崩溃/挂起。
    我建议您使用调试器/CCS 来查看具体情况。

    此致、
    Rishabh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我们可以使用"System_qspiReadSecor" API 从 QSPI 成功读取文件、但为了改善 QSPI 读取、我们尝试使用"QSPI_ReadSecors_EDMA"、因此引脚多路复用不会成为问题。

    让我看看我是否可以使用 CCS 执行一些操作。

    谢谢、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我们实际上使用的是基于 TDA2xx 的定制板、我们在该板上没有调试支持、也没有设置。
    我想知道的一个问题是,我们是否可以直接从我们的用例中调用"QSPI_ReadSectors _EDMA" API,您是否可以确保最终直接调用此 API 有效?

    我看到在"System_qspiReadSector"内、如果我在所需的 QSPI init 调用之后调用"QSPI_ReadSectors _EDMA"、那么我的调用将冻结。

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

    此 API 直接从 SBL/PDK 工作。
    该 API 不能直接与 Vision SDK 配合使用、因为它使用 EDMA CSL FL 而非 EDMA LLD。 您可以修改此 API 以使用 EDMA LLD、然后它将适合您。

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

    您好!

    在"System_qspiReadSecor" API 中、我已将 QSPI_ReadSecors 调用替换为 QSPI_ReadSecors_EDMA、并添加了最后一个参数值1作为 EDMA 通道号。

    但性能没有变化,我进行了全新构建,但如何验证我在“System_qspiReadSector”中所做的更改是否真正生效?

    此致、

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

    是否已将 WRITE_MM_MODE_设置为1?

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

    我是否需要在下面的文件中将宏值设置为1?

    /home/vvdn-admin/Desktop/soltron_release/vision_sdk_custom_board/PROCESSOR_SDK_VISION_03_01_00_00/vision_sdk/links_fw/src/rtos/utils_common/src/utils_qspi.c

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

    的确是这样。 这是您要修改 System_qspiReadSector 的同一文件。

    此致、
    Rishabh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    上次建议的更改行为与昨天相同后、应用程序在3秒后同时冻结(请参阅上一次答复中附加的昨天日志)。

    谢谢、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    正如我之前回答过的、您需要将 EDMA CSL FL 呼叫更改为 EDMA LLD。 您是否进行了更改?

    此致、
    Rishabh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我很抱歉、但我不明白如何操作。
    谢谢、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    EDMA CSL FL 和 EDMA LLD 是两个独立的驱动器。 EDMA CSL FL 由 SBL (不带操作系统)使用、EDMA LLD 由 Vision SDK (带 BIOS)使用。
    您需要编写一个类似于 QSPI_ReadSectors _EDMA 的 API、例如使用 EDMA LLD 的 QSPI_ReadSectors _EDMA_OS 并使用它。
    您可以将 vision_sdk\links_fw\src\rtos\utils_common\src\tda3xx\utils_boot_slaves.c 中定义的 Utils_ddrReadEdma 作为参考。
    有关更多详细信息、请参阅 EDMA LLD 文档。 EDMA LLD 是 Vision SDK 软件包的一部分。

    此致、
    Rishabh