<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=CC2500</id>
	<title>CC2500 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://w.electrodragon.com/w/index.php?action=history&amp;feed=atom&amp;title=CC2500"/>
	<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=CC2500&amp;action=history"/>
	<updated>2026-06-04T21:35:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://w.electrodragon.com/w/index.php?title=CC2500&amp;diff=25215&amp;oldid=prev</id>
		<title>Chao at 18:45, 5 February 2020</title>
		<link rel="alternate" type="text/html" href="https://w.electrodragon.com/w/index.php?title=CC2500&amp;diff=25215&amp;oldid=prev"/>
		<updated>2020-02-05T18:45:23Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== CC2500L Board ==&lt;br /&gt;
Module works at 3.3V, if not concern the Low Energy mode, you can connect directly to 5V, but it is better to add some 1K resistor to drop to voltage, or use LDO regulator&lt;br /&gt;
=== Pin Definition, Size ===&lt;br /&gt;
[[File:Interface-of-CC2500.png|thumbnail|right]]&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Pin !! Header text !! Header text&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || GND (rectangle pad)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || VCC || VCC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GDO0 || other function pin&lt;br /&gt;
|-&lt;br /&gt;
| 4 || CSN || SPI Enable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SCK || SPI Clock &lt;br /&gt;
|-&lt;br /&gt;
| 6 || SO || Data Out&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SI || Data In&lt;br /&gt;
|-&lt;br /&gt;
| 8 || GDO2 || other function pin&lt;br /&gt;
|-&lt;br /&gt;
| 9 || RXEN || Connect to VCC, &lt;br /&gt;
|-&lt;br /&gt;
| 10 || TXEN || in RX mode, TXEN = 1, in TX mode, RXEN = 0&lt;br /&gt;
|}&lt;br /&gt;
=== Electrical Characteristics ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name !! specification&lt;br /&gt;
|-&lt;br /&gt;
| operational current || 14mA @ RX mode, 120mA @ TX mode&lt;br /&gt;
|-&lt;br /&gt;
| operational frequency || 2400 – 2483 MHz ISM Band&lt;br /&gt;
|-&lt;br /&gt;
| Transmission power || 16dbM&lt;br /&gt;
|-&lt;br /&gt;
| Sensitivity || ‐110dBm (typical) @ 10Kbps mode &lt;br /&gt;
|-&lt;br /&gt;
| modulation || FSK /GFSK/MSK &lt;br /&gt;
|-&lt;br /&gt;
| Tested Distance || 1.5 KM&lt;br /&gt;
|-&lt;br /&gt;
| Module Size || 33mm(L) x 17mm(W) x 5mm(H) &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CC2500 Arduino Demo Code ==&lt;br /&gt;
More Power expecification can refer to Data CC2500 documents&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INT8U PaTabel[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0};&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' SPI RW operation '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot;&amp;gt;&lt;br /&gt;
INT8U SpiTxRxByte(INT8U dat)&lt;br /&gt;
{&lt;br /&gt;
   INT8U i,temp;&lt;br /&gt;
   temp = 0;&lt;br /&gt;
   SCK = 0;&lt;br /&gt;
   for(i=0; i&amp;lt;8; i++)&lt;br /&gt;
   {&lt;br /&gt;
      if(dat &amp;amp; 0x80)&lt;br /&gt;
      {&lt;br /&gt;
          MOSI = 1;&lt;br /&gt;
      }&lt;br /&gt;
      else MOSI = 0;&lt;br /&gt;
      dat &amp;lt;&amp;lt;= 1;&lt;br /&gt;
      SCK = 1;&lt;br /&gt;
      _nop_();&lt;br /&gt;
      _nop_();&lt;br /&gt;
      temp &amp;lt;&amp;lt;= 1;&lt;br /&gt;
      if(MISO)temp++;&lt;br /&gt;
      SCK = 0;&lt;br /&gt;
      _nop_();&lt;br /&gt;
      _nop_();  &lt;br /&gt;
   }&lt;br /&gt;
   return temp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''' SPI Write Register '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot;&amp;gt;&lt;br /&gt;
void halSpiWriteReg(INT8U addr, INT8U value)&lt;br /&gt;
{&lt;br /&gt;
   CSN = 0;&lt;br /&gt;
   while (MISO);&lt;br /&gt;
   SpiTxRxByte(addr);     // Write address&lt;br /&gt;
   SpiTxRxByte(value);    // write data&lt;br /&gt;
   CSN = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''' SPI Read register operation '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot;&amp;gt;&lt;br /&gt;
INT8U halSpiReadReg(INT8U addr)&lt;br /&gt;
{&lt;br /&gt;
   INT8U temp, value;&lt;br /&gt;
   temp = addr|READ_SINGLE;//read register command&lt;br /&gt;
   CSN = 0;&lt;br /&gt;
   while (MISO);&lt;br /&gt;
   SpiTxRxByte(temp);&lt;br /&gt;
   value = SpiTxRxByte(0);&lt;br /&gt;
   CSN = 1;&lt;br /&gt;
   return value;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''' CC2500 software reset '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot;&amp;gt;&lt;br /&gt;
void RESET_CC2500(void)&lt;br /&gt;
{&lt;br /&gt;
   CSN = 0;&lt;br /&gt;
   while (MISO);&lt;br /&gt;
   SpiTxRxByte(CCxxx0_SRES);    //write register command&lt;br /&gt;
   while (MISO);&lt;br /&gt;
   CSN = 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''' CC2500 Initialization '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot;&amp;gt;&lt;br /&gt;
const RF_SETTINGS rfSettings =&lt;br /&gt;
{&lt;br /&gt;
   0x00,&lt;br /&gt;
   0x07,  // FSCTRL1  Frequency synthesizer control.&lt;br /&gt;
   0x00,  // FSCTRL0  Frequency synthesizer control.&lt;br /&gt;
   0x5C,  // FREQ2    Frequency control word, high byte.&lt;br /&gt;
   0x58,  // FREQ1    Frequency control word, middle byte.&lt;br /&gt;
   0x9D,  // FREQ0    Frequency control word, low byte.&lt;br /&gt;
   0x0E,  // MDMCFG4  Modem configuration.&lt;br /&gt;
   0x3B,  // MDMCFG3  Modem configuration.&lt;br /&gt;
   0x73,  // MDMCFG2  Modem configuration.&lt;br /&gt;
   0x42,  // MDMCFG1  Modem configuration.&lt;br /&gt;
   0xF8,  // MDMCFG0  Modem configuration.&lt;br /&gt;
 &lt;br /&gt;
   0x00,  // CHANNR   Channel number.&lt;br /&gt;
0x00, &lt;br /&gt;
 // DEVIATN  Modem deviation setting (when FSK modulation is enabled).&lt;br /&gt;
   0xB6,  // FREND1   Front end RX configuration.&lt;br /&gt;
   0x10,  // FREND0   Front end RX configuration.&lt;br /&gt;
   0x18,  // MCSM0    Main Radio Control State Machine configuration.&lt;br /&gt;
   0x1D,  // FOCCFG   Frequency Offset Compensation Configuration.&lt;br /&gt;
   0x1C,  // BSCFG    Bit synchronization Configuration.&lt;br /&gt;
   0xC7,  // AGCCTRL2 AGC control.&lt;br /&gt;
   0x00,  // AGCCTRL1 AGC control.&lt;br /&gt;
   0xB2,  // AGCCTRL0 AGC control.&lt;br /&gt;
   0xCA,  // FSCAL3   Frequency synthesizer calibration.&lt;br /&gt;
   0x0A,  // FSCAL2   Frequency synthesizer calibration.&lt;br /&gt;
   0x00,  // FSCAL1   Frequency synthesizer calibration.&lt;br /&gt;
   0x11,  // FSCAL0   Frequency synthesizer calibration.&lt;br /&gt;
   0x59,  // FSTEST   Frequency synthesizer calibration.&lt;br /&gt;
   0x88,  // TEST2    Various test settings.&lt;br /&gt;
   0x31,  // TEST1    Various test settings.&lt;br /&gt;
   0x0B,  // TEST0    Various test settings.&lt;br /&gt;
   0x0B,  // IOCFG2   GDO2 output pin configuration.&lt;br /&gt;
0x06,  // IOCFG0D  GDO0 output pin configuration.&lt;br /&gt;
   0x05,  // PKTCTRL1 Packet automation control. //address detection &lt;br /&gt;
0x45,  // PKTCTRL0 Packet automation control. &lt;br /&gt;
//The variable length data packets through the first position after the sync word length of the configuration packet&lt;br /&gt;
   0x0A,    //the address used for filtering&lt;br /&gt;
   0xFF   // PKTLEN   Packet length.   Max&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''' Data receive process '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot;&amp;gt;&lt;br /&gt;
INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)&lt;br /&gt;
{&lt;br /&gt;
   INT8U status[2];&lt;br /&gt;
   INT8U packetLength;&lt;br /&gt;
   INT8U i=(*length)*4; //depends on datarate and length&lt;br /&gt;
   halSpiStrobe(CCxxx0_SRX);     // enter into receive mode&lt;br /&gt;
   delay(2);&lt;br /&gt;
   while (GDO0)&lt;br /&gt;
   {&lt;br /&gt;
      delay(2);&lt;br /&gt;
      --i;&lt;br /&gt;
      if(i&amp;lt;1)&lt;br /&gt;
        return 0;    &lt;br /&gt;
   }  &lt;br /&gt;
if ((halSpiReadStatus(CCxxx0_RXBYTES) &amp;amp; BYTES_IN_RXFIFO))&lt;br /&gt;
 //if the received data is not 0&lt;br /&gt;
   {&lt;br /&gt;
       packetLength = halSpiReadReg(CCxxx0_RXFIFO);&lt;br /&gt;
//read first byte, this byte is the length of this data frame&lt;br /&gt;
       if (packetLength &amp;lt;= *length)    &lt;br /&gt;
//if the lengths of available data needed is less or equal to the received data packet length&lt;br /&gt;
      {&lt;br /&gt;
halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //read all received data&lt;br /&gt;
           *length = packetLength;             &lt;br /&gt;
//set the received data length to current data length&lt;br /&gt;
// Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)&lt;br /&gt;
           halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2); &lt;br /&gt;
//read CRC check bit&lt;br /&gt;
          halSpiStrobe(CCxxx0_SFRX);     //clear buffer&lt;br /&gt;
           return (status[1] &amp;amp; CRC_OK); //if check succeed return success&lt;br /&gt;
       }&lt;br /&gt;
       else&lt;br /&gt;
      {&lt;br /&gt;
           *length = packetLength;&lt;br /&gt;
           halSpiStrobe(CCxxx0_SFRX);   //clear buffer&lt;br /&gt;
           return 0;&lt;br /&gt;
       }&lt;br /&gt;
   }&lt;br /&gt;
   else&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
''' Data send process '''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Arduino&amp;quot;&amp;gt;&lt;br /&gt;
void halRfSendPacket(INT8U *txBuffer, INT8U size)&lt;br /&gt;
{&lt;br /&gt;
   halSpiWriteReg(CCxxx0_TXFIFO, size);&lt;br /&gt;
   halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size);// write the data which needed to be sent&lt;br /&gt;
   halSpiStrobe(CCxxx0_STX);     //enter into send mode to send data&lt;br /&gt;
   // Wait for GDO0 to be set -&amp;gt; sync transmitted&lt;br /&gt;
   while (!GDO0);&lt;br /&gt;
   // Wait for GDO0 to be cleared -&amp;gt; end of packet&lt;br /&gt;
   while (GDO0);&lt;br /&gt;
      halSpiStrobe(CCxxx0_SFTX);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documents ==&lt;br /&gt;
Datasheet&lt;br /&gt;
* [[File:Cc2500.pdf|Datasheet of CC2500]]&lt;br /&gt;
* [[File:CC2500_NOTES.pdf|CC2500_NOTES]]&lt;br /&gt;
Demo Code&lt;br /&gt;
* [[File:CC2500_for_8051_reference_code.zip|reference demo code for 8051]]&lt;br /&gt;
&lt;br /&gt;
[[category: 2.4GHz RF Transceiver]]&lt;/div&gt;</summary>
		<author><name>Chao</name></author>
	</entry>
</feed>