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.

[参考译文] AM5728:四通道模式下的 QSPI 问题

Guru**** 2599225 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/644694/am5728-qspi-issue-in-quad-mode

器件型号:AM5728

你好。

如果我们使用 evmam5728作为参考设计、我正在设计一个项目、并且我们已经连接了 QSPI 闪存。 我们希望使用 QSPI 闪存进行引导。

我正在测试 QSPI_BasicExample_idkAM572x_armTestProject。 使用 Rx 线路:单路和双路时、测试工作正常(在 mmap 模式下)。 它也适用于 Rx 线路:单路和 cfg 模式。 但是、当使用四路模式时、 从闪存读取时的输出仅为 CCCCCC... (1100110011001100110011001100...)

我们使用 evmam5728引脚多路复用器作为参考、并添加了 QSPI 闪存、方法与 idk 板中的方法相同。

我很乐意为您提供有关如何进一步调试的任何建议。

感谢 TI 社区的持续支持、

Anders。

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

    您应该使用 idkAM52x 的引脚多路复用器作为实现方案的参考。 您在运行项目时是否链接到正确的电路板库。
    请注意、您正在使用 idkAM572x 电路板库链接的示例工程的 cfg 文件、因此除非您更改了电路板库中的 pinmux 文件、重建的电路板库以及应用程序、否则更改不会生效。 我会专门查看 TX 线的引脚多路复用器。

    此外、如果您有 VEE 写入 QSPI 闪存、我们建议您在执行任何新的读取写入之前擦除数据、因为闪存器件通常需要在执行新的写入之前擦除闪存扇区。

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

    感谢您的回答。

    我现在已使用 idkAM572x 作为实施方案的参考。 我还尝试使用 idkAM572x 文件而不更改任何文件。 (电路板的 QSPI 部分的连接方式与 idk 板的连接方式相同)。

    从闪存读回数据时、我仍然会得到相同的结果(CCCC = 1100110011001100)。

    经过一些调试后、我发现(至少我认为是这样)我无法设置配置寄存器中的 QUAD 位。 该位应将器件置于四路 I/O 操作中。 这在文件 C:\ti\pdk_am57xx_1_0_8\packages/ti\drv\spi\test\qspi_flash\src\Flash_s25fl\s25fL.c 中的函数 bool S25FLASH_QuadModeEnable (S25FL_Handle flashHandle)中完成

    我用于对寄存器进行写入和回读的代码是(在文件 S25FL.c 中):

    /*读取命令寄存器*/
    writeVal = QSPI_LIB_CMD_Quad_RD_CMD_REG;
    transaction.txBuf =(unsigned char *)&writeVal;
    transaction.rxBuf =空;
    transaction.count = 1;

    transferType = SPI_TRANSACTION 类型写入;
    SPI_CONTROL (handle、SPI_V1_CMD_TRANSFERMODE_RW、(void *)&transferType);

    RetVal = SPI_transfer (handle、&transaction);

    transaction.txBuf =空;
    transaction.rxBuf =(unsigned char *)&configReg;
    transaction.count = 1;

    transferType = SPI_TRANSACTION 类型读取;
    SPI_CONTROL (handle、SPI_V1_CMD_TRANSFERMODE_RW、(void *)&transferType);

    RetVal = SPI_transfer (handle、&transaction);

    SPI_log ("***配置寄存器(来自闪存 RetVal ==%d)%u\t0x%08X\t"、RetVal、configReg、configReg);
    SPI_LOG_BITS (sizeof (configReg)、&configReg);
    spi_log ("\n");

    /*将配置寄存器的第2位设置为1以启用四路模式*/
    CONFIGReg |=(QSPI_FLASH_Quad_ENABLE_VALUE << QSPI_FLASH_Quad_ENABLE_BIT);
    数据=(QSPI_LIB_CMD_WRITE_STATUS_REG << 16)|((0xff & norStatus)<< 8)|(0xFF & CONFIGReg);

    SPI_log ("***配置寄存器(将写入闪存)%u\t0x%08X\t"、configReg、configReg);
    SPI_LOG_BITS (sizeof (configReg)、&configReg);
    spi_log ("\n");

    /*以字节为单位设置传输长度*/
    frmLength = 1;
    SPI_CONTROL (Handle、SPI_V1_CMD_SETFRAMELENGTH、(void *)&frmLength);


    transaction.txBuf =(无符号字符*)&data;
    transaction.rxBuf =空;
    transaction.count = 3;

    transferType = SPI_TRANSACTION 类型写入;
    SPI_CONTROL (handle、SPI_V1_CMD_TRANSFERMODE_RW、(void *)&transferType);

    RetVal = SPI_transfer (handle、&transaction);

    当读取配置寄存器时、QUAD 位设置为0 (默认值)。 我能够读取 QSPI 闪存中的其他寄存器。

    感谢您的帮助、

    Anders。