Driver for TI's CC1200 radio ICs. Forget hardcoded register settings -- this driver calculates everything from scratch!
Dependents: CC1200-MorseEncoder CC1200-Examples
CC1200 Driver
by Jamie Smith / USC Rocket Propulsion Lab
After months of work, we are proud to present our driver for Texas Instruments' CC1200 digital radio IC! This driver has been written from scratch to be an easy and flexible way of using this radio transceiver. For our application, we needed to be able to tune each and every setting of the radio to try and eke that last bit of performance of our system - so using premade configurations alone wasn't going to cut it! Instead, this driver calculates each parameter of the radio using the equations and instructions given in the datasheet. So, you can tweak parameters to your heart's content, and you shouldn't have to do any math yourself!
Features
- Automatic calculation of correct register values for:
- RF frequency
- FSK deviation
- Symbol rate
- Output power
- RX filter bandwidth (this one's harder than it looks!)
- Easy handling of data packets
- GPIO configuration
- Preamble and sync word configuration
- RTOS compatible (always locks SPI bus during transactions)
- Two debug levels available
- RSSI and LQI support
Not Supported
- Transparent mode
- FM mode
- ASK parameter configuration
- Frequency offsets
Examples
- See the example project here for an example of how to use the driver.
- Another example (using a more exotic configuration) is the CC1200-MorseEncoder.
Changelog
Version 1.2 May 3 2021
- Added unfinished infinite length packet support via the readStream() and writeStream() functions. The API is complete and basic usage works but there's still a bug I haven't been able to track down yet where incorrect data is transmitted at the end of a stream. Use with caution!
- Added
preferHigherCICDec
parameter tosetRXFilterBandwidth
- Removed
setIFMixCFG()
(which takes a byte parameter) and replaced it withsetIFCfg()
, which takes documented enum class values. - Added
setAGCSettleWait()
, which per my testing is needed for correct 430MHz operation. - Added support for reading RSSI and LQI values, both from packet appended status bytes and from the registers.
- Update 430MHz black box registers based on SmartRF values
- Removed
setIQMismatchCompensationEnabled()
. This call has been replaced by the new 2nd parameter tosetIFCfg()
.
Version 1.1 Aug 28 2020
- Add fixed length packet support and other features needed for Morse support.
- Fix bug causing weird behavior with low sample rates (<1ksps).
NOTE: you must now call setPacketMode() when configuring the radio.
Version 1.0 Aug 10 2020
Initial Release
Diff: CC1200Bits.h
- Revision:
- 5:d22a8885800b
- Parent:
- 4:c609cc7c9ea7
diff -r c609cc7c9ea7 -r d22a8885800b CC1200Bits.h --- a/CC1200Bits.h Fri Aug 28 15:39:31 2020 -0700 +++ b/CC1200Bits.h Mon May 03 02:41:34 2021 -0700 @@ -54,7 +54,7 @@ #define PKT_CFG1_PN9_SWAP_EN 5 #define PKT_CFG1_ADDR_CHECK_CFG 3 #define PKT_CFG1_CRC_CFG 1 -#define PKT_CFG1_APPEND_STATUS +#define PKT_CFG1_APPEND_STATUS 0 #define PKT_CFG0_LENGTH_CONFIG 5 #define PKT_CFG0_PKT_BIT_LEN 2 @@ -127,4 +127,13 @@ #define ASK_CFG_AGC_ASK_BW 6 #define ASK_CFG_ASK_DEPTH 0 +#define RSSI0_RSSI_3_0 3 +#define RSSI0_CARRIER_SENSE 2 +#define RSSI0_CARRIER_SENSE_VALID 1 +#define RSSI0_RSSI_VALID 0 + +#define AGC_CFG1_RSSI_STEP_THR 6 +#define AGC_CFG1_AGC_WIN_SIZE 3 +#define AGC_CFG1_AGC_SETTLE_WAIT 0 + #endif //LIGHTSPEEDRANGEFINDER_CC1200BITS_H