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.

CC2543: Wireless Link between CC2500 & CC2543

Part Number: CC2543
Other Parts Discussed in Thread: CC2500, , CC2541, CC2510

Hello,

I am trying to set up a wireless link between CC2500 & CC2543. I am using MSK Modulation, 250 Kbps Data Rate & frequency 2420 MHz. I have modified the per_test code for CC2543 to only transmit. Below changes were made in per_test code

halRfConfig(MSK_250kbps, TX, 32, PKT_CONF_NRF);

halRfSetCrc(CRC_16_CCITT);
halRfSetSyncWord(SYNCWORD, 0);
halRfSetTxAddress(0xEF, ADDR_CONF_TX_AUTO, 16);
PRF.ADDR_ENTRY[0].CONF.REUSE = 1;

halRfSetFrequency(2420);

I have followed the register configuration given as per TI guidance. But no luck.

Please help.

-Venu 

  • Venu,

    Can you try using Smart RF Studio to validate RF settings before using an example application?

    You can refer to this e2e thread for a link to SmartRF Studio settings: https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/233569/cc2500-and-cc2543-connectting 

    Regards,

    Daniel

  • Daniel,

    I won't be able to do that as I have custom made boards. We have tried CC2543 peripheral examples. Those are working fine. I have refer to your thread also and based on that only we have made register settings. But no luck.

    Therefore need for some help 

    *There are problems with the setting also. For CC2500, the said frequency is coming around 2434MHz & for CC2543, it's 2440 MHz.

    I made sure that both the frequencies are same. But still no luck. Please help  

  • Venu,

    How are you measuring the actual frequencies of the devices versus what you set in software?

    For the CC2543, did you ensure the LLE was idle before setting the frequency? If you read the register PRF.CHAN.FREQ does it match what you expect? For the CC2500, are you using halRfWriteRfSettings or writing to the frequency registers directly?

    You should be able to use SmartRF Studio with custom hardware, but at the least you can export the radio settings for each device.

    Regards,

    Daniel

  • Danial,

    There was no problem with the frequency setting. It was my mistake.

    For CC2500, I am writing the registers directly.

    PRF.CHAN.FREQ matches with the expectation.

    Yes. LLE is idle before setting the frequency.

    I am able to establish communication between two CC2500 radio nodes and two CC2543 nodes with same setting. But not able establish communication between CC2500 & CC2543.

    Attached are my register setting for CC2500 & CC2543. Please let me know where the problem is

    CC2500_REG.txt
    uint8_t VAL_2_4G_IOCFG2      =     0x0B;
    uint8_t VAL_2_4G_IOCFG1      =     0x2E;
    uint8_t VAL_2_4G_IOCFG0      =     0x06;
    uint8_t VAL_2_4G_FIFOTHR     =     0x07;
    uint8_t VAL_2_4G_SYNC1       =     0xD3;
    uint8_t VAL_2_4G_SYNC0       =     0x91;
    uint8_t VAL_2_4G_PKTLEN      =     0x40;
    uint8_t VAL_2_4G_PKTCTRL1    =     0x04;
    uint8_t VAL_2_4G_PKTCTRL0    =     0x45;
    uint8_t VAL_2_4G_ADDR        =     0x00;
    uint8_t VAL_2_4G_CHANNR      =     0x00; // Freq. Setting - 2440 MHz
    uint8_t VAL_2_4G_FSCTRL1     =     0x0A;
    uint8_t VAL_2_4G_FSCTRL0     =     0x00;
    uint8_t VAL_2_4G_FREQ2       =     0x5D;// Freq. Setting - 2440 MHz
    uint8_t VAL_2_4G_FREQ1       =     0xD8;// Freq. Setting - 2440 MHz
    uint8_t VAL_2_4G_FREQ0       =     0x9D;// Freq. Setting - 2440 MHz
    uint8_t VAL_2_4G_MDMCFG4     =     0x2D;
    uint8_t VAL_2_4G_MDMCFG3     =     0x3B;
    uint8_t VAL_2_4G_MDMCFG2     =     0x73;
    uint8_t VAL_2_4G_MDMCFG1     =     0x22;
    uint8_t VAL_2_4G_MDMCFG0     =     0xF8;
    uint8_t VAL_2_4G_DEVIATN     =     0x00;
    uint8_t VAL_2_4G_MCSM2       =     0x07;
    uint8_t VAL_2_4G_MCSM1       =     0x30;
    uint8_t VAL_2_4G_MCSM0       =     0x18;
    uint8_t VAL_2_4G_FOCCFG      =     0x1D;
    uint8_t VAL_2_4G_BSCFG       =     0x1C;
    uint8_t VAL_2_4G_AGCCTRL2    =     0xC7;
    uint8_t VAL_2_4G_AGCCTRL1    =     0x00;
    uint8_t VAL_2_4G_AGCCTRL0    =     0xB0;
    uint8_t VAL_2_4G_WOREVT1     =     0x87;
    uint8_t VAL_2_4G_WOREVT0     =     0x6B;
    uint8_t VAL_2_4G_WORCTRL     =     0xF8;
    uint8_t VAL_2_4G_FREND1      =     0xB6;
    uint8_t VAL_2_4G_FREND0      =     0x10;
    uint8_t VAL_2_4G_FSCAL3      =     0xEA;
    uint8_t VAL_2_4G_FSCAL2      =     0x0A;
    uint8_t VAL_2_4G_FSCAL1      =     0x11;
    uint8_t VAL_2_4G_FSCAL0      =     0x11;
    uint8_t VAL_2_4G_RCCTRL1      =    0x41;
    uint8_t VAL_2_4G_RCCTRL0      =    0x00;
    uint8_t VAL_2_4G_FSTEST       =    0x59;
    uint8_t VAL_2_4G_PTEST        =    0x7F;
    uint8_t VAL_2_4G_AGCTEST      =    0x3F;
    uint8_t VAL_2_4G_TEST2        =    0x88;
    uint8_t VAL_2_4G_TEST1        =    0x31;
    uint8_t VAL_2_4G_TEST0        =    0x00; 
    
    uint8_t VAL_2_4G_PATABLE       =  0xFE;
    
    uint8_t VAL_2_4G_PARTNUM       =   0x80;
    uint8_t VAL_2_4G_VERSION       =   0x03;
    uint8_t VAL_2_4G_FREQEST       =   0x00;
    uint8_t VAL_2_4G_LQI           =   0x00;
    uint8_t VAL_2_4G_RSS_2_4GI     =   0x80;
    uint8_t VAL_2_4G_MARCSTATE     =   0x01;
    uint8_t VAL_2_4G_WORTIME1      =   0x00;
    uint8_t VAL_2_4G_WORTIME0      =   0x00;
    uint8_t VAL_2_4G_PKTSTATUS     =   0x00;
    uint8_t VAL_2_4G_VCO_VC_DAC    =   0x94;
    uint8_t VAL_2_4G_TXBYTES       =   0x00;
    uint8_t VAL_2_4G_RXBYTES       =   0x00;
    uint8_t VAL_2_4G_RCCTRL1_STATUS =   0x00;
    uint8_t VAL_2_4G_RCCTRL0_STATUS =   0x00;
    CC2543_REG.txt
    LLESTAT = 0x04;
    TXPOWER = 0xE5;
    TXCTRL    = 0x79;       // Change DAC current step from '110' to '111'.
    ACOMPQS   = 0x16;       // Finetune Q phase relative I (i.e. skewness).
    TXFILTCFG = 0x07;       // Set Tx filter bandwidth
    FRMCTRL0 = 0x41;
    MDMCTRL0 = 0x51;
    MDMCTRL1 = 0x48;
    MDMCTRL3 = 0x63;
    ADCTEST0 = 0x66;
    MDMCTRL2 = 0xF7;
    PRF.PKT_CONF.AGC_EN = 0;
    PRF.PKT_CONF.START_TONE = 0;
    MDMTEST0 = 0x01;
    BSP_MODE = 0x02;
    BSP_P0= 0x00;
    BSP_P1= 0x00;
    BSP_P2= 0x05;
    BSP_P3= 0x80;
    PRF.CRC_INIT[0]= 0x00;
    PRF.CRC_INIT[1]= 0x00;
    PRF.CRC_INIT[2]= 0xFF;
    PRF.CRC_INIT[3]= 0xFF;
    PRF.CRC_LEN = 2;
    SW_CONF = 0x00;
    SW0 = 0x91;
    SW1 = 0xD3;
    SW2 = 0x91;
    SW3 = 0xD3;
    MDMTEST1 = 0x2F;
    FREQCTRL = 0x3E;          // Freq. Setting 2440 MHz
    BSP_W = 0xE5;
    PRF_TASK_CONF = 0x01;
    PRF_W_INIT = 0x80;
    RFRAMCFG = 0x00;
    //**************** RF Setting for CC2543 Code Part **************************
    // Enable radio in default beacon mode.
        LLESTAT = 0x04;
        halRfDisableRadio(FORCE);    
        halRfInit();// TXPOWER = 0xE5;    
        halRfConfig(MSK_250kbps, TX, 32, PKT_CONF_NRF);
        halRfSetCrc(CRC_16);
        halRfSetSyncWord(SYNCWORD, 0);
        halRfSetTxAddress(0xEF, ADDR_CONF_TX_AUTO, 16);
        PRF.ADDR_ENTRY[0].CONF.REUSE = 1;
        
        MDMTEST1 = 0x2F;
        halRfSetFrequency(2440);
        halRfEnableRadio();
        
        // Seed pseudo-random generator.
        RNDL = 0x00;
        RNDL = 0xFF;
    
        // Enable RF interrupt.
        halRfEnableInterrupt(RFIRQF1_TASKDONE);
    
        // Enable global interrupt.
        halIntOn();
        BSP_W = 0xE5;
        PRF_TASK_CONF = 0x01;
        PRF_W_INIT = 0x80;
        RFRAMCFG = 0x00;
        // Load packet payload.
        halRfLoadPERPacketPayload(LENGTH, 0);
        
        // Set radio to transmit packets every 10 ms.
        halRfPacketTxInterval(VALUE_10MS_IN_1US_UNITS);
    
        while(1) {
            // Start transmitter.
            halRfStartTx();
    
            // Wait for TASKDONE and halt CPU (PM0) until task is completed.
            while (!(rfirqf1 & RFIRQF1_TASKDONE)) {
    #if(POWER_SAVING)
                halSleepEnterPowerMode(CPU_HALT);
    #endif
            P1_0 = 0;
            halMcuWaitMs(50);
            P1_0 = 1;
            halMcuWaitMs(50);
            }
     

  • Hi,

    Thanks for sharing register settings you are using.

    There was no problem with the frequency setting. It was my mistake.

    Does this mean that you are now measuring the same TX frequency on both CC2500 and CC2543?
    Just want to make sure -- earlier you had mentioned "For CC2500, the said frequency is coming around 2434MHz & for CC2543, it's 2440 MHz.".

    Let's focus on one use case for now, say:
    CC2500 RX <--- CC2543 TX

    While CC2543 is transmitting packets, debug CC2500. Specifically, what is the value of MARCSTATE (radio state machine), PKTSTATUS, and RXBYTES?

    Also, in your CC2543_REG.txt, what is the value of SYNCWORD -- this should match the syncword used on CC2500_REG.txt (i.e. 0xD391).

    Thanks,
    Toby

  • Hi Toby,

    Yes. I am able to see same frequency both the side.

    RXBYTES I check was 0.

    The SYNC Word, as per the recommended setting is 32 bytes. SW0 = 0x91, SW1 = 0xD3, SW2 = 0x91, SW3 = 0xD3.

    Can you please run samples at your side with my register setting? 

    I will share my codes if required.

  • Thanks for confirming.

    In general, if an RF link doesn't work between two devices, the first few places to check are:

    1. Frequency -- this seems to be ok
    2. Sync:
      1. Syncword -- this seems to be ok
      2. Preamble
        1. for CC2500, this is 1010... (see section 15.2 of CC2500 guide).
        2. for CC2543, this is configured in MDMCTRL2 (DEM_PREAM_MODE and PREAM_SEL). With your value of 0xF7:
          1. PREAM_SEL is 3, so preamble is 1010... (this looks ok)
          2. DEM_PREAM_MODE is 1 (this may indicate that 1's complement of PREAM_SEL is used) -- can you try changing it to 0 (change MDMCTRL2 to 0xB7).
    3. CRC -- perhaps temporarily remove any CRC checking for now (on the RX device)

    I currently do not have any EVMs to run these register settings, I will check with the team if we have any.

  • Hi Tony,

    I tried changing the settings for MDMCTRL2. But it's still not working.

    Please help with the correct settings. The settings suggested here looks incorrect

     https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/233569/cc2500-and-cc2543-connectting 

    ** If I put CC2543 Transmitter setting for MDMCTRL2 to 0xB7, Receiver CC2543 module with same setting is not able to receive any data. But if I change Receiver CC2543 module setting to 0xC0, it is able to receive data.

    Therefore can you suggest an equivalent setting for CC2500?

    Can you also tell value of SW_CONF register for CC2543?

    Please do check with your team at earliest. It is very very important to us.

  • Quick update, I am looking for HW to create a complete setup.

    I will try to get this ASAP, at least by end of week.

  • Hi Toby,

    Thanks for the update. I am also trying all the possibilities.

    Let me know.

  • Venugopal,

    We got the CC2500 and CC2543 EVMs and ran some tests using SmartRF Studio. From the e2e post I linked previously, I used the following settings:

    • CC2500_vs_CC2541_43_44_45_MSK_250kbps_RX.xml for the CC2500
    • CC2543_vs_CC2500_MSK_250kbps_TX.xml for the CC2543

    And the devices were able to communicate with no issues. Can you please try using those settings in your project? You can export the registers using SmartRF Studio. See screenshots below of the devices communicating.

    Regards,

    Daniel

    2860.SmartRFStudio_settings_CC2500_vs_CC254x.zip

  • Hello Danial,

    Thanks for the reply. I took one TI CC2510 EVK module (M2) & CC2543 module (M3) manufactured by us. I put the register setting suggested by you. And I was able to perform communication. But when I am using CC2510 module (M1) manufactured by us, with same setting I was not able to communicate.

    Then for test purpose, I tried to communicate module M1 & M2. The communication didn't happen. Two samples of module M1 are communicating with each other. Two samples of module M2 are communicating with each other. But M1 & M2 are not communicating with each other. Below are the module images for your reference.

    This issue we faced a long time back. Our module(M1) was not able to TI module (M2). But at that time we ignored this thing as two of our modules were successfully communicating with each other.  

     

  • Venu,

    Since the TI reference design works but your custom hardware does not, it sounds like there may be an issue with your custom hardware. Have you made changes from the reference design, especially to the RF portion of the design? Have you done a hardware review https://www.ti.com/tool/SIMPLELINK-2-4GHZ-DESIGN-REVIEWS ?

    Daniel

  • Danial,

    We were able to successfully between CC2510 & CC2543 with MSK Modulation at 250 Kbps & 500 Kbps.(CC2510 TX & CC2543 RX)

    When we intend to transmit with CC2543 MSK modulation 250 Kbps, we were not able to receive with same configuration at CC2510 MSK (250 Kbps)

    But when we changed CC2543 to GFSK modulation 250 Kbps & CC2510 MSK 250 Kbps, we managed to establish successful link with an RSSI of -38 dBm at 1 meter distance with PIFA antenna. 

    Anyway I am submitting my designs to TI for review.

    Thanks for your help Toby, Danial