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.

CC2500: CC2500 compatibility

Part Number: CC2500
Other Parts Discussed in Thread: TEST2, CC2640R2F, CC2652R

Hello,

in a project where I am supposed to work, I am allowed to work with the RF products of TI. But I am still quite inexperienced and would be grateful if someone might recommend a good entry guide.

Specifically, I have a CC2500 with the settings listed below that I want to connect to. Unfortunately there seems to be hardly any development products left for the CC2500, so I am wondering which current chip I should use to connect with the CC2500 with the given settings or is there an overview of the compatibility between the different RF products from TI?

Thanks in advance for your help.

CC2500 RF-Settings:

// Product = CC2500
// Crystal accuracy = 40 ppm
// X-tal frequency = 26 MHz
// RF output power = 0 dBm
// RX filterbandwidth = 540.000000 kHz
// Deviation = 0.000000
// Return state: Return to RX state upon leaving either TX or RX
// Datarate = 250.000000 kbps
// Modulation = (7) MSK
// Manchester enable = (0) Manchester disabled
// RF Frequency = 2433.000000 MHz
// Channel spacing = 199.950000 kHz
// Channel number = 0
// Optimization = Sensitivity
// Sync mode = (3) 30/32 sync word bits detected
// Format of RX/TX data = (0) Normal mode, use FIFOs for RX and TX
// CRC operation = (1) CRC calculation in TX and CRC check in RX enabled
// Forward Error Correction = (0) FEC disabled
// Length configuration = (1) Variable length packets, packet length configured by the first received byte after sync word.
// Packetlength = 255
// Preamble count = (2) 4 bytes
// Append status = 1
// Address check = (0) No address check
// FIFO autoflush = 0 - NoteMe LH9527: autoflush=1 in TI_CCxxx0_PKTCTRL1 => Vermeidung der Weitergabe von Tels mit CRC-Fehlern an MSP (nur bei Tel-Längen < FIFO-Länge zulässig!)
// BEM1: Evtl. autoflush standardmäßig einschalten, jedoch nach Empfang Bind-Request (bis Funk-TimeOut) ausschalten -> dann auch lange Daten-Tels möglich.
// BEM2: Noch längere Daten-Tels (z.B. angepasst an FTP-Tel-Datenlänge 0x200) sind möglich, wenn nach RF-Header im RF-Data-Packet eine 2-Byte-Länge eingefügt wird.
// Siehe auch "NoteMe" in RFReceivePacket() weiter unten in dieser Datei.
// Device address = 0
// GDO0 signal selection = ( 6) Asserts when sync word has been sent / received, and de-asserts at the end of the packet
// GDO2 signal selection = (11) Serial Clock
void writeRFSettings(void)
{
// Write register settings
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG2, 0x0B); // GDO2 output pin config.
TI_CC_SPIWriteReg(TI_CCxxx0_IOCFG0, 0x06); // GDO0 output pin config.
TI_CC_SPIWriteReg(TI_CCxxx0_PKTLEN, 0xFF); // Packet length.
TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL1, 0x07/*0x05*/); // Packet automation control. NoteMe old: for Bind-Request: PKTCTRL1 |= 0x03;//Address check, 0 (0x00) and 255 (0xFF) broadcast
TI_CC_SPIWriteReg(TI_CCxxx0_PKTCTRL0, 0x05 | 0x40 /*NoteMe: Whitening aktiviert!*/); // Packet automation control.
TI_CC_SPIWriteReg(TI_CCxxx0_ADDR, 0x01); // Device address.
TI_CC_SPIWriteReg(TI_CCxxx0_CHANNR, 0x00); // Channel number.
TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL1, 0x0A); // Freq synthesizer control.
TI_CC_SPIWriteReg(TI_CCxxx0_FSCTRL0, 0x00); // Freq synthesizer control.
TI_CC_SPIWriteReg(TI_CCxxx0_FREQ2, 0x5D); // Freq control word, high byte
TI_CC_SPIWriteReg(TI_CCxxx0_FREQ1, 0x93); // Freq control word, mid byte.
TI_CC_SPIWriteReg(TI_CCxxx0_FREQ0, 0xB1); // Freq control word, low byte.
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG4, 0x2D); // Modem configuration.
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG3, 0x3B); // Modem configuration.
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG2, 0x73); // Modem configuration.
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG1, 0x22); // Modem configuration.
TI_CC_SPIWriteReg(TI_CCxxx0_MDMCFG0, 0xF8); // Modem configuration.
TI_CC_SPIWriteReg(TI_CCxxx0_DEVIATN, 0x01); // Modem dev (when FSK mod en)
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM1 , 0x3F); //MainRadio Cntrl State Machine
TI_CC_SPIWriteReg(TI_CCxxx0_MCSM0 , 0x18); //MainRadio Cntrl State Machine
TI_CC_SPIWriteReg(TI_CCxxx0_FOCCFG, 0x1D); // Freq Offset Compens. Config
TI_CC_SPIWriteReg(TI_CCxxx0_BSCFG, 0x1C); // Bit synchronization config.
TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL2, 0xC7); // AGC control.
TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL1, 0x00); // AGC control.
TI_CC_SPIWriteReg(TI_CCxxx0_AGCCTRL0, 0xB0); // AGC control.
TI_CC_SPIWriteReg(TI_CCxxx0_FREND1, 0xB6); // Front end RX configuration.
TI_CC_SPIWriteReg(TI_CCxxx0_FREND0, 0x10); // Front end RX configuration.
TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL3, 0xEA); // Frequency synthesizer cal.
TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL2, 0x0A); // Frequency synthesizer cal.
TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL1, 0x00); // Frequency synthesizer cal.
TI_CC_SPIWriteReg(TI_CCxxx0_FSCAL0, 0x11); // Frequency synthesizer cal.
TI_CC_SPIWriteReg(TI_CCxxx0_FSTEST, 0x59); // Frequency synthesizer cal.
TI_CC_SPIWriteReg(TI_CCxxx0_TEST2, 0x88); // Various test settings.
TI_CC_SPIWriteReg(TI_CCxxx0_TEST1, 0x31); // Various test settings.
TI_CC_SPIWriteReg(TI_CCxxx0_TEST0, 0x0B); // Various test settings.
}

  • Could you outline a bit more about the project? Do you have a legacy product using CC2500 which you want to connect to? Do you have some specific requirements (except for that it has to be able to communicate with CC2500) for the new system? 

    I believe we could have settings for CC2640R2F that could enable you to communicate with CC2500 (I have to check), could this chip be an option? 

  • Hi TER

    Thanks for your answer.

    In this project we have measuring devices which are equipped with the CC2500, and so far could be read out via a USB dongle.
    But now we want to develope an independent device that replaces the USB dongle and transmits the measured data to an Ethernet interface.

    Since the existing system should be changed as little as possible, the CC2640R2F would only be a solution, if no changes in the settings of the CC2500 are necessary for a connection.

    It would be realy helpful, if you can provide me this settings for the CC2640R2F to enable the communication with the CC2500.

  • Hopefully I will be able to give you some settings after Easter. 

  • Is CC2652R an option? There are recommended settings in SmartRF Studio for MSK that is compatible with the CC2500 MSK.

    BR

    Siri

  • Yes, that also looks like an option.  But first I will wait for the settings from TER for the CC2640R2F.

    Best regards,

    Jakob

  • Hi Jakob

    Please try the following settings with the CC2640R2:

    // TI-RTOS RF Mode Object
    RF_Mode RF_prop =
    {
        .rfMode = RF_MODE_PROPRIETARY_2_4,
        .cpePatchFxn = 0,
        .mcePatchFxn = 0,
        .rfePatchFxn = 0,
    };
    
    uint32_t pOverrides[] =
    {
        HW_REG_OVERRIDE(0x6088,0x3F1F),
        HW_REG_OVERRIDE(0x608C,0x8213),
        (uint32_t)0x000484a3,
        (uint32_t)0x02010403,
        (uint32_t)0x00008463,
        (uint32_t)0x00388473,
        HW_REG_OVERRIDE(0x50C8, 0x60f7),
        (uint32_t)0x00810083,
        (uint32_t)0x001000a3,
        (uint32_t)0x000000c3,
        (uint32_t)0x000000e3,
        (uint32_t)0x40064041,
        (uint32_t)0x0000b19a,
        (uint32_t)0x00013199,
        (uint32_t)0x00000000,
        (uint32_t)0x00000000,
        (uint32_t)0x00000000,
        (uint32_t)0x00000000,
        (uint32_t)0xFFFFFFFF,
    };
    
    // CMD_PROP_RADIO_SETUP
    rfc_CMD_PROP_RADIO_SETUP_t RF_cmdRadioSetup =
    {
        .commandNo = CMD_PROP_RADIO_SETUP,
        .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 = 0x0,
        .modulation.deviation = 250,
        .symbolRate.preScale = 0x6,
        .symbolRate.rateWord = 65536,
        .rxBw = 9,
        .preamConf.nPreamBytes = 0x4,
        .preamConf.preamMode = 0x1,
        .formatConf.nSwBits = 0x20,
        .formatConf.bBitReversal = 0x1,
        .formatConf.bMsbFirst = 0x1,
        .formatConf.fecMode = 0x0,
        .formatConf.whitenMode = 0x0,
        .config.frontEndMode = 0x0,
        .config.biasMode = 0x0,
        .config.analogCfgMode = 0x0,
        .config.bNoFsPowerUp = 0x0,
        .txPower = 0x003F,
        .pRegOverride = pOverrides,
    };
    
    // 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 = 0x0981,
        .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 = 0x14, // SET APPLICATION PAYLOAD LENGTH
        .syncWord = 0x9D391D391,
        .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, // MAKE SURE DATA ENTRY IS LARGE ENOUGH
        .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
    };

    I do not have an CC2500 available, but the settings where tested against the MSK settings for CC2652R i SmartRF Studio (Sync word changed to match the CC2500 sync).

    BR

    Siri