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.

[参考译文] RTOS/AM5718:QSPI CSL 最大字长

Guru**** 2587365 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/577950/rtos-am5718-qspi-csl-maximum-word-length

器件型号:AM5718

工具/软件:TI-RTOS

您好-

我正在使用 QSPI CSL、并且尝试使用128位字长(允许的最大值)。  这要求我将 QSPI_SPI_CMD_REG 位25:19设置为"1111111"。  但是、如果您查看用于设置命令寄存器的 CSL 函数、则永远无法完成此操作:

void QSPISetCfgModeTxCmd (uint32_t baseAddr、HAL_QSPI_Command_t qspitxcmd)
{
uint32_t regVal;

...

HW_SET_FIELD32 (regVal、QSPI_SPI_CMD_REG_WLEN、
qspitxcmd.wordLength - 1U);

(笑声)

/*在命令寄存器中设置 QSPI 命令的值*/
QSPIsetCommandReg (baseAddr、regVal);
} 

问题是位字段 HAL_QSPI_Command_T.wordlength 仅为7位。  即使我在此参数中传入"1111111"、在写入命令寄存器之前、它也会递减1。  因此、CSL 允许我们配置的最大字长为127位。  在发现这个问题上花费了很多时间之后、我打算直接从我的应用中写入寄存器。

在即将发布的版本中、是否有任何方法可以修复此问题?

谢谢、

不需要

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Nate、

    澄清一下、wordlength 参数定义为 uint32、因此我猜您可以将"10000000"传递到该字段、并使用当前 API 访问128位配置。

    我认为 API 是从 LLD 驱动程序的角度编写的、我们希望用户提供需要配置的实际字长、而不是寄存器设置。 请检查 QSPI_v1.c 驱动程序中字长的使用方式以及示例 MAIN_QSPI_FLASH_TEST.c 测试。

    n`t 年第1季度即将发布的版本中将推出 MCSPI 和 QSPI 驱动程序更新、但我不认为计划进行任何主要 CSL 更新、除非它被确定为关键更新。 请告诉我们这是否以任何方式阻碍了您的开发。

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

    wordlength 字段是 HAL_QSPI_Command_t 位字段类型的7位字段。 如何将"10000000"传递到该字段? 无论 LLD 如何使用 API、借助给定的函数参数、我看不到任何方法可以将字长度寄存器位配置为"1111111"(由于该域的7位大小)。 即使以某种方式、编译器也能够正确处理写入位字段的过大值、这是否确实是它的预期用途?

    不需要
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    换而言之、假设我已将 QSPI 低级驱动程序参数配置为128位数据大小。 当低级驱动程序调用 QSPISetCfgModeTxCmd()时,也会出现同样的问题。 它正在尝试将一个128的十进制值分配给 cmd 结构中的一个7位字段:

    静态空 QSPI_CMD_MODE_READ_v1 (SPI_Handle handle、
    const SPI_Transaction *事务)

    (笑声)
    cmd.wordLength = object->qspiParams.dataSize;<--这在"dataSize"等于128位时无效。
    (笑声)
    /*将 TX 命令写入命令寄存器*/
    QSPISetCfgModeTxCmd (hwAttrs->baseAddr、cmd);
    (笑声)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Nate、

    是的、我在我的设置中对此进行了尝试、并观察到您报告的问题。 处理此问题的正确方法是从 CSL 代码中删除-1、并要求用户传递(字长值-1)作为该字段的配置。

    我将向开发人员提出这一问题、并告诉您他是否对此问题有任何意见。

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

    Nathan、

    我只是在此问题上回圈、以确认此问题在您结束时已得到解决  我们希望在 SDK 中对此进行更新、并需要知道该修复是否适合您。  我将提供我们计划提供的解决此问题的解决方法的屏幕截图:

    n`t 有一个需要128字长的适当硬件、因此最好您确认修复。 如果您能帮助我们验证此临界情况、我们将不胜感激。

    此致、

    Raahul

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

    我不能说我是否同意该代码。  如果在 CSL 中删除递减1、是否正在更新低级驱动程序以在 qspitxcmd 结构中传递"wordLength -1"?

    实际上、我更喜欢使用 CSL 以上的原始方法在位数中存储真正的"wordLength "、并在我们实际写入 QSPI_SPI_CMD_REG 时处理递减。  我们所需要的只是一个高于 CSL 的结构、此结构能够存储128的最大值。  下面是我如何在我们的应用程序代码中实现权变措施。  我们的应用程序绕过速率极低的低级驱动程序、并直接访问 CSL、以便我们根据请求的读/写操作即时设置帧和字长。  这样、我们就可以轻松地声明自己的32位变量"wordLength "、而不使用 HAL_QSPI_Command_t 结构中的7位字段。

    //我们无法调用 QSPISetCfgModeTxCmd 来写入 TX 命令。 此 CSL 函数中有一个错误、阻止了我们
    将字长设置为128位最大值(由于参数和函数实现的位字段长度)。
    // QSPI 命令寄存器
    regVal 的读取值= QSPIgetCommandReg (hwAttrs->baseAddr);
    
    //设置 QSPI 命令
    的所有字段的值 HW_SET_FIELD32 (regVal、QSPI_SPI_CMD_REG_CMD、cmd.trCmd);HW_SET_FIELD32
    (regSPI、QSPI_CMD_CMD_REGVal
    cmd.firq);
    HW_SET_FIELD32 (regVal、QSPI_SPI_CMD_REG_WIRQ、
    cmd.wirq);
    HW_SET_FIELD32 (regVal、QSPI_SPI_CMD_REG_WLEN、
    字长- 1U);
    HW_SET_FIELD32 (regVal、QSPI_SPI_CMD_REG_FLEN、
    cmd.frameLength - 1U);/lint !e835
    hw_set_FIELD32 (regVal、QSPI_SPI_CMD_REG_CSNUM、cmd.cs);
    
    //在命令寄存器
    QSPIsetCommandReg (hwAttrs->baseAddr、regVal)中设置 QSPI 命令的值; 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果再考虑一下这一点、这甚至不会是一个错误。

    如果我考虑128位的设置、低级驱动程序会尝试将 cmd.wordLength 设置为等于128。 由于 cmd.wordLength 仅为7位、我假设它实际上会得到值0。 然后、我们将其传递到 QSPISetCfgModeTxCmd()函数中、该函数在设置寄存器值之前将其递减1。 减1大概会将我们回滚到127、这是128位所需的设置。

    虽然不是最直观的实现、但我认为这是有效的、因为我没有对帧长度实施类似的变通办法、但我们也在使用该字段的最大值4096、没有任何问题。