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: AWR2944 MIBSPI DMA 传输错误

Part Number: AWR2944
Other Parts Discussed in Thread: SYSCONFIG

你好,工程师

        我在将AWR2944的SPI按照例程mibspi_loopback_dma配置后发送数据时出现了以下错误

        1.通过打印loopback的rxbuf的数据,发现AWR2944在刚上电或者reset复位后SPI发出来的第一帧数据全为0。在之后每帧用SPI传输的数据不全为0但也存在错误。

         2.在1中接收到的非全0数据存在以下问题,测试时将txbuf中的数据全部赋值为0xAA,在使用SPI发送时会出现有一段正确发送数据,有一段数据全为0的现象,有时也会出现一段0xa5;

         3.以上现象在不使用DMA的情况下不会出现,但是在不使用DMA的情况下只能发送128Bytes的倍数的字节数。(ig.  发送的字节数为200,只会发送前128字节,后面的72字节将被舍弃)

           以下为测试时的代码:

    uint8_t spi_txtestarray[512] = {0};
    uint32_t test_cnt = 0;
    while(test_cnt<512)
    {
        spi_txtestarray[test_cnt]=0xAA;  //test data
        test_cnt++;
    }
    MIBSPI_LoopBackType loopback;
    loopback = MIBSPI_LOOPBK_DIGITAL;
    MIBSPI_enableLoopback(gMibspiHandle[0],loopback); 

    int32_t transferOK=0;
    MIBSPI_Transaction mibtrans;
    memset(&mibtrans, 0, sizeof(mibtrans));
    mibtrans.count = 512;
    mibtrans.txBuf = (void *)(spi_txtestarray);
    mibtrans.rxBuf = (void*)(spi_rxarray);
    mibtrans.slaveIndex = 0;
    mibtrans.arg = NULL;
    transferOK=MIBSPI_transfer(gMibspiHandle[0],&mibtrans);
    CLI_write("STATUS = %d\r\n",mibtrans.status);
    
    test_cnt =0;
    while(test_cnt<128)
     {
        CLI_write("spi_txtestarray[%d] = %x  ",test_cnt,spi_txtestarray[test_cnt]);
        CLI_write("spi_rxarray[%d]=%x  ",test_cnt,spi_rxarray[test_cnt]);
        if(spi_txtestarray[test_cnt]!=spi_rxarray[test_cnt])
        {
            CLI_write("ERROR READ\r\n");
        }
        else
        {
            CLI_write("\r\n");
        }
        test_cnt++;
     }

MIBSPI通过sysconfig配置如下:

串口输出的现象如下