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.

CC2544 Vs CC2500

Other Parts Discussed in Thread: CC2500, CC2544, CC2543

Hi All,

We are developing device where we have two choices CC2500 and CC2544.

Doubt is will CC2500 and CC2544 communicate @ 500K if the same modulation and frequency is used ?

Kindly help ,e for the same.
Awaiting for your valuable response.

  • Hello,

    I have attached SmartRFStudio settings for communication between CC2500 and CC2543. The CC2543 is very similar to the CC2544. See the user guide in the radio chapter for the recommended different register settings.

    2867.CC2500_vs_CC2543_MSK_500kbps.zip

  • Hello sir,


    i am using cc2500 rf module with my project but i cant get any data output from receiving side. i am using a cc2500 rf module pair and i am using atmega 8 microcontroller. this is my transmitter program. please help me through this.

    6574.CC2500.c
    /*
     * CC2500.c
     *
     * Created: 09-Nov-14 6:08:16 PM
     *  Author: dinu
     */ 
    #define F_CPU 8000000UL
    
    #include <avr/io.h>
    #include <util/delay.h>
    
    #define CSn PC3
    #define MOSI PB3
    #define SCLK PB5
    #define SS PB2
    
    //assign values to the registers
    #define CC_IOCFG2_value 0x2F
    #define CC_IOCFG1_value 0x2E
    #define CC_IOCFG0D_value              0x06
    #define CC_FIFOTHR_value              0x07
    #define CC_SYNC1_value 0xD3
    #define CC_SYNC0_value 0x91
    #define CC_PKTLEN_value 0x03
    #define CC_PKTCTRL1_value              0x84
    #define CC_PKTCTRL0_value              0x04
    #define CC_ADDR_value 0x00
    #define CC_CHANNR_value 0x00
    #define CC_FSCTRL1_value              0x09
    #define CC_FSCTRL0_value              0x00
    #define CC_FREQ2_value 0x5D
    #define CC_FREQ1_value 0xD8
    #define CC_FREQ0_value 0x9D
    #define CC_MDMCFG4_value              0x2D
    #define CC_MDMCFG3_value             0x3B
    #define CC_MDMCFG2_value             0x73
    #define CC_MDMCFG1_value             0x23
    #define CC_MDMCFG0_value             0x3B
    #define CC_DEVIATN_value              0x01
    #define CC_MCSM2_value 0x07
    #define CC_MCSM1_value                0x30
    #define CC_MCSM0_value                 0x18
    #define CC_FOCCFG_value 0x1D
    #define CC_BSCFG_value 0x1C
    #define CC_AGCCTRL2_value               0xC7
    #define CC_AGCCTRL1_value              0x00
    #define CC_AGCCTRL0_value              0xB2
    #define CC_WOREVT1_value              0x87
    #define CC_WOREVT0_value              0x6B
    #define CC_WORCTRL_value              0xF8
    #define CC_FREND1_value              0xB6
    #define CC_FREND0_value 0x10
    #define CC_FSCAL3_value 0xEA
    #define CC_FSCAL2_value 0x0A
    #define CC_FSCAL1_value 0x00
    #define CC_FSCAL0_value 0x11
    #define CC_RCCTRL1_value              0x41
    #define CC_RCCTRL0_value              0x00
    #define CC_FSTEST_value 0x59
    #define CC_PTEST_value 0x7F
    #define CC_AGCTEST_value              0x3F
    #define CC_TEST2_value 0x88
    #define CC_TEST1_value 0x31
    #define CC_TEST0_value 0x0B
    #define SRES                  0x30
    #define SFSTXON   0x31
    #define SXOFF     0x32
    #define SCAL                  0x33
    #define SRX                    0x34
    #define STX                   0x35
    #define SIDLE                0x36
    #define SAFC                 0x37
    #define SWOR     0x38
    #define SPWD     0x39
    #define SFRX                 0x3A
    #define SFTX                  0x3B
    #define SWORRST   0x3C
    #define SNOP     0x3D
    void SPI_init(); //initialize spi interface of atmega8
    unsigned char SPI_TX(unsigned char); //transmit one byte from avr to CC
    //creating array for assigned register values
    const unsigned char CC_rfSettings[0x2F]=
    {
    	CC_IOCFG2_value,
    	CC_IOCFG1_value,
    	CC_IOCFG0D_value,
    	CC_FIFOTHR_value,
    	CC_SYNC1_value,
    	CC_SYNC0_value,
    	CC_PKTLEN_value,
    	CC_PKTCTRL1_value,
    	CC_PKTCTRL0_value,
    	CC_ADDR_value,
    	CC_CHANNR_value,
    	CC_FSCTRL1_value,
    	CC_FSCTRL0_value,
    	CC_FREQ2_value,
    	CC_FREQ1_value,
    	CC_FREQ0_value,
    	CC_MDMCFG4_value,
    	CC_MDMCFG3_value,
    	CC_MDMCFG2_value,
    	CC_MDMCFG1_value,
    	CC_MDMCFG0_value,
    	CC_DEVIATN_value,
    	CC_MCSM2_value,
    	CC_MCSM1_value,
    	CC_MCSM0_value,
    	CC_FOCCFG_value,
    	CC_BSCFG_value,
    	CC_AGCCTRL2_value,
    	CC_AGCCTRL1_value,
    	CC_AGCCTRL0_value,
    	CC_WOREVT1_value,
    	CC_WOREVT0_value,
    	CC_WORCTRL_value,
    	CC_FREND1_value,
    	CC_FREND0_value,
    	CC_FSCAL3_value,
    	CC_FSCAL2_value,
    	CC_FSCAL1_value,
    	CC_FSCAL0_value,
    	CC_RCCTRL1_value,
    	CC_RCCTRL0_value,
    	CC_FSTEST_value,
    	CC_PTEST_value,
    	CC_AGCTEST_value,
    	CC_TEST2_value,
    	CC_TEST1_value,
    	CC_TEST0_value
    };
    
    void command(unsigned char a) // give commands to CC
    {
    	PORTC=(0<<CSn);
    	while(bit_is_set(PINB,PB4));
    	SPI_TX(a);
    	PORTC|=(1<<CSn);
    }
    
    unsigned char p,q,r,t;
    void send()  // send data in CC wirelessly
    {
    	command(SFTX);      //flush tx FIFO
    	command(SIDLE);    //turn CC2500 into idle mode
    	
    	command(SCAL);
    	PORTC=(0<<CSn);
    	while(bit_is_set(PINB,PB4));
    	SPI_TX(0x7F);    // tx FIFO address in burst mode
    	SPI_TX(0x55); // data byte1
    	SPI_TX(0xAA); // data byte2
    	SPI_TX(PIND);//data byte3
    	PORTC|=(1<<CSn);
    	command(STX);  //command to send data in tx FIFO wirelessly
    	_delay_us(10);
    }
    
    //receive data wirelessly with CC
    void receive()
    {
    	command(SRX); // command to receive data wirelessly
    	command(SRX);
    	while(bit_is_clear(PINC,PC1)); // check GD0pin of CC2500
    	PORTC=(0<<CSn);
    	while(bit_is_set(PINB,PB4));
    	SPI_TX(0xFF); // rx FIFO address burst mode
    	p=SPI_TX(0x00); // data byte1
    	q=SPI_TX(0x00);// data byte2
    	r=SPI_TX(0x00);// data byte3
    	PORTC|=(1<<CSn);
    	command(SFRX); // flush receiver FIFO
    	command(SIDLE); // turn CC2500 into idle mode
    	command(SCAL);
    	PORTD=r;
    }
    
    int main()
    {
    	unsigned int j;
    	unsigned char i,b;
    	_delay_ms(5);
    	SPI_init();
    	PORTC|=(1<<CSn);
    	for(i=0x00;i<0x2F;i++)   // configure registers of CC2500
    	{
    		PORTC=(0<<CSn);
    		while(bit_is_set(PINB,PB4));
    		SPI_TX(i); //address byte
    		SPI_TX(CC_rfSettings[i]);// data byte
    		PORTC|=(1<<CSn);
    	}
    	while(1)
    	{
    		//use send()in transmitter and receive() in receiver
    		send();
    		//receive();
    	}
    }
    void SPI_init() //SPI initialization in atmega8
    {
    	DDRD=0xff;
    	PORTD=0x00;
    	DDRC|=(1<<CSn)|(0<<PC1)|(1<<PC5);
    	DDRB=(1<<MOSI)|(1<<SCLK)|(1<<SS); // set MISO as output pin, rest as input
    	SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0); // Enable SPI
    }
    unsigned char SPI_TX(unsigned char a)  // atmega 8 send one byte to CC and receive one byte from CC
    {
    	SPDR=a;
    	while(!(SPSR &(1<<SPIF))); //wait until SPIF get high
    	return SPDR;
    }