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.

[参考译文] CC1101:插入 CC1101 SPI 时包含1位和#39;1'、从而使后续数据不正确。

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1164616/cc1101-cc1101-spi-was-inserted-with-1-bit-1-making-subsequent-data-incorrect

器件型号:CC1101

您好、朋友、

我使用 CC1101来解码 NRZ 433.92MHz 数据速率9600bps。 并通过 GDO0输出原始数据、并通过 GDO2输出同步字接收指示以中断 MCU。 现在、SPI 在第五个字节插入1位"1"时出现问题、导致后续数据不正确。 有人可以帮我解决这个问题吗? 提前感谢您。 初始数据和信号如下。

祝你一切顺利

吴德华

//FSK, 433.92MHz, datarate 9600bps, bandwidth 300k, deviation 50k, 
static const uint8_t CC1101_GFSK_9_6_kb[] = {
    0x06,  // IOCFG2        GDO2 Output Pin Configuration
    0x2E,  // IOCFG1        GDO1 Output Pin Configuration
    0x0D,  // IOCFG0        GDO0 Output Pin Configuration
    0x47,  // FIFOTHR       RX FIFO and TX FIFO Thresholds
    0x01,  // SYNC1         Sync Word, High Byte
    0x01,  // SYNC0         Sync Word, Low Byte
    0xFF,  // PKTLEN        Packet Length
    0x24,  // PKTCTRL1      Packet Automation Control, (PQT*4=1*4)
    0x01,  // PKTCTRL0      Packet Automation Control
    0x00,  // ADDR          Device Address
    0x00,  // CHANNR        Channel Number
    0x06,  // FSCTRL1       Frequency Synthesizer Control
    0x00,  // FSCTRL0       Frequency Synthesizer Control
    0x10,  // FREQ2         Frequency Control Word, High Byte
    0xB0,  // FREQ1         Frequency Control Word, Middle Byte
    0x71,  // FREQ0         Frequency Control Word, Low Byte
    0x58,  // MDMCFG4       Modem Configuration
    0x83,  // MDMCFG3       Modem Configuration
    0x12,  // MDMCFG2       Modem Configuration (GFSK, 16/16 sync word bits detected)
    0x22,  // MDMCFG1       Modem Configuration
    0xF8,  // MDMCFG0       Modem Configuration
    0x50,  // DEVIATN       Modem Deviation Setting
    0x07,  // MCSM2         Main Radio Control State Machine Configuration
    0x30,  // MCSM1         Main Radio Control State Machine Configuration
    0x18,  // MCSM0         Main Radio Control State Machine Configuration
    0x16,  // FOCCFG        Frequency Offset Compensation Configuration
    0x6C,  // BSCFG         Bit Synchronization Configuration
    0x07,  // AGCCTRL2      AGC Control
    0x00,  // AGCCTRL1      AGC Control
    0x92,  // AGCCTRL0      AGC Control
    0x87,  // WOREVT1       High Byte Event0 Timeout
    0x6B,  // WOREVT0       Low Byte Event0 Timeout
    0xFB,  // WORCTRL       Wake On Radio Control
    0x56,  // FREND1        Front End RX Configuration
    0x17,  // FREND0        Front End TX Configuration
    0xE9,  // FSCAL3        Frequency Synthesizer Calibration
    0x2A,  // FSCAL2        Frequency Synthesizer Calibration
    0x00,  // FSCAL1        Frequency Synthesizer Calibration
    0x1F,  // FSCAL0        Frequency Synthesizer Calibration
    0x41,  // RCCTRL1       RC Oscillator Configuration
    0x00,  // RCCTRL0       RC Oscillator Configuration
    0x59,  // FSTEST        Frequency Synthesizer Calibration Control
    0x7F,  // PTEST         Production Test
    0x3F,  // AGCTEST       AGC Test
    0x81,  // TEST2         Various Test Settings
    0x35,  // TEST1         Various Test Settings
    0x09,  // TEST0         Various Test Settings
};

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

    如果您的 SPI 符合规格。 SPI 不会在任何位置“插入”任何位。

    您在 SPI 上读取的是 RX FIFO 中存在的内容。

    您在 GDO0上监视的数据是原始数据、与处理后进入 FIFO 的数据不一定相同。

    您从发送器传输的数据是什么?

    您将对讲机配置为可变数据包长度模式、从 FIFO 读取的第一个字节为0xD1 (209)、但您没有接收209个字节。

    我使用的射频参数与使用 SmartRF Studio 进行的测试相同、我能够正常接收所有数据:

    导出的设置:

    // Address Config = No address check 
    // Base Frequency = 433.919830 
    // CRC Autoflush = false 
    // CRC Enable = true 
    // Carrier Frequency = 433.919830 
    // Channel Number = 0 
    // Channel Spacing = 199.951172 
    // Data Format = Normal mode 
    // Data Rate = 9.59587 
    // Deviation = 50.781250 
    // Device Address = 0 
    // Manchester Enable = false 
    // Modulated = true 
    // Modulation Format = GFSK 
    // PA Ramping = false 
    // Packet Length = 255 
    // Packet Length Mode = Variable packet length mode. Packet length configured by the first byte after sync word 
    // Preamble Count = 4 
    // RX Filter BW = 325.000000 
    // Sync Word Qualifier Mode = 16/16 sync word bits detected 
    // TX Power = 0 
    // Whitening = false 
    // PA table 
    #define PA_TABLE {0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
    
    static const registerSetting_t preferredSettings[]= 
    {
    {CC1101_IOCFG0, 0x06},
    {CC1101_SYNC1, 0x01},
    {CC1101_SYNC0, 0x01},
    {CC1101_PKTCTRL1, 0x24},
    {CC1101_PKTCTRL0, 0x05},
    {CC1101_FSCTRL1, 0x06},
    {CC1101_FREQ2, 0x10},
    {CC1101_FREQ1, 0xB0},
    {CC1101_FREQ0, 0x71},
    {CC1101_MDMCFG4, 0x58},
    {CC1101_MDMCFG3, 0x83},
    {CC1101_MDMCFG2, 0x12},
    {CC1101_DEVIATN, 0x50},
    {CC1101_MCSM0, 0x18},
    {CC1101_FOCCFG, 0x16},
    {CC1101_AGCCTRL2, 0x43},
    {CC1101_WORCTRL, 0xFB},
    {CC1101_FSCAL3, 0xE9},
    {CC1101_FSCAL2, 0x2A},
    {CC1101_FSCAL1, 0x00},
    {CC1101_FSCAL0, 0x1F},
    {CC1101_TEST0, 0x09},
    {CC1101_LQI, 0x7F},
    {CC1101_RSSI, 0x80},
    {CC1101_MARCSTATE, 0x01},
    {CC1101_VCO_VC_DAC, 0x94},
    };
    

    如果您使用的是 CC1101以外的另一个发送器、则可能是射频设置存在一些差异、这会导致并非接收到每个数据包而没有错误。

    我强烈建议您在开始编写自己的软件之前、先让设置与 SmartRF Studio 正确配合使用。

    BR

    Siri

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

    您好 @Siri、

    感谢您的回答。 我需要购买哪款评估板? 您有器件型号吗? 我需要安装 SmartRF Studio v7、对吧?  

    我没有用于 CC1101的评估板。 我的项目仅接收、发送来自 TPMS。 我很困惑、为什么原始数据(GDO0)是来自 TPMS 的正确数据。 我的数据包长度为第五个字节、而不是第一个字节。 我花了很多天时间才找到解决方案、但问题仍然存在。 在第五个字节、每个数据包都是错误的。 (我的数据包是:0xD1、0x47、0x43、0x57、0x04、 0x53、0xc7、0x20、0x92)

    祝你一切顺利

    吴德华

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

    你(们)好

    由于我没有与您相同的发送器、因此我只能使用 CC1101作为发送器来测试它。

    由于我不知道您在代码中执行的操作、因此很难给出建议、但问题可能是您何时读取 RX FIFO 造成的。

    由于您在第一个字节中没有长度信息、并且无法让无线电自行确定长度、因此您需要在接收时读取 RX FIFO、并且可能存在与此相关的时序问题。  

    例如、当您尝试读取 FIFO 时、您是否始终知道其中有数据?

    要确保对讲机正常工作、您可以尝试以下操作:

    将 CC1101配置为固定数据包长度模式、并将数据包长度设置为9:

    选通 SRX 并等待 GDOx 上的下降中断、其中 IOCFGx = 0x06

    从 RX FIFO 读取9个字节。

    在这种情况下、您在对讲机退出 RX 模式之前未读取数据包、而从 RX FIFO 读取的是对讲机接收到的数据。

    在这种情况下、如果您得到的数据包正确、但在接收期间读取 FIFO 时却不正确、那么您的问题可能与在数据正确输入到 FIFO 之前尝试读取 FIFO 有关

    假设您的长度字节永远不会大于27。 例如、您可以将 FIFO 阈值设置为32、并等待32个字节已输入到 FIFO (对讲机应使用无限数据包长度模式)。

    然后、您读取 FIFO 的前5个字节以获取长度、然后读取数据包的其余部分。

    我测试了如下所示的简单代码:

    // Set radio in RX
    trxSpiCmdStrobe(CC1101_SRX);
    
    // Infinite loop 
    while(TRUE)
    {
        // wait for packet received interrupt
        if(packetSemaphore == ISR_ACTION_REQUIRED)
        {
            ioPinIntDisable(IO_PIN_PORT_1, GPIO2);
              
            // At this point there is 32 or more bytes in the RX FIFO
            
            // Read enouth to get the length
            cc1101SpiReadRxFifo(header,5);
                
            length = header[4];
              
            if (length < 28)
            {
                cc1101SpiReadRxFifo(rxBuffer,length);
                packetCounter++;
            }
              
            trxSpiCmdStrobe(CC1101_SIDLE);
              
            // Update LCD
            updateLcd();
              
            trxSpiCmdStrobe(CC1101_SFRX);
    
            // Clear ISR flag
            ioPinIntClear(IO_PIN_PORT_1, GPIO2);
                
            packetSemaphore = ISR_IDLE;
    
            // Enable interrupt
            ioPinIntEnable(IO_PIN_PORT_1, GPIO2);
               
            trxSpiCmdStrobe(CC1101_SRX);
               
        }
    }

    如果长度字节大于27、则可能需要更改 FIFO 阈值。

    如果数据包的长度太长、以至于整个数据包不能放入 RX FIFO 中、则还必须重新编写代码。

    BR

    Siri

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

    您好、Siri、

    感谢您的回答。 问题仍然存在。 我需要购买哪款评估板? 您有器件型号吗? 我还需要安装 SmartRF Studio v7、对吧?

    祝你一切顺利

    吴德华

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

    您是否重新编写了代码以等待收到完整数据包、并且仍然在数据包中始终出现相同的位错误?

    您是否有多个电路板、以便您可以在一个电路板上制作一些 TX 代码并传输相同的数据包、然后测试接收器代码以查看是否一切正常?

    这样、您就可以验证您的软件是否正确、而是专注于 TPMS 和 CC1101之间可能存在的射频参数差异。

    要评估 CC1101、您可以使用 CC1101EM 和 TRXEB:

    https://www.ti.com/product/CC1101EMK868-915/part-details/CC1101EMK868-915

    SMARTRXEBK 评估板|德州仪器 TI.com

    请注意、TrxEB 目前已缺货

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

    您好!

    是的、我重新编写代码以等待接收到完整的数据包、并且仍然在数据包中得到相同的位错误。  如果我将 DEVIATN 寄存器从0x50 t0 0x40更改为 错误位看起来是正确的、但是接收率只有大约30%。 我的项目是315MHz/433MHz。 可以使用 CC1101EMK868-915的电路板吗? 或者我应该购买另一种型号吗?

    祝你一切顺利

    吴德华

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

    要在433MHz 频带下运行、您应该购买 CC1101EMK433 |购买 TI 器件|德州仪器 TI.com

    我将请 RF/HW 团队的某个人评论您可以尝试检查寄存器设置是否需要更改的内容。

    BR

    Siri

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

    最简单的方法是购买另一个315/433MHz EM、但可以通过868/915MHz EM 进行原型设计、但只需稍作修改: