Jump to content
Forum sending old emails Read more... ×
Sign in to follow this  
Samanvai

Need Help with CC2500 and msp430G2553 (EDITED)

Recommended Posts

Hi Guys, I have been trying to interface CC2500 with my G2 launchpad, i am unable to do so. 

i interfaced cc2500 with the default spi configuration given in the SPI library with Energia.
P2.0 - CS (active low)
 P1.5 - SCLK
 P1.6 - MISO aka SOMI
 P1.7 - MOSI aka SIMO
P19- GD0
GDO2 pin is hanging
i found a library which i used to code, the code initially checks the value in the registers of cc2500 and serially prints it and matches it with the default values.
i have attached the thumbnails of serial output. when my CS pin is connected i get "o" output for all reisters and when i leave it open i get "FFFFFF"
what can i do to correct that.. 
here is the code i used:
#include <cc2500_REG.h>
#include <cc2500_VAL.h>


#include <SPI.h>

#define CC2500_IDLE    0x36      // Exit RX / TX, turn
#define CC2500_TX      0x35      // Enable TX. If in RX state, only enable TX if CCA passes
#define CC2500_RX      0x34      // Enable RX. Perform calibration if enabled
#define CC2500_FTX     0x3B      // Flush the TX FIFO buffer. Only issue SFTX in IDLE or TXFIFO_UNDERFLOW states
#define CC2500_FRX     0x3A      // Flush the RX FIFO buffer. Only issue SFRX in IDLE or RXFIFO_OVERFLOW states
#define CC2500_TXFIFO  0x3F
#define CC2500_RXFIFO  0x3F

#define No_of_Bytes    3

const int buttonPin = 5;     // the number of the pushbutton pin
int buttonState = 0;         // variable for reading the pushbutton status

const int GDO0_PIN = 19;     // the number of the GDO0_PIN pin
int GDO0_State = 0;         // variable for reading the pushbutton status
int led = 2;
void setup()
{
  Serial.begin(9600);
  pinMode(SS,OUTPUT);
  pinMode(led, OUTPUT);
  digitalWrite(led, HIGH);
  SPI.begin();
  digitalWrite(SS,HIGH);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);     
  pinMode(GDO0_PIN, INPUT);     

  Serial.println("Starting..");
  init_CC2500();
  Read_Config_Regs();
}

void loop()
{
Serial.println("Starting..");
  //Read_Config_Regs();
  /*
//  To start transmission
    buttonState = digitalRead(buttonPin);
    Serial.println(buttonState);

    while (!buttonState)
    {
        // read the state of the pushbutton value:
        buttonState = digitalRead(buttonPin);
        Serial.println("PB = 0");
    }
    
    Serial.println("BP = 1");
    */
    RxData_RF();
  /*
    while (buttonState)
    {
        // read the state of the pushbutton value:
        buttonState = digitalRead(buttonPin);
        Serial.println("PB = 1");
    }
    */
}


void RxData_RF(void) 
{
  
  
    int PacketLength;
   // RX: enable RX
    SendStrobe(CC2500_RX);

    GDO0_State = digitalRead(GDO0_PIN);
//    Serial.println("GDO0");
//    Serial.println(GDO0_State);
    
    // Wait for GDO0 to be set -> sync received
    while (!GDO0_State)
    {
        // read the state of the GDO0_PIN value:
        GDO0_State = digitalRead(GDO0_PIN);
        //Serial.println("GD0 = 0");
        delay(100);
    }
    // Wait for GDO0 to be cleared -> end of packet
    while (GDO0_State)
    {
      // read the state of the GDO0_PIN value:
      GDO0_State = digitalRead(GDO0_PIN);
        //Serial.println("GD0 = 1");
        delay(100);
    }
    
    /*
    char rxbytes = ReadReg(0x3B);
        Serial.println("---------------------");
        Serial.println("RX Bytes: ");
        Serial.println(rxbytes, HEX);
        Serial.println("---------------------");
    */
    
    char data1, data2;
  // Read length byte
        PacketLength = ReadReg(CC2500_RXFIFO);
        
        Serial.println("---------------------");
          Serial.println(PacketLength,HEX);
          Serial.println(" Packet Received ");
          
        if(No_of_Bytes == PacketLength)
        {
          
          
          // Read data from RX FIFO and store in rxBuffer
          
          //for(int i = 1; i < PacketLength; i++)
          //{            
            data1 = ReadReg(CC2500_RXFIFO);
            Serial.println(data1,HEX);
            if(data1 = 0x09){
                data2 = ReadReg(CC2500_RXFIFO);
                Serial.println(data2,HEX);
                if(data2 == 0x01 ){
                    //digitalWrite(led, LOW);
                }
                else{
                    //digitalWrite(led, HIGH);
                }
            }
            //Serial.println(ReadReg(CC2500_RXFIFO), HEX);
          //}
          Serial.println("---------------------");
        }
         
        // Make sure that the radio is in IDLE state before flushing the FIFO
        // (Unless RXOFF_MODE has been changed, the radio should be in IDLE state at this point) 
        SendStrobe(CC2500_IDLE);
        // Flush RX FIFO
        SendStrobe(CC2500_FRX);

}// Rf RxPacket


