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.

CC3220SF: 作为SPI从机接收时,最长可以接收多少字节的数据?

https://dev.ti.com/tirex/content/simplelink_cc32xx_sdk_6_10_00_05/docs/drivers/doxygen/html/_s_p_i_c_c32_x_x_d_m_a_8h.html

关于文档中的那个例子,我有几个问题想请教一下。

第一个是,这一段程序实际上是希望传输多少字节的数据,是2000字节还是多少呢?

第二个问题是,三个txBuff和两个rxBuff的关系是怎么样子的,是txBuff1\2\3各自指向一片独立的内存还是,txBuff1是一段内存的开头,txbuff2也是这段内存开头和txbuff3是这段内存的中间?

  • 您好我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

  • 您好,

    请查看以下代码:

    // SPI already opened in callback mode
    SPI_Transaction t0, t1, t2;
    t0.txBuf = txBuff0;
    t0.rxBuf = rxBuff0;
    t0.count = 2000;
    t1.txBuf = txBuff1;
    t1.rxBuf = rxBuff1;
    t1.count = 1000;
    t2.txBuf = txBuff2;
    t2.rxBuf = NULL;
    t2.count = 1000;
    bool transferOk = false;
    if (SPI_transfer(spiHandle, &t0)) {
        if (SPI_transfer(spiHandle, &t1)) {
                transferOk = SPI_transfer(spiHandle, &t2);
            }
        }
    }

    在此代码中,创建结构 SPI_Transactions 的3个实例 t0、t1和 t2。每个结构具有以下变量。 Link

    size_t 	count
     
    void * 	txBuf
     
    void * 	rxBuf
     
    void * 	arg
     
    SPI_Status 	status
     
    void * 	nextPtr

    1)  t0.count 设置为2000,意味着在传输2000帧之前,SPI_Transfer (spiHandle、&t0)不会返回1或完成。传输的字节数最终取决于缓冲器的帧大小,即8位、16位或32位。


    2.)txBuff1、2、3都是各自在内存中的独立缓冲区,已分配给每个 TX.buff 变量。

  • 对于第一个问题,我是想问,比如目前spi的帧大小设定的是8位,也就是1个字节。那么这段程序实现的是发送多少字节或者说多少帧的数据呢?

    另外,我突然又想到,SPI_Transactions 的第一个实例t0的count值设定为2000,那么不是已经超过1024字节了,可以正常工作吗?

  • 我们向工程师确认下吧。

  • SPI_Transactions 的第一个实例t0的count值设定为2000,那么不是已经超过1024字节了,可以正常工作吗?

    可以的,由于 DMA 是在ping pong mode下工作,所以仍然可以正常工作。 

    对于第一个问题,我是想问,比如目前spi的帧大小设定的是8位,也就是1个字节。那么这段程序实现的是发送多少字节或者说多少帧的数据呢?

    以队列的方式处理4000字节。 第一个2000来自 SPI Spi Transaction T0, 1000 来自T1,另一个 1000来自 T2.