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.

[参考译文] CC1310:有关 SPI 从器件的问题只能接受一个字节。

Guru**** 2482225 points
Other Parts Discussed in Thread: CC1310

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1219481/cc1310-the-issue-about-the-spi-slave-can-only-accept-one-byte

器件型号:CC1310

大家好、

以下是客户的请求:

客户使用 SimpeLink 4.20.1.3 SDK,例如 SPI 从设备,如图所示:

主器件每秒发送3个字节的数据、如图所示:

发现从设备(CC1310)一次只能接收数据的第一个字节、最后两个字节丢失。

您能帮助检查这一点吗?

谢谢。此致、

Nick

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

    您好、Nick

    如果您不对主代码或其余从代码做任何表述、那么要知道发生了什么情况就不容易了。

    不过、我已经修改了 SDK 中的主从 SPI 示例、以便使用阻塞模式每2秒传输一个3字节长的数据包。 不使用握手。

    代码按预期工作、从器件在每次迭代中接收所有3个字节。

    代码如下:

    主站:

    #define SPI_MSG_LENGTH  (3)
    #define MASTER_MSG      ("ABC")
    
    unsigned char masterRxBuffer[SPI_MSG_LENGTH];
    unsigned char masterTxBuffer[SPI_MSG_LENGTH];
    
    void *masterThread(void *arg0)
    {
        SPI_Handle      masterSpi;
        SPI_Params      spiParams;
        SPI_Transaction transaction;
    
        // Open SPI as master (default)
        SPI_Params_init(&spiParams);
        spiParams.frameFormat = SPI_POL0_PHA0;
        spiParams.bitRate = 1000000;
        spiParams.transferMode = SPI_MODE_BLOCKING;
        masterSpi = SPI_open(Board_SPI_MASTER, &spiParams);
        if (masterSpi == NULL)
        {
            while (1);
        }
    
        // Copy message to transmit buffer
        strncpy((char *) masterTxBuffer, MASTER_MSG, SPI_MSG_LENGTH);
    
        transaction.count = SPI_MSG_LENGTH;
        transaction.txBuf = (void *) masterTxBuffer;
        transaction.rxBuf = (void *) masterRxBuffer;
    
        while (1)
        {
            SPI_transfer(masterSpi, &transaction);
            sleep(2);
        }
    }

    从机:

    #define SPI_MSG_LENGTH  (3)
    #define SLAVE_MSG       ("DEF")
    
    unsigned char slaveRxBuffer[SPI_MSG_LENGTH];
    unsigned char slaveTxBuffer[SPI_MSG_LENGTH];
    
    void *slaveThread(void *arg0)
    {
        SPI_Handle      slaveSpi;
        SPI_Params      spiParams;
        SPI_Transaction transaction;
    
        SPI_Params_init(&spiParams);
        spiParams.frameFormat = SPI_POL0_PHA0;
        spiParams.mode = SPI_SLAVE;
        spiParams.bitRate = 1000000;
        spiParams.transferMode = SPI_MODE_BLOCKING;
        slaveSpi = SPI_open(Board_SPI_SLAVE, &spiParams);
        if (slaveSpi == NULL)
        {
            while (1);
        }
    
        // Copy message to transmit buffer
        strncpy((char *) slaveTxBuffer, SLAVE_MSG, SPI_MSG_LENGTH);
    
        transaction.count = SPI_MSG_LENGTH;
        transaction.txBuf = (void *) slaveTxBuffer;
        transaction.rxBuf = (void *) slaveRxBuffer;
    
        while(1)
        {
            SPI_transfer(slaveSpi, &transaction);
        }
    }

    Siri.