void WriteReg(char addr, char value)
{
  digitalWrite(SS,LOW);
  
  while (digitalRead(MISO) == HIGH) {
    };
    
  SPI.transfer(addr);
  delay(10);
  SPI.transfer(value);
  digitalWrite(SS,HIGH);
}

char ReadReg(char addr)
{
  addr = addr + 0x80;
  digitalWrite(SS,LOW);
  while (digitalRead(MISO) == HIGH) {
    };
  char x = SPI.transfer(addr);
  delay(10);
  char y = SPI.transfer(0);
  digitalWrite(SS,HIGH);
  return y;  
}

char SendStrobe(char strobe)
{
  digitalWrite(SS,LOW);
  
  while (digitalRead(MISO) == HIGH) {
    };
    
  char result =  SPI.transfer(strobe);
  digitalWrite(SS,HIGH);
  delay(10);
  return result;
}


void init_CC2500()
{
  WriteReg(REG_IOCFG2,VAL_IOCFG2);
  WriteReg(REG_IOCFG1,VAL_IOCFG1);
  WriteReg(REG_IOCFG0,VAL_IOCFG0);

  WriteReg(REG_FIFOTHR,VAL_FIFOTHR);
  WriteReg(REG_SYNC1,VAL_SYNC1);
  WriteReg(REG_SYNC0,VAL_SYNC0);
  WriteReg(REG_PKTLEN,VAL_PKTLEN);
  WriteReg(REG_PKTCTRL1,VAL_PKTCTRL1);
  WriteReg(REG_PKTCTRL0,VAL_PKTCTRL0);
  WriteReg(REG_ADDR,VAL_ADDR);
  WriteReg(REG_CHANNR,VAL_CHANNR);
  WriteReg(REG_FSCTRL1,VAL_FSCTRL1);
  WriteReg(REG_FSCTRL0,VAL_FSCTRL0);
  WriteReg(REG_FREQ2,VAL_FREQ2);
  WriteReg(REG_FREQ1,VAL_FREQ1);
  WriteReg(REG_FREQ0,VAL_FREQ0);
  WriteReg(REG_MDMCFG4,VAL_MDMCFG4);
  WriteReg(REG_MDMCFG3,VAL_MDMCFG3);
  WriteReg(REG_MDMCFG2,VAL_MDMCFG2);
  WriteReg(REG_MDMCFG1,VAL_MDMCFG1);
  WriteReg(REG_MDMCFG0,VAL_MDMCFG0);
  WriteReg(REG_DEVIATN,VAL_DEVIATN);
  WriteReg(REG_MCSM2,VAL_MCSM2);
  WriteReg(REG_MCSM1,VAL_MCSM1);
  WriteReg(REG_MCSM0,VAL_MCSM0);
  WriteReg(REG_FOCCFG,VAL_FOCCFG);

  WriteReg(REG_BSCFG,VAL_BSCFG);
  WriteReg(REG_AGCCTRL2,VAL_AGCCTRL2);
  WriteReg(REG_AGCCTRL1,VAL_AGCCTRL1);
  WriteReg(REG_AGCCTRL0,VAL_AGCCTRL0);
  WriteReg(REG_WOREVT1,VAL_WOREVT1);
  WriteReg(REG_WOREVT0,VAL_WOREVT0);
  WriteReg(REG_WORCTRL,VAL_WORCTRL);
  WriteReg(REG_FREND1,VAL_FREND1);
  WriteReg(REG_FREND0,VAL_FREND0);
  WriteReg(REG_FSCAL3,VAL_FSCAL3);
  WriteReg(REG_FSCAL2,VAL_FSCAL2);
  WriteReg(REG_FSCAL1,VAL_FSCAL1);
  WriteReg(REG_FSCAL0,VAL_FSCAL0);
  WriteReg(REG_RCCTRL1,VAL_RCCTRL1);
  WriteReg(REG_RCCTRL0,VAL_RCCTRL0);
  WriteReg(REG_FSTEST,VAL_FSTEST);
  WriteReg(REG_PTEST,VAL_PTEST);
  WriteReg(REG_AGCTEST,VAL_AGCTEST);
  WriteReg(REG_TEST2,VAL_TEST2);
  WriteReg(REG_TEST1,VAL_TEST1);
  WriteReg(REG_TEST0,VAL_TEST0);
/*  
  WriteReg(REG_PARTNUM,VAL_PARTNUM);
  WriteReg(REG_VERSION,VAL_VERSION);
  WriteReg(REG_FREQEST,VAL_FREQEST);
  WriteReg(REG_LQI,VAL_LQI);
  WriteReg(REG_RSSI,VAL_RSSI);
  WriteReg(REG_MARCSTATE,VAL_MARCSTATE);
  WriteReg(REG_WORTIME1,VAL_WORTIME1);
  WriteReg(REG_WORTIME0,VAL_WORTIME0);
  WriteReg(REG_PKTSTATUS,VAL_PKTSTATUS);
  WriteReg(REG_VCO_VC_DAC,VAL_VCO_VC_DAC);
  WriteReg(REG_TXBYTES,VAL_TXBYTES);
  WriteReg(REG_RXBYTES,VAL_RXBYTES);
  WriteReg(REG_RCCTRL1_STATUS,VAL_RCCTRL1_STATUS);
  WriteReg(REG_RCCTRL0_STATUS,VAL_RCCTRL0_STATUS);
  */
}

