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.

[参考译文] CC113L:CC113L/MSPM0

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1357381/cc113l-cc113l-mspm0

器件型号:CC113L

您好!

我目前使用 CC113L+MSPM0。 我已在 SmartRF 中成功接收到来自发送器的数据、但遗憾的是、我没有从 SPI 接收到正确的数据。

随函附上分析仪屏幕、供您参考

接收例程:

void GROUP1_IRQHandler(void)
{
    switch (DL_Interrupt_getPendingGroup(DL_INTERRUPT_GROUP_1)) {
        case GPIO_SWITCHES_INT_IIDX:
            switch (DL_GPIO_getPendingInterrupt(GPIO_SWITCHES_PORT)) {
                case GPIO_SWITCHES_USER_SWITCH_1_IIDX:
                    /* When SWITCHES_USER_SWITCH_1 is pressed, initiate data receiving */
                    
                    //cc113L_Power_on_reset();
                    halRfStrobe(SRX);
                    wait_for_GDO2_Low();
                    halRfreadReg(AVAILABLE_RXBYTES);
                    halRfReadBurst(RX_FIFO,&buf, 0x08);
                    halRfStrobe(SFRX);
                    break;
                default:
                    break;
            }
            break;
        default:
            break;
    }
}

您能帮助我解决这个问题吗  

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

    如果我们能够帮助您、您将需要提供有关您正在做什么的更多信息。

    首先、您要将什么用作发送器。 如果您使用的是 TI 器件、请 提供发送器设置和您要发送的数据包的数据包格式。

    您是否使用了 TI 的 CC113L EM 或者是否制作了自己的电路板?

    请阐明这种说法"我已在 SmartRF 中成功从发送器接收到数据、但遗憾的是、我没有从 SPI 接收到正确的数据"的含义。

    您是否使用同一个硬件进行测试、而且该硬件在由 SmartRF Studio 控制时可以工作、但在运行自己的代码时无法工作?

    如果是这样、您需要 在通过软件配置 CC113L 时共享使用的寄存器设置。

    不确定您共享的 SPI 图是什么。

    例如、您可以在 MOSI 线路上将0x10作为一个字节发送出去。 为什么会这样?

    Siri  

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

    你好、Siri、

    对我上一篇文章中缺少信息表示歉意。

    我使用我自己的器件来检查 CC113L。 最初、我尝试使用 SmartRF/CC 调试器从我们的一个传统发送器接收信号、然后成功接收了所有数据。

    之后、我使用我自己的代码将先前测试的 CC113L 套件连接到 MSPM0开发套件、以便从传统发送器接收相同的数据。 但是、我没有接收到任何正确的数据。 我预期会收到95 65 55 95 65 66

    请忽略前面的图像并查看下面的 SPI 信号。 可以看到 RX 路径未接收到正确的数据

    此致

    斯坦内斯

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

    从图中看、看起来您是首先读取 RXBYTES、并且返回0。

    如果 RX FIFO 中有0个字节、则不能继续尝试读取 RX FIFO (为空)。

    您的代码需要执行以下操作:

    初始化 MCU

    初始化无线电(SRES +从 Studio 中写入您确定的寄存器设置)

    频闪灯 SRX

    等待接收数据包(例如 IOCFG2 = 0x06、并等待 GDO2上的下降沿)

    读取 RXBYTES 来查看数据包没有由于任何筛选等原因被丢弃

    如果 RX FIFO 中有字节、读取这些字节。

    切勿尝试读取空 FIFO。

    Siri

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

    你好、Siri、

    感谢您的答复。  

    从传统发送器接收到正确的数据、但我对捕获的信号感到很困惑(请参阅随附的图像)。 我永远不会看到 GDO02改变状态。 此外、我注意到在适当数据前后还有额外的数据。 这是否正常工作?

    此外、您能告诉我如何清除整个 RXFIFO 吗? 您是否有 MSPM0的示例代码?

    此致

    斯坦斯劳斯  

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

    由于数据包在您显然正在接收的 FIFO 中、因此您需要关注 GDO2信号。

    未正确配置信号(IOCFG2 = 0x06)、或者在配置输入 GDO2所连接的时未正确配置 MSPM0。

    我们没有 MSPM0和 CC113L 的代码示例代码。

    当涉及到绘图时、您在代码中执行的操作没有意义。

    你正在闪存 SRX (0x34)、然后在你读取 RXBYTES (0xFB)后立即开始。

    在接收到 GDO2中断(GDO2的下降沿)之前、不应读取 RXBYTES。

    如果您仍然读取 RXBYTES (就像在代码中操作)、您从寄存器读取0x00、表示 RXFIFO 中没有数据。 不过、还是要开始读取 RXFIFO (为什么?)

    当您正在读取 RXFIFO 时、当 RXBYTES = 0时、您正在摆弄 FIFO 指针、不知道您正在读取什么、因此一定不能这么做。

    您需要退一步、弄清如何在 GDO2上设置中断

    您在代码中执行的操作如下:

    halRfStrobe(SRX); // Enter RX
    
    wait_for_GDO2_Low(); // GDO2 is always low when you are strobing SRX, so this makes no sense.
                         // You will always continue right away
    
    halRfreadReg(AVAILABLE_RXBYTES); // Read RXBYTES. Why are you reading this when you are not using the value ?
    
    halRfReadBurst(RX_FIFO,&buf, 0x08); // Here you most likely read an empty FIFO, and why are you reading only 8 bytes?
    
    halRfStrobe(SFRX); // Flush the FIFO
     

    你应该做什么(正如我在上一篇文章中所写的):

    halRfStrobe(SRX); // Enter RX
    
    wait_for_GDO2_Low(); // Wait here as long as GDO2 is low
    wait_for_GDO2_HIGH(); // Wait here as long as GDO2 is High (will continue here when GDO2 goes from high to low (packet received or RX exited)
    
    rxBytes = halRfreadReg(AVAILABLE_RXBYTES); // Read RXBYTES to see if there is a packet in the FIFO or not (could be filtered away)
    
    // Check for RX FIFO overflow (MSB of RXBYTES)
    if(rxBytes & 0x80)
    {
        halRfStrobe(SFRX); // Flush the FIFO
    } 
    else 
    {
        // Read out all the byte received in the FIFO
        halRfReadBurst(RX_FIFO,&buf, rxBytes);
    }

    请注意、在 GPO2引脚上的下降沿实现中断、然后只是等待该中断、而不是轮询引脚、这是一种好得多的解决方案

    Siri

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

    你好、Siri、

    它可以正常工作-在实施中断例程之后。 感谢你的帮助

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

    很高兴听到你把它工作了:-)

    Siri