Thursday, December 11, 2014

Trying out the CC2500

Finally getting around to this.  Slow work today, waiting on a client, so I'm going to get this onto a breadboard.

The plan is, start with this website(there's a link here):

Get this to work using the full SimpliciTI stack, and see what I really need.  If I can get this to work on a platform it plays natively with, I should be able to port this to the RFDuino.

So, from the left we have a TI MSP430 Launchpad, next to that a CC2500 module broken out onto a Schmart board, and finally the RFDuino.  End product will be on a PCB, may or may not go with the surface mount RFDuino.  Power usage may be low enough to use a coin cell, which would be very cool.

I've picked the 2500 up a few times over the last 6 months, this post will help me keep track of my progress, I have so many bookmarks it's hard to find the details anymore.  I've tried SPI with the CC2500 to an Arduino.  SPI isn't plug and play.  I could only get as far as updating registers.

Lots of sensitive timing issues, most recommend a scope.  I think some of the issues I've experienced trying other peoples code is the microcontroller speed.

Abandoning simpliciTI (Again).  This is for people with 40 hours to kill, not weekends.

I think I'm getting closer just using SPI.  IOCFG0 is one important factor in the variability of code you find.  The "sheet" for my CC2500 board refers to a couple of GDOX pins as general use.  So you think great, don't need to hook those up.  Turns out GDO0, is responsible for notifying your code that a packet has been received.  But, only if you set the IOCFG0 register with the correct value(and there are many to choose from).  Most likely 0x06 is what we want here.


  1. Power usage (coin cell) is a target of experiment ? I think a time in RX (16mA) needs to be reduced by precise timing (with compensation for crystal drift).
    But a initial sync/wait packet could be an coin battery kill issue.
    Sequence is
    300s IDLE
    RX 100ms on channel 0 , 400ms IDLE,
    RX 100ms on channel 1, 400ms IDLE,
    RX 100ms on channel 2, 400ms IDLE,
    RX 100ms on channel 3, 400ms IDLE
    All times reduced by time to wake up and frequency calibration time

  2. It only need to setup registry (do a calc for a different crystal freq) and enter RX, then poll periodically for bytes available in FIFO and if there is byte in FIFO fetch it. Still haven't find time to do it :(
    No need for simpliciTI code here.
    GDO0 is good for pin interrupt and wake up from sleep.

    1. Thanks for mentioning the xtal, I didn't realize that. I've got settings out of RF Studio for 26 mhz (Wixel is 48 mhz). Still no go. I'm going to setup a wixel to transmit now and confirm the TI sniffer sees it in "dex" mode