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.

AWR2944: SPI无法正常传输

Part Number: AWR2944
Other Parts Discussed in Thread: SYSCONFIG,

你好,工程师

我使用SysConfig生成MIBSPI的相关代码,配置如下图所示

当使能DMA时,awr2944无法正常通过SPI发送数据,具体表现为在调用mibspi_transfer后没有响应,我把Transfer Timeout改为0xFFFF后,任然不能返回,即无法查看status。请问在使用Sysconfig配置了DMA后,还需要配置什么才能正常使用SPI?

当不使能DMA时,可以通过SPI发送数据,我测试SPI的代码如下所示

 int32_t transferOK;
    MIBSPI_Transaction mibtrans;
    memset(&mibtrans, 0, sizeof(mibtrans));
    mibtrans.count = 10000;
    mibtrans.txBuf = (void *)result->my_2DFFTBUF;
    mibtrans.rxBuf = NULL;
    mibtrans.slaveIndex = 0;
    mibtrans.arg = NULL;
    transferOK=MIBSPI_transfer(gMibspiHandle[0],&mibtrans);
    CLI_write("STATUS = %d\r\n",mibtrans.status);
    if(transferOK!=0||mibtrans.status!=MIBSPI_TRANSFER_COMPLETED)
    {
        CLI_write("MIBSPI TRANSFER FAILED\r\n");
    } 

但是也存在以下问题

1.我将测试发送的字节长度定为了10000,但实际上由示波器看到的波形是分多次进行发送的,每次128字节,在函数MIBSPI_dataTransfer中看到“ramLen = ptrMibspiDriver->params.u.masterParams.slaveProf[group].ramBufLen”,而这个ramBufLen的赋值为128,请问该值可以更改吗?

2.在1.情况下,每两组128字节的数据发送之间会有100us的延时,请问这段延时是必须的吗?可以去掉吗?

3.在函数MIBSPI_validateTransferParams中有比较要使用SPI传输的字节数和mibspiRamSize,如果大于mibspiRamSize返回failed,该值被初始化为128,为了传输10000字节,我将其改为了10000,请问该值是否每次都要更改为要传输的字节数?

谢谢

  • 你好,

    请问你有参考mcu_plus_sdk_awr294x_08_04_00_22\examples\drivers\mibspi\mibspi_loopback_dma相关代码么?

  • 你好

    谢谢你的回复。我重新使用Sysconfig生成了相关的配置文件,与mibspi_loopback_dma中的代码相比,除了没有使能loopback模式,使用的时钟频率不同外保持一致。在这种配置下,使能DMA可以正常工作,用示波器观察输出的波形可以看到在每128字节之间存在2us左右的延时,相比没使能DMA的情况下大幅降低了。但是还是存在以下问题,

    1.要使用SPI传输10000Bytes的数据仍然会出现上述没有响应的情况,传输4096个字节则工作正常,请问SPI有传输的最大字节数限制吗?需要改变什么参数以达到传输大量数据的目的?

    谢谢

  • 补充一个问题,我尝试分3次发送10000个字节,但是当SPI使用的时钟频率为35MHz或40MHz时,程序在运行到MIBSPI_transfer后卡住,当我把时钟频率改为20MHz后,相同的程序可以正常运行。查看2944的datasheet可知SPI支持的时钟频率应为40MHz,请问是什么导致上述的问题发生?

  • 你好,

    请问你使用的SPI是master么?SPI时钟是AWR2944输出么?使用loopback demo,配置时钟为40Mhz,是否能复现你的问题?

  • 你好

    我现在配置的SPI为MASTER。SPI的时钟由AWR2944提供,关于运行loopback demo有几个问题:如何运行?我烧写“mibspi_loopback_dma.release.appimage”文件到AWR2944上,SBL失败; 需要修改其时钟频率,使用Sysconfig打开mibspi_loopback_dma/awr2944-evm/r5fss0-0_freertos文件夹下的example.syscfg文件会报错“invalid argument --No product with name MCU_PLUS_SDK and version 07.03.01 found”,

    我现在通过比较generated的文件,使我在工程中配置的SPI参数和loopback demo中的除了时钟频率外保持一致,出现上面提到的问题

  • Zhiqiang,

    能否用文本打开example.syscfg文件,然后替换下面的信息,看能否正常打开。

     * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
    * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
    * @cliArgs --device "AWR294X" --package "ETS" --part "Default" --context "r5fss0-0" --product "MCU_PLUS_SDK_AWR2944@08.02.00"
    * @versions {"tool":"1.13.0+2553"}
    */

  • 你好

    我按照loopback_dma demo的example.syscfg配置了mss.syscfg,问题得到了解决,可以在master模式下通过SPI发送数据。但是仍存在以下疑问:

    1.配置spi的rxbuffer是否是必要的?我在上电或者通过软件复位时,第一帧如果发送超过一定字节数会使板子卡死?在使rxBuf不为NULL之后问题得到解决。

    当rxBuf为NULL时,如果第一帧SPI发送的数据量较少没有使程序卡死,则接下来每帧的数据量较大时也不会使程序卡死。

    谢谢

  • Hi Zhiqiang

    我们推荐rxBuf和txBuf均不为NULL;

    详见MIBSPI_validateTransferParams( )函数中的要求.