Utility Bar

Beginner's Guide to the CC1101 RF Transceiver Module

Beginner's Guide to the CC1101 RF Transceiver Module

Ethan Zaitchik |

Table of Contents

    The CC1101 Wireless RF Transceiver is a wireless transceiver designed for low power wireless applications, capable of reliable transmissions both short and long range. In this guide, we’ll be going over the basics of how the CC1101 RF transceiver works and provide sample code to help get you started. 

    Features:

    • Input voltage - 1.8-3.6V. 3.3V recommended for best performance.
    • Maximum transmit power - +10 dBm (10 mW)
    • Operating frequency range - The CC1101 chip supports multiple ISM bands including 315, 433, 868 and 915 MHz. Common versions of the CC1101 transceiver kits use a SMA antenna tuned to different frequencies. When operating at any of these frequencies, certain regulations must be followed.
    • Modulation support - Supports OOK, ASK, 2-FSK, GFSK, and MSK modulation schemes.
    • Maximum transfer speed - 500kbps
    • Error detection - CRC error detection and built-in hardware address multipoint communication control
    • Signal monitoring - RSSI and carrier sense functions for improved network stability.
    • Transmission distance - The RF module is capable of up to 1km of transmission assuming perfect conditions, including line of sight, but is capable of 200-500 metres with minimal obstructions.

    Hardware Overview:

    CC1101 Pinout Diagram

    CC1101 Pinout
    1. GND - Ground
    2. VCC - Power input (3.3V)
    3. GDO0 - General digital output
    4. CSN - Chip select. 
    5. SCK - SPI clock line
    6. MOSI - Digital input
    7. MISO - Digital output
    8. GPO2 - Second digital output

    Important: The CC1101 is a 3.3V only device. Both VCC and all I/O pins are not 5 V tolerant. Supplying 5 V to any pin will permanently damage the chip.
    When using a 5V microcontroller (Arduino Uno/Nano/Mega), you must:

    • Power the CC1101 from a 3.3 V regulator (or the board’s 3.3 V rail).
    • Use logic level shifters for the SPI lines.

    The MOSI, MISO, SCK, and CSN pins form the standard 4-wire SPI interface used to configure the chip and exchange packets. GDO0 and GDO2 are programmable outputs commonly used for packet received or transmit complete interrupts.

    All C++ examples in this guide run without modification on Arduino, ESP32, Raspberry Pi Pico, STM32 and other platforms, only the pin assignments need to be changed to suit your board.

    Packet Structure Basics:

    Messages sent using the transceiver are stored in pieces of data called packets. These packets are made up of several parts, which are used by the receiver to better lock onto the signal, identify valid data (filtering noise), and detect errors. The overall structure of the packet can be adjusted but the order and length in bits of the data must be consistent. Packets contain the following data:

    • Preamble - Short sequence of bits sent at the beginning of every transmission. It allows the receiver to detect that a signal is present and synchronise with the incoming data stream
    • Sync word - Follows the preamble and acts as a unique identifier for the transmission. This helps the receiver determine when a valid packet begins and ignore unrelated RF noise.
    • Address byte - This allows for the receiver to only accept packets addressed to it. This is optional but important as it can reduce issues caused by other devices using the same frequency, such as RC toys, garage remotes, older car key fobs, etc.
    • Payload - The actual data being transmitted. The data can be fixed or variable depending on configuration. There are limits to the size but generally enough for simple commands.
    • CRC - Used to verify that the received packet has not been corrupted.

    CC1101 packet structure

    Figure – Example CC1101 packet structure showing preamble, sync word, payload, and CRC.

    Source  An 868 MHz 7.5 µW wake up receiver with -60 dBm sensitivity. Scientific figure on ResearchGate. Available from  ResearchGate

    Libraries & Setup:

    For code examples and practical use of the CC1101 transceiver module, we’ll be using the library made by pkarsy on github. This library supports multiple modulation modes (ASK/OOK, 2-FSK, GFSK, 4-FSK, MSK) and a wide frequency range, which is dependent on the internal crystal and antenna used (300-348 MHz, 387-464 MHz, 779-928 MHz). While this library is capable of more advanced applications, such as different modulations, custom packet formats and power tuning, we’ll be using a minimal “hello world” example.

    Wiring:

    Since the CC1101 board communicates to a microcontroller via SPI, the RF module's connectors must be matched to the corresponding SPI pins, with MOSI connecting to MOSI, MISO to MISO, SCK to SCK, and CSN to the chip select pin. The table below shows common connections for popular boards. We've released a reference guide which includes I2C, SPI and UART pinouts for common development boards.

    Pin Arduino Nano Arduino Pro Micro ESP32 Raspberry Pi Pico
    VCC 3.3 V 3.3 V 3.3 V 3.3 V
    GND GND GND GND GND
    SCK D13 D15 GPIO18 GP18
    MOSI D11 D16 GPIO23 GP19
    MISO D12 D14 GPIO19 GP16
    CSN (SS) D10 D10 GPIO5 GP17
    GDO0 (optional) D2 D2 GPIO4 GP20
    GDO2 (optional) D3 D3 GPIO2 GP21

    Note: SCK, MOSI and MISO pins must stay the same, but the CSN, GDO0 and DGO2 pins can be changes.

    Example Wiring Diagram of an Arduino Nano
    CC1101 RF Module Example Wiring Arduino Nano

    Installing the Library

    1. Download the zip file by clicking here 
    2. Open your IDE of choice. We’ll be using Arduino IDE.
    3. Import the library. In Arduino IDE, click sketch > Include Library > Add .ZIP Library… Click on the previously downloaded .zip file and click open. The library should then be uploaded to your IDE.
    4. Open the HelloWorld example within the CC1101 library. In the Arduino IDE, this can be found by clicking File > Examples then scroll down to the Examples from Custom Libraries section and look for CC1101.
    5. Once located the example files, open and modify the pin assignments in the Receive and Transmit files to suit your board. 
    6. Upload the updated Receive file to one microcontroller and Transmit to the other. Once done so, the program should automatically run.

    Improving Range & Reliability:

    Even though the CC1101 is capable of long range communications, real world performance depends heavily on antenna quality, power settings, interference and hardware layout. We’ve conducted a list of simple, but effective ways to improve range and stability.

    • Use a properly tuned antenna - The most important factor towards improving range and reliability is to use a correctly tuned antenna for your required frequencies. The CC1101 module is generally capable of 300-900 MHz, however most retail modules include an antenna usually tuned for 433 MHz or 915 MHz. Using an antenna tuned for a different frequency range can provide poor performance, leading to worse experience.
    • Avoid long jumper wires - SPI is sensitive to noise. Wires longer than about 10 to 15 cm can cause misreads in some setups. In our testing, we originally used 20cm ribbon cables to test different libraries but experienced errors when reading from the module. Switching to separated 10cm jumper wires alleviated this issue.
    • Increase transmit power - Adjusting the output power can improve range but also increases current draw. This can reduce battery life in battery powered applications.
    • Lower the data rate - Slower data rates provide longer range because the receiver has an easier time keeping the signal locked. For long distance, data rates between 1 kbps and 10 kbps usually give the best performance.
    • Use GFSK or 2-FSK modulation for stability - OOK and ASK are simple but more sensitive to noise. FSK based modes provide better reliability in poor environments.
    • Keep the module away from noise sources - DC motors, switching power supplies, WiFi modules and high current traces can all affect RF performance. Try to keep the CC1101 physically separated from noisy components and use different power sources when possible.

    Security & Safe Use:

    The RF module operates within the ISM bands, meaning anyone can receive or transmit on the same frequency as the module operates on within that band. When using the CC1101 RF module, assume that communication is not private or secure, unless you implement strong encryption yourself.

    Security Considerations:

    1. No build in encryption - The CC1101 does not provide hardware-level encryption or authentication. Sensitive data should be encrypted in software before transmission.
    2. Transmission restrictions - Continuous transmission is not allowed at certain frequencies such as the 433 MHz ISM bands. Devices should transmit in short bursts with pauses between transmissions to remain compliant.
    3. Address filtering - The CC1101 supports hardware packet filtering by address. This prevents devices from processing packets not intended for them, reducing accidental interference.
    4. CRC checking - CRC verification rejects corrupted packets caused by noise. CRC does not prevent an attacker or another device from sending a valid but incorrect payload. It only confirms that the packet arrived intact.
    5. Regulatory compliance - Even though the module is licence-free in most regions, including Australia, it is subject to power limits and duty cycle restrictions. Operating outside these limits may violate local laws. In Australia, the limit is 25 mW of transmit power.

    Common Questions and Tips

    What is the CC1101 used for

    The CC1101 is a low power sub-1GHz RF transceiver used for wireless communication between devices. It is commonly used in applications such as remote controls, wireless sensors, home automation, alarm systems, telemetry, and custom short range data links. It operates in licence-free ISM bands such as 315MHz, 433MHz, 868MHz, and 915MHz depending on the module and regional regulations.

    Does the CC1101 work on its own

    No. The CC1101 is not a standalone device. It must be connected to a microcontroller such as an Arduino, ESP32, or Raspberry Pi Pico. The microcontroller configures the CC1101 over SPI and handles sending and receiving data packets.

    What voltage does the CC1101 use

    The CC1101 operates at 1.8V to 3.6V with 3.3V being the recommended supply voltage. The module is not 5V tolerant. When using 5V boards such as the Arduino Uno, level shifting is required on SPI and control pins to avoid damaging the module.

    Which frequency should I choose

    The frequency should match both the CC1101 module hardware and your local radio regulations. Common modules are tuned for 433MHz or 915MHz. Both the transmitter and receiver must be configured to use the same frequency, modulation, and data rate.

    How much range can I expect

    Range depends on antenna quality, transmit power, data rate, and the environment. In real-world conditions, ranges of tens to hundreds of metres are common. With a good antenna, low data rate, and clear line of sight, significantly longer ranges are possible.

    Why is communication unreliable or inconsistent

    Unreliable communication is often caused by mismatched settings, poor antennas, electrical noise, or incorrect wiring. Ensure both devices use identical configuration values and that the antenna is tuned for the operating frequency. Keep SPI wires short and avoid running them near high current or noisy lines.

    Does the CC1101 support encryption

    The CC1101 does not include built-in encryption. If secure communication is required, encryption must be implemented in software on the microcontroller before transmitting data.

    General tips for best performance

    • Use a proper antenna designed for your chosen frequency band
    • Power the module from a stable 3.3V supply with adequate decoupling
    • Lower data rates generally improve range and reliability
    • Double check SPI connections and pin assignments before troubleshooting code

    With all of the information above, you now have everything you need to begin your RF journey! You can find the CC1101 RF transceiver here. We recommend getting a pair of these transceivers so you can test both transmitting and receiving.

    1 comment

    Are you sure that Pinout is correct? I’m struggling to get my Pi Zero 2 w to detect anything

    Jack Lowes,

    Leave a comment

    // Table of contents