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-LAUNCHXL:与C2000通信时CC3220SF SPI RX上的数据不正确(F2.8379万D-LAUNCHXL)

Guru**** 2519220 points
Other Parts Discussed in Thread: CC3220SF, CC3220S

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1097883/cc3220sf-launchxl-incorrect-data-at-cc3220sf-spi-rx-while-communicating-with-c2000-f28379d-launchxl

部件号:CC3220SF-LAUNCHXL
主题中讨论的其他部件:CC3220SFCC3220S

您好,

我正在尝试使用SPI在CC3220SF (主)和C2000 (从属)之间进行通信,但无法在两个设备之间执行双工通信。 以下为有关问题的详情 -   

1.当主Tx为空且数据从从属(C2000)传输至主(CC3220SF)时-  

 transaction.count = SPI_MSG_LENGTH;
        transaction.txBuf = NULL;
        transaction.rxBuf = (void *) masterRxBuffer;

以下是状态-  

在线数据(miso) 正确
RX缓冲器中的数据(CC3220SF) 正确

2. 当Master Rx为空时,从Master (CC3220SF)到Slave (C2000)-的数据传输  

        transaction.count = SPI_MSG_LENGTH;
        transaction.txBuf = (void *) masterTxBuffer;
        transaction.rxBuf = NULL;

以下是状态-  

在线数据(MOSI) 正确
RX缓冲器中的数据(C2000)   正确

3. 当Master Rx和Tx都不为空时-  

        transaction.count = SPI_MSG_LENGTH;
        transaction.txBuf = (void *) masterTxBuffer;
        transaction.rxBuf = (void *) masterRxBuffer;

以下是状态-  

在线数据(MOSI) 正确
RX缓冲器中的数据(C2000)   正确
在线数据(miso) 正确
Rx缓冲区中的数据(CC3220SF) 不正确

数据行状态-  

上的接收缓冲区不正确(CC3220SF)

有人能帮你解决这个问题吗?

谢谢,此致,

Kuldeep

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

    两台设备之间的SPI帧格式是否相同? 即: POLx和PHY? CC3220S似乎只是根据设置的内容错误计时。

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

    你好,Sabeeh,

    以下是SPI的从设备和主设备的配置-  

    在Master中(CC3220)-  

     

        /* Open SPI as master (default) */
        SPI_Params_init(&spiParams);
        spiParams.frameFormat = SPI_POL0_PHA1;
        spiParams.transferMode= SPI_MODE_BLOCKING;
        spiParams.bitRate = 250000;
        spiParams.dataSize = 16;
        masterSpi = SPI_open(CONFIG_SPI_MASTER, &spiParams);
        if (masterSpi == NULL) {
            Display_printf(display, 0, 0, "Error initializing master SPI\n");
            while (1);
        }
        else {
            Display_printf(display, 0, 0, "Master SPI initialized\n");
        }

    在从属(C2000)中-

        //
        // Must put SPI into reset before configuring it
        //
        SPI_disableModule(SPIA_BASE);
    
        //
        // SPI configuration. Use a 250kHz SPICLK and 16-bit word size.
        //
        SPI_setConfig(SPIA_BASE, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA1,
                      SPI_MODE_SLAVE, 250000, 16);
        SPI_disableLoopback(SPIA_BASE);
        SPI_setEmulationMode(SPIA_BASE, SPI_EMULATION_FREE_RUN);
    
        //
        // FIFO and interrupt configuration
        //
        SPI_enableFIFO(SPIA_BASE);
        SPI_clearInterruptStatus(SPIA_BASE, SPI_INT_RXFF);
        SPI_setFIFOInterruptLevel(SPIA_BASE, SPI_FIFO_TXEMPTY, SPI_FIFO_RX1);
        SPI_enableInterrupt(SPIA_BASE, SPI_INT_RXFF);
        //
        // Configuration complete. Enable the module.
        //
        SPI_enableModule(SPIA_BASE);

    上述配置是否有任何问题? 我保持了上述两侧POL和PHA的相同状态。

    谢谢!

    此致,

    Kuldeep

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

    您好Kuldeep,

    您发布的软件设置似乎正确。

    似乎您要返回的数据被转移了一到两位,例如。 0x40变为0x80。 也许还存在一些硬件问题。

    如果您有另一个SPI设备(如第二个cc3220),则可以将其作为SPI从属设备运行,并查看是否使用相同的CC3220测试代码从RX缓冲区中获得正确的数据。  

    如果您获得正确的结果,我将查看您的硬件设置。 虽然25万 是SPI的中等比特率,但由于实际布线或其他物理设置,仍然存在可能或某些错误。 您必须使用示波器而不是逻辑分析器来查看发送到CC3220的SPI RX信号是否满足CC3220数据表的SPI RX部分中所述的所有要求。

    我建议您尝试使用其他SPI从属设备的测试,并查看是否使用相同的CC3220代码获得正确的结果。 这将有助于缩小问题的范围。

    此致,

    Michael

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

    您好,Michael:

    目前我没有2个CC3220SF或其他MCU。 所以,我不能尝试。  

    是否有其他方法检查相同的数据?

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

    大家好,我在C2000代码中的任何地方都看不到极性的设置。 请您确认一下吗?

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

    你好,Sabeeh,

    下面是C2000极性和相位的函数原型详细信息-

    在我的C2000 (从属)代码中,我的极性如下所示-  

    CC3220SF的情况相同,如下所示-  

    如果您不是在谈论这一点,请告诉我吗?

    或者上面有任何错误吗?

    谢谢,此致,

    Kuldeep

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

    是的,感谢您向我指出这一点,一切看起来都正常。  

    正如Michael建议的那样,我建议您使用示波器或其他MCU来了解物理层面上可能发生的情况。 很明显,有一些计时不正确。  

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

    您好,Sabeeh,感谢您的意见。

    使用不同的极性和相位设置后,问题得到解决。

    谢谢

    Kuldeep