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:由于 CC1101收到不正确的数据、CC1101无法连接到 CC1310

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1325837/cc1310-cc1101-failed-to-connect-to-cc1310-because-cc1101-received-incorrect-data

器件型号:CC1310
主题中讨论的其他器件:CC1101

大家好、

当 CC1310和1310之间的通信数据正常且1101和1101之间的通信数据正常时、在非曼彻斯特编码模式下、CC1310器件之间接收到的数据与 TX 发送器发送的数据一致、不包括原始数据错误。 此外、观察到的频谱是相同的、排除了频率偏移设置问题。 后来发现通过串行端口读取从 CC1101发送到 CC1310的数据是正常的、但从1101发送到 CC1310的数据与原始数据不匹配。

从1101的 RXfifo 读取的数据包含一个地址、但我尚未设置该地址。 读取地址为06、数据包长度为 E7、但是在1310程序中、数据包长度应为30、数据内容不正确。 经过仔细检查,我们发现了三段重复的数据,其来源不明。

这是预期数据:

 packet[0]= PAYLOAD_LENGTH;//PAYLOAD_LENGTH=30
packet[1]=(uint8_t)(seqNumber >> 8);
packet[2]=(uint8_t)(seqNumber++);
uint8_t i;
对于(I = 3;I < PAYLOAD_LENGTH +1;I++)
{
// packet[i]=rand ();
数据包[i]= 0x11;

CC1101 RX 代码:

这就是接收到的数据:

我建议客户参考在 CC1310上的低数据速率操作,、但还没解决。

CC1101和 CC1310之间的一个比较器使用非曼彻斯特

此致、

银河

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

    我不确定您遇到的问题、因此我将通过一些示例来说明如何设置 CC1310和 CC1101之间的通信:

    第一种方法是使用 SmartRF Studio:

    CC1310和 CC1101的寄存器设置如下所示:

    //*********************************************************************************
    // Parameter summary
    // RX Address0: 0xAA 
    // RX Address1: 0xBB 
    // RX Address Mode: No address check 
    // Frequency: 868.00000 MHz
    // Data Format: Serial mode disable 
    // Deviation: 25.000 kHz
    // Packet Length Config: Variable 
    // Max Packet Length: 255 
    // Packet Length: 30 
    // Packet Data: 255 
    // RX Filter BW: 98.0 kHz
    // Symbol Rate: 50.00000 kBaud
    // Sync Word Length: 32 Bits 
    // TX Power: 14 dBm (requires define CCFG_FORCE_VDDR_HH = 1 in ccfg.c, see CC13xx/CC26xx Technical Reference Manual)
    // Whitening: No whitening 
    
    #include "smartrf_settings.h"
    
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_genfsk.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_rfe_genfsk.h)
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
        .rfMode = RF_MODE_PROPRIETARY_SUB_1,
        .cpePatchFxn = &rf_patch_cpe_genfsk,
        .mcePatchFxn = 0,
        .rfePatchFxn = &rf_patch_rfe_genfsk
    };
    
    
    // Overrides for CMD_PROP_RADIO_DIV_SETUP
    uint32_t pOverrides[] =
    {
        // override_use_patch_prop_genfsk.xml
        // PHY: Use MCE ROM bank 4, RFE RAM patch
        MCE_RFE_OVERRIDE(0,4,0,1,0,0),
        // override_synth_prop_863_930_div5.xml
        // Synth: Set recommended RTRIM to 7
        HW_REG_OVERRIDE(0x4038,0x0037),
        // Synth: Set Fref to 4 MHz
        (uint32_t)0x000684A3,
        // Synth: Configure fine calibration setting
        HW_REG_OVERRIDE(0x4020,0x7F00),
        // Synth: Configure fine calibration setting
        HW_REG_OVERRIDE(0x4064,0x0040),
        // Synth: Configure fine calibration setting
        (uint32_t)0xB1070503,
        // Synth: Configure fine calibration setting
        (uint32_t)0x05330523,
        // Synth: Set loop bandwidth after lock to 20 kHz
        (uint32_t)0x0A480583,
        // Synth: Set loop bandwidth after lock to 20 kHz
        (uint32_t)0x7AB80603,
        // Synth: Configure VCO LDO (in ADI1, set VCOLDOCFG=0x9F to use voltage input reference)
        ADI_REG_OVERRIDE(1,4,0x9F),
        // Synth: Configure synth LDO (in ADI1, set SLDOCTL0.COMP_CAP=1)
        ADI_HALFREG_OVERRIDE(1,7,0x4,0x4),
        // Synth: Use 24 MHz XOSC as synth clock, enable extra PLL filtering
        (uint32_t)0x02010403,
        // Synth: Configure extra PLL filtering
        (uint32_t)0x00108463,
        // Synth: Increase synth programming timeout (0x04B0 RAT ticks = 300 us)
        (uint32_t)0x04B00243,
        // override_phy_rx_aaf_bw_0xd.xml
        // Rx: Set anti-aliasing filter bandwidth to 0xD (in ADI0, set IFAMPCTL3[7:4]=0xD)
        ADI_HALFREG_OVERRIDE(0,61,0xF,0xD),
        // override_phy_gfsk_rx.xml
        // Rx: Set LNA bias current trim offset to 3
        (uint32_t)0x00038883,
        // Rx: Freeze RSSI on sync found event
        HW_REG_OVERRIDE(0x6084,0x35F1),
        // override_phy_gfsk_pa_ramp_agc_reflevel_0x1a.xml
        // Tx: Configure PA ramping setting (0x41). Rx: Set AGC reference level to 0x1A.
        HW_REG_OVERRIDE(0x6088,0x411A),
        // Tx: Configure PA ramping setting
        HW_REG_OVERRIDE(0x608C,0x8213),
        // override_phy_rx_rssi_offset_5db.xml
        // Rx: Set RSSI offset to adjust reported RSSI by +5 dB (default: 0), trimmed for external bias and differential configuration
        (uint32_t)0x00FB88A3,
        // TX power override
        // Tx: Set PA trim to max (in ADI0, set PACTL0=0xF8)
        ADI_REG_OVERRIDE(0,12,0xF8),
        (uint32_t)0xFFFFFFFF
    };
    
    
    // CMD_PROP_RADIO_DIV_SETUP
    // Proprietary Mode Radio Setup Command for All Frequency Bands
    rfc_CMD_PROP_RADIO_DIV_SETUP_t RF_cmdPropRadioDivSetup =
    {
        .commandNo = 0x3807,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .modulation.modType = 0x1,
        .modulation.deviation = 0x64,
        .symbolRate.preScale = 0xF,
        .symbolRate.rateWord = 0x8000,
        .symbolRate.decimMode = 0x0,
        .rxBw = 0x24,
        .preamConf.nPreamBytes = 0x4,
        .preamConf.preamMode = 0x0,
        .formatConf.nSwBits = 0x20,
        .formatConf.bBitReversal = 0x0,
        .formatConf.bMsbFirst = 0x1,
        .formatConf.fecMode = 0x0,
        .formatConf.whitenMode = 0x0,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x1,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .txPower = 0xA73F,
        .pRegOverride = pOverrides,
        .centerFreq = 0x0364,
        .intFreq = 0x8000,
        .loDivider = 0x05
    };
    
    
    // CMD_FS
    // Frequency Synthesizer Programming Command
    rfc_CMD_FS_t RF_cmdFs =
    {
        .commandNo = 0x0803,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .frequency = 0x0364,
        .fractFreq = 0x0000,
        .synthConf.bTxMode = 0x0,
        .synthConf.refFreq = 0x0,
        .__dummy0 = 0x00,
        .__dummy1 = 0x00,
        .__dummy2 = 0x00,
        .__dummy3 = 0x0000
    };
    
    
    // CMD_PROP_TX
    // Proprietary Mode Transmit Command
    rfc_CMD_PROP_TX_t RF_cmdPropTx =
    {
        .commandNo = 0x3801,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0x0,
        .pktConf.bUseCrc = 0x1,
        .pktConf.bVarLen = 0x1,
        .pktLen = 0x1E,
        .syncWord = 0xD391D391,
        .pPkt = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    };
    
    
    // CMD_PROP_RX
    // Proprietary Mode Receive Command
    rfc_CMD_PROP_RX_t RF_cmdPropRx =
    {
        .commandNo = 0x3802,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0x0,
        .pktConf.bRepeatOk = 0x0,
        .pktConf.bRepeatNok = 0x0,
        .pktConf.bUseCrc = 0x1,
        .pktConf.bVarLen = 0x1,
        .pktConf.bChkAddress = 0x0,
        .pktConf.endType = 0x0,
        .pktConf.filterOp = 0x0,
        .rxConf.bAutoFlushIgnored = 0x0,
        .rxConf.bAutoFlushCrcErr = 0x0,
        .rxConf.bIncludeHdr = 0x1,
        .rxConf.bIncludeCrc = 0x0,
        .rxConf.bAppendRssi = 0x0,
        .rxConf.bAppendTimestamp = 0x0,
        .rxConf.bAppendStatus = 0x1,
        .syncWord = 0xD391D391,
        .maxPktLen = 0xFF,
        .address0 = 0xAA,
        .address1 = 0xBB,
        .endTrigger.triggerType = 0x1,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .endTime = 0x00000000,
        .pQueue = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
        .pOutput = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    };

    /* Address Config = No address check */
    /* Base Frequency = 867.999939 */
    /* CRC Autoflush = false */
    /* CRC Enable = true */
    /* Carrier Frequency = 867.999939 */
    /* Channel Number = 0 */
    /* Channel Spacing = 199.951172 */
    /* Data Format = Normal mode */
    /* Data Rate = 49.9878 */
    /* Deviation = 25.390625 */
    /* 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 = 101.562500 */
    /* Sync Word Qualifier Mode = 30/32 sync word bits detected */
    /* TX Power = 0 */
    /* Whitening = false */
    /* PA table */
    #define PA_TABLE {0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
    /***************************************************************
     *  SmartRF Studio(tm) Export
     *
     *  Radio register settings specifed with C-code
     *  compatible #define statements.
     *
     *  RF device: CC1101
     *
     ***************************************************************/
    
    #ifndef SMARTRF_CC1101_H
    #define SMARTRF_CC1101_H
    
    #define SMARTRF_RADIO_CC1101
    #define SMARTRF_SETTING_IOCFG0       0x06
    #define SMARTRF_SETTING_FIFOTHR      0x47
    #define SMARTRF_SETTING_PKTCTRL0     0x05
    #define SMARTRF_SETTING_FSCTRL1      0x06
    #define SMARTRF_SETTING_FREQ2        0x21
    #define SMARTRF_SETTING_FREQ1        0x62
    #define SMARTRF_SETTING_FREQ0        0x76
    #define SMARTRF_SETTING_MDMCFG4      0xCA
    #define SMARTRF_SETTING_MDMCFG3      0xF8
    #define SMARTRF_SETTING_MDMCFG2      0x13
    #define SMARTRF_SETTING_DEVIATN      0x40
    #define SMARTRF_SETTING_MCSM0        0x18
    #define SMARTRF_SETTING_FOCCFG       0x16
    #define SMARTRF_SETTING_AGCCTRL2     0x43
    #define SMARTRF_SETTING_WORCTRL      0xFB
    #define SMARTRF_SETTING_FSCAL3       0xE9
    #define SMARTRF_SETTING_FSCAL2       0x2A
    #define SMARTRF_SETTING_FSCAL1       0x00
    #define SMARTRF_SETTING_FSCAL0       0x1F
    #define SMARTRF_SETTING_TEST2        0x81
    #define SMARTRF_SETTING_TEST1        0x35
    #define SMARTRF_SETTING_TEST0        0x09
    #define SMARTRF_SETTING_LQI          0x7F
    #define SMARTRF_SETTING_RSSI         0x80
    #define SMARTRF_SETTING_MARCSTATE    0x01
    #define SMARTRF_SETTING_VCO_VC_DAC   0x94
    
    #endif

    我还使用了4.20 SDK 中的 rfPacketTX 示例、并使用上面显示的设置对其进行了修改。

    数据包内容更改如下:

    while(1)
    {
        /* Create packet with incrementing sequence number and random payload */
        //packet[0] = (uint8_t)(seqNumber >> 8);
        //packet[1] = (uint8_t)(seqNumber++);
        uint8_t i;
        for (i = 0; i < PAYLOAD_LENGTH; i++)
        {
            packet[i] = i + 1;
        }
    
        /* Send packet */
        RF_EventMask terminationReason = RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTx,
                                                   RF_PriorityNormal, NULL, 0);

    此外、还包括 CC1101和 SmartRF Studio 正确接收的以下数据包:

    我还制作了一个小型 CC1101程序、其中使用了与上述相同的设置、并验证了这里的数据包是否也被正确接收:

    #define ISR_ACTION_REQUIRED 1
    #define ISR_IDLE            0
    
    #define PKTLEN              30
    
    #define GPIO2               0x08
    #define GPIO0               0x80
    
    
    /*******************************************************************************
    * LOCAL VARIABLES
    */
    static uint8  packetSemaphore;
    static uint32 packetCounter = 0;
    
    
    /*******************************************************************************
    * STATIC FUNCTIONS
    */
    static void initMCU(void);
    static void registerConfig(void);
    static void runRX(void);
    static void radioRxISR(void);
    
    
    /*******************************************************************************
    *   @fn         main
    *
    *   @brief      Runs the main routine
    *
    *   @param      none
    *
    *   @return     none
    */
    void main(void) {
    
        // initialize MCU and peripherals
        initMCU();
    
        // Write radio registers
        registerConfig();
    
        // Enter runRX, never coming back
        runRX();
    }
    
    static void runRX(void) {
    
        uint8 rxBuffer[64] = {0};
        uint8 rxBytes;
        uint8 marcstate;
    
        // Connect ISR function to GPIO0
        ioPinIntRegister(IO_PIN_PORT_1, GPIO0, &radioRxISR);
    
        // Interrupt on falling edge
        ioPinIntTypeSet(IO_PIN_PORT_1, GPIO0, IO_PIN_FALLING_EDGE);
    
        // Clear ISR flag
        ioPinIntClear(IO_PIN_PORT_1, GPIO0);
    
        // Enable interrupt
        ioPinIntEnable(IO_PIN_PORT_1, GPIO0);
    
        // Update LCD
        updateLcd();
    
        // Set radio in RX
        trxSpiCmdStrobe(CC1101_SRX);
    
        // Infinite loop 
        while(TRUE) {
        
            // wait for packet received interrupt
            if(packetSemaphore == ISR_ACTION_REQUIRED) {
            
                // Read number of bytes in RX FIFO
                cc1101SpiReadReg(CC1101_RXBYTES,&rxBytes,1);
                
                // Check that we have bytes in FIFO
                if(rxBytes != 0) {
    
                    // Check for RX FIFO overflow (MSB of RXBYTES)
                    if(rxBytes & 0x80) {
    
                        // Flush RX FIFO
                        trxSpiCmdStrobe(CC1101_SFRX);
                    } else {
    
                        // Read n bytes from RX FIFO
                        cc1101SpiReadRxFifo(rxBuffer,(rxBytes));
                        
                        // Check CRC ok (CRC_OK: bit7 in second status byte)
                        // This assumes status bytes are appended in RX_FIFO
                        // (PKTCTRL1.APPEND_STATUS = 1)
                        // If CRC is disabled the CRC_OK field will read 1
                        if(rxBuffer[rxBytes - 1] & 0x80) {
    
                            // Update packet counter
                            packetCounter++;
                        }
                    }
                }
    
                // Reset packet semaphore
                packetSemaphore = ISR_IDLE;
    
                // Set radio back in RX
                trxSpiCmdStrobe(CC1101_SRX);
            }
        }
    }
    
    static void radioRxISR(void) {
    
        // Set packet semaphore
        packetSemaphore = ISR_ACTION_REQUIRED;
    
        // Clear ISR flag
        ioPinIntClear(IO_PIN_PORT_1, GPIO2);
    }

    希望这对您有所帮助。

    Siri

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

    尊敬的 Siri:

    我已经尝试过、CC1310和 CC1101均使用上述示例的868MHz 设置、然后导入相应的寄存器、并使用 CC1310发送、发现 CC1101仍然无法接收数据。

    CC1310的代码 :

    void *mainThread(void *arg0)
    {
    RF_Params rfParams;
    RF_Params_init(&rfParams);
    
    /* Open LED pins */
    ledPinHandle = PIN_open(&ledPinState, pinTable);
    if (ledPinHandle == NULL)
    {
    while(1);
    }
    
    #ifdef POWER_MEASUREMENT
    #if defined(Board_CC1350_LAUNCHXL)
    /* Route out PA active pin to Board_DIO30_SWPWR */
    PINCC26XX_setMux(ledPinHandle, Board_DIO30_SWPWR, PINCC26XX_MUX_RFC_GPO1);
    #endif
    #endif
    
    RF_cmdPropTx.pktLen = PAYLOAD_LENGTH;
    RF_cmdPropTx.pPkt = packet;
    RF_cmdPropTx.startTrigger.triggerType = TRIG_NOW;
    
    /* Request access to the radio */
    #if defined(DeviceFamily_CC26X0R2)
    rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioSetup, &rfParams);
    #else
    rfHandle = RF_open(&rfObject, &RF_prop, (RF_RadioSetup*)&RF_cmdPropRadioDivSetup, &rfParams);
    #endif// DeviceFamily_CC26X0R2
    
    /* Set the frequency */
    RF_postCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);
    
    while(1)
    {
    /* Create packet with incrementing sequence number and random payload */
    packet[0] = (uint8_t)(seqNumber >> 8);
    packet[1] = (uint8_t)(seqNumber++);
    uint8_t i;
    for (i = 0; i < PAYLOAD_LENGTH; i++)
    {
    packet[i] = i + 1;
    }
    
    
    PIN_setOutputValue(ledPinHandle, CC1310_LAUNCHXL_PIN_RLED , !PIN_getOutputValue(CC1310_LAUNCHXL_PIN_RLED ));
    //reverse
    
    /* Send packet */
    RF_EventMask terminationReason = RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTx,
    RF_PriorityNormal, NULL, 0);
    
    }

    我非常确信1101和1101可以使用您推荐的1101设置相互通信、也就是说可以正常接收1101数据、然后可以通过光谱仪上发出的正常波形观察 CC1310。 此外、我使用 CC1310和 CC1101同时连接到 RFstudio7配置面板。 除了频率设置为433之外、其他不变的、未接收到1101数据的结果、可以从存在1101波形的连续接收中观察到、但无法接收数据、 然后1310和1101在烧录程序方法的两侧,手动修改参数为433MHz 无法接收数据。

    问题仍然没有解决、我想问您能不能给我一个 CC1310发射和 CC1101以433MHz 接收的程序、以及两个面的 RF 参数配置、谢谢您。

    此致、

    银河

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

    CC1310以433兆赫进行发送、CC1101接收

    CC1310设置:

    //*********************************************************************************
    // Parameter summary
    // RX Address0: 0xAA 
    // RX Address1: 0xBB 
    // RX Address Mode: No address check 
    // Frequency: 433.00000 MHz
    // Data Format: Serial mode disable 
    // Deviation: 25.000 kHz
    // Packet Length Config: Variable 
    // Max Packet Length: 255 
    // Packet Length: 10 
    // Packet Data: 255 
    // RX Filter BW: 98.0 kHz
    // Symbol Rate: 50.00000 kBaud
    // Sync Word Length: 32 Bits 
    // TX Power: 15 dBm (requires define CCFG_FORCE_VDDR_HH = 1 in ccfg.c, see CC13xx/CC26xx Technical Reference Manual)
    // Whitening: No whitening 
    
    #include "smartrf_settings.h"
    
    #include DeviceFamily_constructPath(rf_patches/rf_patch_cpe_genfsk.h)
    #include DeviceFamily_constructPath(rf_patches/rf_patch_rfe_genfsk.h)
    
    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
        .rfMode = RF_MODE_PROPRIETARY_SUB_1,
        .cpePatchFxn = &rf_patch_cpe_genfsk,
        .mcePatchFxn = 0,
        .rfePatchFxn = &rf_patch_rfe_genfsk
    };
    
    
    // Overrides for CMD_PROP_RADIO_DIV_SETUP
    uint32_t pOverrides[] =
    {
        // override_use_patch_prop_genfsk.xml
        // PHY: Use MCE ROM bank 4, RFE RAM patch
        MCE_RFE_OVERRIDE(0,4,0,1,0,0),
        // override_synth_prop_863_930_div5.xml
        // Synth: Set recommended RTRIM to 7
        HW_REG_OVERRIDE(0x4038,0x0037),
        // Synth: Set Fref to 4 MHz
        (uint32_t)0x000684A3,
        // Synth: Configure fine calibration setting
        HW_REG_OVERRIDE(0x4020,0x7F00),
        // Synth: Configure fine calibration setting
        HW_REG_OVERRIDE(0x4064,0x0040),
        // Synth: Configure fine calibration setting
        (uint32_t)0xB1070503,
        // Synth: Configure fine calibration setting
        (uint32_t)0x05330523,
        // Synth: Set loop bandwidth after lock to 20 kHz
        (uint32_t)0x0A480583,
        // Synth: Set loop bandwidth after lock to 20 kHz
        (uint32_t)0x7AB80603,
        // Synth: Configure VCO LDO (in ADI1, set VCOLDOCFG=0x9F to use voltage input reference)
        ADI_REG_OVERRIDE(1,4,0x9F),
        // Synth: Configure synth LDO (in ADI1, set SLDOCTL0.COMP_CAP=1)
        ADI_HALFREG_OVERRIDE(1,7,0x4,0x4),
        // Synth: Use 24 MHz XOSC as synth clock, enable extra PLL filtering
        (uint32_t)0x02010403,
        // Synth: Configure extra PLL filtering
        (uint32_t)0x00108463,
        // Synth: Increase synth programming timeout (0x04B0 RAT ticks = 300 us)
        (uint32_t)0x04B00243,
        // override_phy_rx_aaf_bw_0xd.xml
        // Rx: Set anti-aliasing filter bandwidth to 0xD (in ADI0, set IFAMPCTL3[7:4]=0xD)
        ADI_HALFREG_OVERRIDE(0,61,0xF,0xD),
        // override_phy_gfsk_rx.xml
        // Rx: Set LNA bias current trim offset to 3
        (uint32_t)0x00038883,
        // Rx: Freeze RSSI on sync found event
        HW_REG_OVERRIDE(0x6084,0x35F1),
        // override_phy_gfsk_pa_ramp_agc_reflevel_0x1a.xml
        // Tx: Configure PA ramping setting (0x41). Rx: Set AGC reference level to 0x1A.
        HW_REG_OVERRIDE(0x6088,0x411A),
        // Tx: Configure PA ramping setting
        HW_REG_OVERRIDE(0x608C,0x8213),
        // override_phy_rx_rssi_offset_5db.xml
        // Rx: Set RSSI offset to adjust reported RSSI by +5 dB (default: 0), trimmed for external bias and differential configuration
        (uint32_t)0x00FB88A3,
        // TX power override
        // Tx: Set PA trim to max (in ADI0, set PACTL0=0xF8)
        ADI_REG_OVERRIDE(0,12,0xF8),
        (uint32_t)0xFFFFFFFF
    };
    
    
    // CMD_PROP_RADIO_DIV_SETUP
    // Proprietary Mode Radio Setup Command for All Frequency Bands
    rfc_CMD_PROP_RADIO_DIV_SETUP_t RF_cmdPropRadioDivSetup =
    {
        .commandNo = 0x3807,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .modulation.modType = 0x1,
        .modulation.deviation = 0x64,
        .symbolRate.preScale = 0xF,
        .symbolRate.rateWord = 0x8000,
        .symbolRate.decimMode = 0x0,
        .rxBw = 0x24,
        .preamConf.nPreamBytes = 0x4,
        .preamConf.preamMode = 0x0,
        .formatConf.nSwBits = 0x20,
        .formatConf.bBitReversal = 0x0,
        .formatConf.bMsbFirst = 0x1,
        .formatConf.fecMode = 0x0,
        .formatConf.whitenMode = 0x0,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x1,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .txPower = 0x913F,
        .pRegOverride = pOverrides,
        .centerFreq = 0x01B1,
        .intFreq = 0x8000,
        .loDivider = 0x0A
    };
    
    
    // CMD_FS
    // Frequency Synthesizer Programming Command
    rfc_CMD_FS_t RF_cmdFs =
    {
        .commandNo = 0x0803,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .frequency = 0x01B1,
        .fractFreq = 0x0000,
        .synthConf.bTxMode = 0x0,
        .synthConf.refFreq = 0x0,
        .__dummy0 = 0x00,
        .__dummy1 = 0x00,
        .__dummy2 = 0x00,
        .__dummy3 = 0x0000
    };
    
    
    // CMD_PROP_TX
    // Proprietary Mode Transmit Command
    rfc_CMD_PROP_TX_t RF_cmdPropTx =
    {
        .commandNo = 0x3801,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0x0,
        .pktConf.bUseCrc = 0x1,
        .pktConf.bVarLen = 0x1,
        .pktLen = 0x0A,
        .syncWord = 0xD391D391,
        .pPkt = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    };
    
    
    // CMD_PROP_RX
    // Proprietary Mode Receive Command
    rfc_CMD_PROP_RX_t RF_cmdPropRx =
    {
        .commandNo = 0x3802,
        .status = 0x0000,
        .pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
        .startTime = 0x00000000,
        .startTrigger.triggerType = 0x0,
        .startTrigger.bEnaCmd = 0x0,
        .startTrigger.triggerNo = 0x0,
        .startTrigger.pastTrig = 0x0,
        .condition.rule = 0x1,
        .condition.nSkip = 0x0,
        .pktConf.bFsOff = 0x0,
        .pktConf.bRepeatOk = 0x0,
        .pktConf.bRepeatNok = 0x0,
        .pktConf.bUseCrc = 0x1,
        .pktConf.bVarLen = 0x1,
        .pktConf.bChkAddress = 0x0,
        .pktConf.endType = 0x0,
        .pktConf.filterOp = 0x0,
        .rxConf.bAutoFlushIgnored = 0x0,
        .rxConf.bAutoFlushCrcErr = 0x0,
        .rxConf.bIncludeHdr = 0x1,
        .rxConf.bIncludeCrc = 0x0,
        .rxConf.bAppendRssi = 0x0,
        .rxConf.bAppendTimestamp = 0x0,
        .rxConf.bAppendStatus = 0x1,
        .syncWord = 0xD391D391,
        .maxPktLen = 0xFF,
        .address0 = 0xAA,
        .address1 = 0xBB,
        .endTrigger.triggerType = 0x1,
        .endTrigger.bEnaCmd = 0x0,
        .endTrigger.triggerNo = 0x0,
        .endTrigger.pastTrig = 0x0,
        .endTime = 0x00000000,
        .pQueue = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
        .pOutput = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
    };

    CC1101设置:

    / Address Config = No address check 
    // Base Frequency = 432.999817 
    // CRC Autoflush = false 
    // CRC Enable = true 
    // Carrier Frequency = 432.999817 
    // Channel Number = 0 
    // Channel Spacing = 199.951172 
    // Data Format = Normal mode 
    // Data Rate = 49.9878 
    // Deviation = 20.629883 
    // 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 = 101.562500 
    // Sync Word Qualifier Mode = 30/32 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_FIFOTHR,       0x47},
      {CC1101_PKTCTRL0,      0x05},
      {CC1101_FSCTRL1,       0x06},
      {CC1101_FREQ2,         0x10},
      {CC1101_FREQ1,         0xA7},
      {CC1101_FREQ0,         0x62},
      {CC1101_MDMCFG4,       0xCA},
      {CC1101_MDMCFG3,       0xF8},
      {CC1101_MDMCFG2,       0x13},
      {CC1101_DEVIATN,       0x35},
      {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_TEST2,         0x81},
      {CC1101_TEST1,         0x35},
      {CC1101_TEST0,         0x09},
      {CC1101_LQI,           0x7F},
      {CC1101_RSSI,          0x80},
      {CC1101_MARCSTATE,     0x01},
      {CC1101_VCO_VC_DAC,    0x94},
    };

    我的第一篇文章中已经提供了可用于测试的代码。

    我正在使用 CC1310 LP 和 CC1101 EM 进行测试

    Siri

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

    尊敬的 Siri:

    感谢您提供的示例、但遗憾的是、通信仍然失败。 以下是我的射频面板配置和运行状态:

    现在我有三个疑问:

        首先、我使用 Smart RF studio7 2_30_0、此版本是否无法正常工作?

        第二、在任何情况下都无法正常通信、是否存在硬件问题? 您能否详细说明问题、以便我们的工程师继续跟进?

        第三、您的工程师使用 CC1310 LP 和 CC1101 EM 进行测试。 这个问题是否是由我的版本的开发板与您的版本之间的差异引起的? 此外、您能否提供用于测试的两块开发板的购买链接?

     我使用的是 CC1310 F128RHB 版本、是否因为通信异常且无法接收数据而与您使用的版本不同? 为了解决这个问题、我打算购买 CC1310 launchpad 进行测试。 有必要吗?  

    此致、

    银河

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

    请为您的 CC1310和 CC1101设置提供一个从 Studio 导出的代码、而不是 发出屏幕截图以便我可以查看寄存器。

    我使用的 是与您相同的 Studio 版本。

    请记住、CC1310 LP 针对868 MHz 而不是433 MHz 进行了优化、因此请将各电路板靠近放置并使用天线来  确保信号强度足够高。

    我不确定使用  CC1310 F128RHB 是否会起作用。

    您应该做的是 在 Studio 中针对 CC1310测试 CC1301、然后针对 CC1101测试到 CC1101。

    这样、您至少可以验证您的电路板是否能在 Studio 中正常工作。  

    如果 CC1310到 CC1310不起作用、则问题不是与 CC1101通信、而是与您的电路板相关的 CC1310问题。

    对于 CC1101、我使用 TrxEB + CC1101 EM。 请勿认为这些电路板仍然可用。

    Siri

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

    在 Smart RF 配置面板下、1310和1310之间的通信是正常的、但是1101和1101之间的通信似乎不起作用。 我以前发现、当 CC1101连接到 RF Studio 并执行发送数据命令时、只能发送一个数据包。 1310可以接收到该数据包、然后在1101中单击停止按钮。 软件卡住。 一段时间后、下图显示 CC 调试器只能在重新插接后才能使用。

    我尝试了几台电脑,但这一切都发生了。 因此,我怀疑在接收1101 RF 演播室是否有问题. 最后、我使用了由您提供的 Studio 导出的433Hz 频率的 CC1310和 CC1101设置代码、但我发现这些代码在 RF Studio 中不起作用、所以我将这些代码烧录到了各自的微控制器、以便运行。 有射频、工程师已经对这两款器件做了调整、1101是我们比较成熟的产品、计划部分应该没问题、我已经对 CC1310和 CC1101这几个部分重复做了几次。

    此致、

    银河

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

    从 SmartRF Studio 运行 CC1101时、您正在使用什么电路板?

    此外、如果您的电路板无法从 Studio 运行、您是否能够独立运行它们(CC1101 -> CC1101)?

    如果您无法在两个 CC1101板之间独立通信(使用 Studio 中的一些典型设置来测试此情况)、则您的硬件或软件可能出现问题。

    您的软件应该非常容易检查、因为它只需要:

    初始化 MCU

    通过 SPI 初始化无线电

    (Rx):选通 SRX 并等待数据包中断

    (TX):将数据包写入 FIFO 和选通 TX

    Siri

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

    1101采用了公司自己的开发板,我非常确信他们可以独立运行,在1101之间发送数据完全正常,1101甚至可以正常发送数据至1310。 但当前要求只有1310才能发送数据到1101、单次通信、最后我在1310做过美白、1110做过1,310,1310发现1101可以接收到数据、但是数据弄错了、长度也错了。 我的问题的开头包含相关的数据内容。

    此致、

    银河

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

    您好

    要尝试进行总结:

    您拥有两块 CC1310板(LP)、并且您已确认它们可以按照我提供的设置与 Studio 进行通信。

    这意味着 CC1310板没有问题、设置没有问题

    您有两个 CC1101 (定制)声称可以使用客户的代码相互通信。

    您需要确认这些板仍然可以通过我提供给您的设置相互通信。

    如果他们不能、 他们的硬件或他们的软件有问题(正如我已经测试了我发送给您的设置、他们是工作的)。

    如果您使此功能正常工作、则表明硬件正常、软件正常。

    目前仍不清楚您是没有收到 CC1310的任何内容、还是收到了某些内容、但您认为是错的。

    如果是后一种情况、请分享您从 CC1310的 SmartRF Studio 传输的内容、 这是 CC1101的完整寄存器列表以及 RX 代码(发送代码、而不仅仅是代码的屏幕截图)、以及有关从 CC1101 FIFO 读取的确切内容的信息。

    Siri

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

    您好,

    这两个 CC1101部件可以使用您推荐的射频配置正常运行、并且可以互相通信。 发送给我的设置确实可以成功地运行在单芯片微型计算机上,但他们似乎运行异常的 SMART RF 工作室,只能发送一个数据包发送,接收似乎也不起作用. 现在、我 将 在单芯片微型计算机上运行1101。 1310使用 SMART RF Studio、检查1101是否收到数据、 正确吗?

    我为 CC1101提供了一些代码。433 MhzRF 设置是您所提供的设置。


    const char *g_Ashining = "ashining";
    void CC1101_Init( void )
    {
    	uint8_t i = 0;
    
    	CC1101_Gpio_Init( );
    	CC1101_Reset( );    
    
    	for( i = 0; i < 59; i++ )
    	{
    		CC1101_Write_Reg( CC1101InitData[i][0], CC1101InitData[i][1] );
    	}
    	CC1101_Set_Address( 0x05, BROAD_0AND255 );	//
    	CC1101_Set_Sync( 0xd391 );					//
    	CC1101_Write_Reg(CC1101_MDMCFG1, 0x72);		//Configuring the modem
    
    	CC1101_Write_Multi_Reg( CC1101_PATABLE, (uint8_t*)PaTabel, 8 );
    }
    
    uint8_t CC1101_Rx_Packet( uint8_t *RxBuff )
    {
    	uint8_t l_PktLen = 0;
        uint8_t l_Status[ 2 ] = { 0 };
    	uint16_t l_RxWaitTimeout = 0;
    
    	while( 0 == CC1101_GET_GDO0_STATUS( ))		//µÈ´ý½ÓÊÕÍê³É
    	{
    		delay1ms( 1 );
    		if( 3000 == l_RxWaitTimeout++ )
    		{
    			l_RxWaitTimeout = 0;
    			CC1101_Init( );
    			break; 
    		} 
    	}
    		
    
        if( 0 != CC1101_Get_RxCounter( ))
        {
            l_PktLen = CC1101_Read_Reg( CC1101_RXFIFO );           // »ñÈ¡³¤¶ÈÐÅÏ¢
    		
    		if( ( CC1101_Read_Reg( CC1101_PKTCTRL1 ) & 0x03 ) != 0 )
            {
              uint8_t aa= CC1101_Read_Reg( CC1101_RXFIFO );					//Èç¹ûÊý¾Ý°üÖаüº¬µØÖ·ÐÅÏ¢ £¬Ôò¶ÁÈ¡µØÖ·ÐÅÏ¢
    			if(aa!=0)
    			//drv_led_on( LED_RED );
    			drv_uart_tx_bytes(&aa, 1);	//Êä³ö½ÓÊÕµ½µÄ×Ö½Ú                                                                    FF
            }
            if( l_PktLen == 0 )           
    		{
    			return 0;			//ÎÞÊý¾Ý
    		}
            else 
    		{
    			drv_uart_tx_bytes(&l_PktLen, 1);
    			l_PktLen--; 		//¼õÈ¥Ò»¸öµØÖ·×Ö½Ú
    			
    		}
            CC1101_Read_Multi_Reg( CC1101_RXFIFO, RxBuff, l_PktLen ); 	//¶ÁÈ¡Êý¾Ý
            CC1101_Read_Multi_Reg( CC1101_RXFIFO, l_Status, 2 );		//¶ÁÈ¡Êý¾Ý°ü×îºóÁ½¸ö¶îÍâ×Ö½Ú£¬ºóÒ»¸öΪCRC±ê־λ
    
            CC1101_Clear_RxBuffer( );
    
            if( l_Status[ 1 ] & CRC_OK )
    		{   
    			return l_PktLen; 
    		}
            else
    		{   
    			drv_led_on( LED_RED );
    			return 0; 
    		}
        }
        else   
    	{  
    		return 0; 
    	}                              
    }
    
    int main( void )
    {	
    	uint8_t i = 0;
    
    	//´Registered¿Ú³õʼ»¯
    	drv_uart_init( 9600 );
    	
    	//LED³õʼ»¯
    	drv_led_init( );
    	
    	//SPI³õʼ»¯
    	drv_spi_init( );
    	
    	//CC1101³õʼ»¯
    	CC1101_Init( );
    		while( 1 )
    	{
    		
    		CC1101_Clear_RxBuffer( );
    		CC1101_Set_Mode( RX_MODE );
    		i = CC1101_Rx_Packet( g_RF24L01RxBuffer );		//½ÓÊÕ×Ö½Ú
    		if( 0 != i )
    		{
    			delay1ms( 1000 );	
    			led_green_flashing( );
    			drv_uart_tx_bytes( g_RF24L01RxBuffer, i );	//Êä³ö½ÓÊÕµ½µÄ×Ö½Ú
    		}
    	}
    }

    此致、

    银河

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

    我不明白您在提供的代码中做了什么、我不确定您在帖子中询问了什么。

    例如、在代码中、您可以写入59个寄存器、但我给出了您应该使用的26个寄存器的列表?

    为什么要写入所有这些寄存器、要写入什么值?

    以下操作是什么:

    CC1101_AND255 Set_Address (0x05、Broad_0AND255);

    您是否写入任何寄存器?如果是、是哪些寄存器???

    您以前没有提到地址滤波、因此如果您在 CC1101上启用了地址滤波、您是从 CC1310发送地址吗??

    为什么要将 CC1101配置为24字节的前导码??

    我不知道还能做些什么来帮助您、也不明白为什么您不能使用我发送给您的寄存器、而是使用一些简单的 CC1101代码进行测试、就像我之前给您提供的代码一样。

    1) 1)获取 CC1310 LP 并将其连接到 SmartRF Studio。

    2) 2)配置它、使其与我在我的文章中显示的2月22日相同

    3) 3)修改 CC1101代码、以执行以下操作:

    int main( void )
    {	
    	uint8_t i = 0;
    
    	// drv_uart_init( 9600 );
    	
    	// drv_led_init( );
    	
    	
    	drv_spi_init( );
    	
    	CC1101_Reset( );    
    
        // Write the 26 registers that I have given you. Nothing else
    	for( i = 0; i < 26; i++ )
    	{
    		CC1101_Write_Reg( CC1101InitData[i][0], CC1101InitData[i][1] );
    	}
    
        // Do not change any other registers that the one I have sent you
    	// CC1101_Set_Address( 0x05, BROAD_0AND255 );
    	// CC1101_Set_Sync( 0xd391 );				
    	// CC1101_Write_Reg(CC1101_MDMCFG1, 0x72);
    
    	CC1101_Write_Multi_Reg( CC1101_PATABLE, (uint8_t*)PaTabel, 8 );
    	
    	// Send the SRX strobe command
    	CC1101_Set_Mode( RX_MODE );
    	
    	while( 1 )
    	{
    		// Wait for a falling edge on GDO0 (IOCFG0 = 0x06)
    		// This should be an interrupt, but you can also poll the pin to determine when it goes from 0 to 1 and then back to 0
        
            // When the GDO0 pin indicates that a packet is received, do the following:
            
    		// Read number of bytes in RX FIFO
            cc1101SpiReadReg(CC1101_RXBYTES,&rxBytes,1);
                
    		// Check that we have bytes in FIFO
    		if(rxBytes != 0)
    		{
    			// Check for RX FIFO overflow (MSB of RXBYTES)
                if(rxBytes & 0x80)
    			{
    				// Flush RX FIFO
                    trxSpiCmdStrobe(CC1101_SFRX);
                }
    			else
    			{
                    // Read n bytes from RX FIFO
                    cc1101SpiReadRxFifo(rxBuffer,(rxBytes));
                        
                    // Check CRC ok
                    if(rxBuffer[rxBytes - 1] & 0x80)
    				{
    					// Update packet counter
                        packetCounter++;
                    }
                }
            }
    
            // Set radio back in RX
            trxSpiCmdStrobe(CC1101_SRX);
        }
    }

    Siri