void Read_Config_Regs(void)
{ 
  Serial.println("Configuration registers");
  Serial.println(ReadReg(REG_IOCFG2),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_IOCFG1),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_IOCFG0),HEX);
   delay(1000);
 Serial.println(ReadReg(REG_FIFOTHR),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_SYNC1),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_SYNC0),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_PKTLEN),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_PKTCTRL1),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_PKTCTRL0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_ADDR),HEX);
   delay(10);
  Serial.println(ReadReg(REG_CHANNR),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FSCTRL1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FSCTRL0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FREQ2),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FREQ1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FREQ0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_MDMCFG4),HEX);
   delay(10);
  Serial.println(ReadReg(REG_MDMCFG3),HEX);
   delay(10);
  Serial.println(ReadReg(REG_MDMCFG2),HEX);
   delay(10);
  Serial.println(ReadReg(REG_MDMCFG1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_MDMCFG0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_DEVIATN),HEX);
   delay(10);
  Serial.println(ReadReg(REG_MCSM2),HEX);
   delay(10);
  Serial.println(ReadReg(REG_MCSM1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_MCSM0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FOCCFG),HEX);
   delay(10);

  Serial.println(ReadReg(REG_BSCFG),HEX);
   delay(10);
  Serial.println(ReadReg(REG_AGCCTRL2),HEX);
   delay(10);
  Serial.println(ReadReg(REG_AGCCTRL1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_AGCCTRL0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_WOREVT1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_WOREVT0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_WORCTRL),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FREND1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FREND0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FSCAL3),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FSCAL2),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FSCAL1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FSCAL0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_RCCTRL1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_RCCTRL0),HEX);
   delay(10);
  Serial.println(ReadReg(REG_FSTEST),HEX);
   delay(10);
  Serial.println(ReadReg(REG_PTEST),HEX);
   delay(10);
  Serial.println(ReadReg(REG_AGCTEST),HEX);
   delay(10);
  Serial.println(ReadReg(REG_TEST2),HEX);
   delay(10);
  Serial.println(ReadReg(REG_TEST1),HEX);
   delay(10);
  Serial.println(ReadReg(REG_TEST0),HEX);
   delay(10);
 /*
  Serial.println(ReadReg(REG_PARTNUM),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_VERSION),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_FREQEST),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_LQI),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_RSSI),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_MARCSTATE),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_WORTIME1),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_WORTIME0),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_PKTSTATUS),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_VCO_VC_DAC),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_TXBYTES),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_RXBYTES),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_RCCTRL1_STATUS),HEX);
   delay(1000);
  Serial.println(ReadReg(REG_RCCTRL0_STATUS),HEX);
   delay(1000);
*/  
}

 

post-35475-0-93837900-1393920805_thumb.jpg

post-35475-0-07502200-1394039213_thumb.png

Share this post


Link to post
Share on other sites
hello Samanvai

i need to read frecuency data from sensorHub with TIVA C and send it with CC2530 BoosterPack module Zigbee. ur code work in this application ?

 

thanks. 

 

best regards. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×