[beagleboard] Interfacing RF-Transceiver (CC1101 etc.) directly via SPI to Beaglebone

CC1101 has 64 byte Tx and Rx FIFOs. As long as you send frames that
are smaller than that, interfacing directly from Linux shouldn't be an
issue. It's just like you said, SPI and GPIO. The data sheet's pretty
decent, too.

If you want to send or receive frames larger than 64 bytes, you'll need
to empty / fill the FIFOs when the interrupt comes stating that they're
close to being full / empty. This may be difficult depending on your
RF data rate (ie: at >200 kbps you get < 1 ms to react to FIFO
interrupts but at lower data rates there may be reasonable time to
react). Linux isn't the best at dealing with sub 1 ms actions, a
dedicated microcontroller or the PRUSS would be a better fit.

If TI / Chipcon made a CC1101 transceiver with 128 or 256 byte FIFOs,
that would be great but I don't think such a thing exists. TI /
Chipcon, if you're listening, make a CC1101 with 128 byte FIFOs! Please?

You can take a look at the CC1110 or CC430 which each have an embedded
microcontroller on the same die (CC1110 is 8051 I think, CC430 is
MSP430) and then interface either of those to Linux easily via SPI or
other interface.

-Andrew

Hello Andrew,

It looks like your post gave me some clue. I actually just started out to add CC1101 module on my Ras Pi. Since there is a generic SPI driver on my Ras Pi, do I have to create another SPI driver for CC1101 module? Or just as you said interface the C-code from 8051 to Linux? Could you give me some more details about how to interface CC1101 from 8051 to Linux?

Thanks!

-George

It looks like your post gave me some clue. I actually just started out to
add CC1101 module on my Ras Pi. Since there is a generic SPI driver on my
Ras Pi, do I have to create another SPI driver for CC1101 module? Or just
as you said interface the C-code from 8051 to Linux? Could you give me some
more details about how to interface CC1101 from 8051 to Linux?

You'd want to write either a kernel driver using SPI and GPIO (lots of
Ethernet SPI controllers have this kind of interface, for reference, or
for a reasonable example with exact steps, google for "spike spi
driver") in order to provide a kernel level interface. This isn't
tremendously hard, but if you'd prefer, you could also take a look at
using spidev and GPIO from userspace. The performance in userspace
likely won't be as good as in the kernel, but the learning curve should
be lower if you've not written kernel drivers before.

The CC1101 doesn't have an integrated microcontroller, just the CC1110
and CC430 families. Although, recently TI introduced the CC1200 radio
which has larger FIFOs (128 byte) and is targetted at those doing IEEE
802.15.4 with sub-GHz radios. If your radio frames are 128 bytes or
smaller, and especially if you're doing 802.15.4, the CC1200 is well
worth your time to look at.

If you're not tied to using TI parts, also have a look at the Analog
ADF7023 or the ST SPIRIT1. Both, on paper, are better looking than the
CC1101. However, if you have an RF cape for beaglebone the TI modules
pop right on, which is handy.

Regards,
Andrew