CC1101 Low-Power Sub-1 GHz RF Transceiver

The CC1101 component provides a driver for the Texas Instruments CC1101 Sub-1 GHz RF Transceiver. It allows you to transmit and receive raw RF signals (ASK/OOK, FSK, etc.) using the standard Remote Transmitter and Remote Receiver components.

This component requires the SPI Component to be enabled.

Image

Component Configuration

# Minimal Example
cc1101:
  cs_pin: GPIOXX
  gdo0_pin: GPIOXX
  frequency: 433.92MHz

Configuration Variables

Hardware Settings

  • cs_pin (Required, Pin): The SPI Chip Select (CSN) pin connected to the module.
  • gdo0_pin (Required, Pin): The pin connected to GDO0 on the CC1101.
  • Note: remote_transmitter must use the pin connected to GDO0 to transmit successfully.

General Settings

  • frequency (Optional, frequency): The operating frequency. Range: 300MHz to 928MHz. Default: 433.92MHz.
  • output_power (Optional, float): The transmission power in dBm. Range: -30 to 11. Default: 10.
  • modulation_type (Optional, enum): The modulation format. Options: ASK/OOK (default), 2-FSK, 4-FSK, GFSK, MSK.
  • symbol_rate (Optional, int): The symbol rate in Baud. Range: 600 to 500000. Default: 5000.
  • rx_attenuation (Optional, enum): Internal RX attenuation. Options: 0dB, 6dB, 12dB, 18dB. Default: 0dB.
  • dc_blocking_filter (Optional, boolean): Enable the digital DC blocking filter. Default: True.

Tuner Settings

  • filter_bandwidth (Optional, frequency): The receive filter bandwidth. Range: 58kHz to 812kHz. Default: 203kHz.
  • fsk_deviation (Optional, frequency): Frequency deviation for FSK/GFSK modulation.
  • channel (Optional, int): Channel number (added to base frequency).
  • channel_spacing (Optional, frequency): Spacing between channels.
  • if_frequency (Optional, frequency): Intermediate Frequency. Default is optimized for 433MHz usage.
  • pktlen (Optional, int): Packet length config. –>

AGC (Automatic Gain Control) Settings

Advanced users can fine-tune the AGC dynamics.

  • magn_target (Optional, dB): Target signal amplitude. Range: 24dB to 42dB in increments of 3(eg. 33dB).
  • max_lna_gain (Optional, dB): Maximum LNA gain reduction. Options: Default, 2.6dB, 6.1dB, 7.4dB, 9.2dB, 11.5dB, 14.6dB, 17.1dB.
  • max_dvga_gain (Optional, enum): Maximum Digital Variable Gain reduction. Options: Default, -1, -2, -3.
  • lna_priority (Optional, boolean): If true, decrease LNA gain before DVGA gain.
  • carrier_sense_abs_thr (Optional, int): Absolute RSSI threshold for Carrier Sense.
  • carrier_sense_rel_thr (Optional, enum): Relative RSSI threshold for Carrier Sense.
  • filter_length_fsk_msk (Optional, enum): Averaging length for FSK/MSK.
  • filter_length_ask_ook (Optional, enum): Averaging length for ASK/OOK.
  • freeze (Optional, enum): AGC gain freeze behavior.
  • wait_time (Optional, enum): AGC wait time.
  • hyst_level (Optional, enum): AGC hysteresis level.

Actions

This component provides actions to control the radio state, primarily used for coordinating transmission.

  • cc1101.begin_tx: Wakes the radio and forces it into TX mode. This must be called before remote_transmitter starts sending data.
  • cc1101.end_tx: Puts the radio back into RX mode and resets the pin configuration to safe defaults.
  • cc1101.reset: Resets the CC1101 chip and re-applies configuration.

Example Transmit Button

button:
- platform: template
    name: "Send Signal"
    on_press:
      # 1. Wake up radio and enter TX mode (Blocking wait)
    - cc1101.begin_tx:
      
      # 2. Send data using standard Remote Transmitter
    - remote_transmitter.transmit_raw:
          code: [1000, -1000, 1000, -1000]
          repeat: 5
          
      # 3. Return to RX mode
    - cc1101.end_tx:

Integration with Remote Receiver/Transmitter

Wiring for Single Pin Usage

Wire GDO0 to a single GPIO and use it for both TX and RX.

cc1101:
  gdo0_pin: 
    pin: 
    number: GPIOXX # CC1101 GDO0
    mode:
      input: true
      output: true
      pullup: true
      open_drain: true
    allow_other_uses: true

remote_transmitter:
  pin: 
    number: GPIOXX # Must match GDO0
    mode:
      input: true
      output: true
      pullup: true
      open_drain: true
    allow_other_uses: true
  carrier_duty_percent: 100%
  on_transmit:
    then:
      - cc1101.begin_tx:
  on_complete:
    then:
      - cc1101.end_tx:

remote_receiver:
  pin: 
    number: GPIOXX # Must match GDO0
    mode:
      input: true
      output: true
      pullup: true
      open_drain: true
    allow_other_uses: true
  dump: all

Wiring for Split Pin Usage

  • GDO0 (Pin 3): Connect to the pin used by remote_transmitter.
  • GDO2 (Pin 8): Connect to the pin used by remote_receiver.
cc1101:
  gdo0_pin: 
    pin: 
    number: GPIOXX # Must match GDO0
    mode:
      input: true
      output: true
      pullup: true
      open_drain: true
    allow_other_uses: true

remote_transmitter:
  pin: 
    number: GPIOXX # Must match GDO0
    mode:
      input: true
      output: true
      pullup: true
      open_drain: true
    allow_other_uses: true
  carrier_duty_percent: 100%
  on_transmit:
    then:
      - cc1101.begin_tx:
  on_complete:
    then:
      - cc1101.end_tx:

remote_receiver:
  pin: GPIOXX # CC1101 GDO2
  dump: all

Troubleshooting

“FF0F was found” Error

If you see a log entry stating FF0F, 0000, or FFFF during setup, this indicates an SPI communication failure. Check your wiring (MISO/MOSI/CS).

No Signal during Transmit

  • Check Pinout: Ensure remote_transmitter is assigned to the pin physically connected to GDO0. The CC1101 only supports transmission via GDO0.

See Also