whatic.io β
From the bench

CC1101 Sub-GHz RF Transceiver: PATABLE Output Power, POR Timing, and Bring-Up

September 21, 2026 · AI-generated from the datasheet, fact-checked by two independent LLM critics

The most common misconception about the CC1101 is that it's a drop-in module: wire four SPI lines, load a config from SmartRF Studio, and you're transmitting. In practice the part does nothing useful until your firmware executes a specific first-power-on reset handshake, waits for the SO line to assert CHIP_RDYn, and programs the output power through the PATABLE rather than a single register. Skip any of those and you get the classic symptoms — SPI reads that return garbage, or a transmitter that never keys up. (A radio that works on the bench and dies after a temperature swing is a different failure mechanism entirely — PLL calibration validity, covered below — not a consequence of skipping reset or PATABLE setup.) None of that is a defective chip; it's the documented behavior of a transceiver whose power-up state the datasheet says must be assumed "unknown" until you send a reset strobe — a condition that applies specifically when the supply doesn't meet the power-on-reset requirements described below.

Next step
Start building with CC1101 → This guide comes from the same grounded, cited datasheet answers — ask the assistant your own CC1101 questions.

What the CC1101 actually is

The CC1101 is a low-cost sub-1 GHz RF transceiver from TI designed for very low-power wireless applications, aimed at the ISM and SRD bands at 315, 433, 868, and 915 MHz, and programmable elsewhere in 300–348, 387–464, and 779–928 MHz. It covers 0.6 to 600 kbps with a configurable baseband modem, puts out up to +12 dBm programmable output power, and carries hardware packet handling, data buffering, burst transmission, clear channel assessment, link quality indication, and wake-on-radio on-chip. You control it over a 4-wire SPI interface from an external microcontroller, with separate 64-byte RX and TX FIFOs. The datasheet's own application list — wireless sensor networks, automatic meter reading, home and building automation, and Wireless M-BUS — tells you the intended profile: short-range, battery-friendly, unlicensed-band links. For longer range, TI pairs it with the CC1190 range extender at 850–950 MHz.

The second myth worth killing up front: "sub-GHz means long range by default." Sensitivity is a strong function of data rate — −116 dBm at 0.6 kBaud/433 MHz versus −112 dBm at 1.2 kBaud/868 MHz (both at 1% PER), and −90 dBm at 500 kBaud MSK. If your link budget doesn't close, lowering the data rate is your first lever, not a bigger antenna.

Wiring the CC1101 into your design

Supply. Design for VDD 1.8–3.6 V; the datasheet characterizes current consumption at exactly 1.8/3.0/3.6 V across −40/+25/+85 °C. The absolute maximum is −0.3 to 3.9 V, and critically, all supply pins must be at the same voltage. The voltage ramp-up rate must not exceed 120 kV/µs, so don't slam the rail with a hard hot-plug — you need soft-start behavior. Beyond the ramp rate, the datasheet imposes explicit power-on-reset timing windows: the power-up ramp from 0 V to 1.8 V must take no more than 5 ms, and the power-off time between cycles must be at least 1 ms. If the supply violates these POR requirements, the chip must be assumed to be in an unknown state until you transmit an SRES strobe — so don't rely on SRES to paper over an avoidable POR violation; meet the windows in the first place.

Power budget. RX draws roughly 14–15 mA at low baud (14.7 mA typ at 1.2 kBaud, 868 MHz). TX current depends entirely on the PATABLE setting you use: at 868 MHz, +11 dBm (0xC0) draws ~33.4 mA typ at 3 V/25 °C, while 0 dBm (0x8E) draws ~17.2 mA. Budget from your actual setting, not the chip maximum. For battery nodes, sleep mode is the whole story: 200 nA typ (max 1 µA) with registers retained, rising to 0.5 µA typ with wake-on-radio enabled. Wake-up is fast — 240 µs from sleep to RX or TX on the reference design.

Crystal. The reference oscillator needs a 26–27 MHz crystal in parallel mode between XOSC_Q1/Q2, with two loading caps sized so the total capacitance between the crystal terminals — including parasitics — equals the crystal's specified load capacitance Cₗ: CL = 1/(1/C81 + 1/C101) + C_parasitic. There's also an external bias resistor (R171) for the internal bias current reference. Crystal start-up time depends on the crystal's ESR and load capacitance, so verify those against the spec, not just the frequency.

RF front-end. The RF pins are balanced, shared between RX and TX, with the RX/TX switch on-chip — you do not need an external antenna switch. The matching network and balun are built from a few passives on the PCB, referenced to 50 Ω. One real selection variable: at 868/915 MHz, wire-wound inductors give better output power, sensitivity, and harmonic attenuation than multi-layer parts. On the antenna side, a DC-block cap is only necessary if the antenna presents a DC path, and the harmonic-filter components can be left unmounted if you don't need them.

Decoupling and grounding. The datasheet specifies placement, not values: each decoupling cap goes as close as possible to its supply pin, ties to the power plane via separate vias, routes power line → cap → pin, and each cap's ground pad gets its own via to the ground plane. Avoid direct traces between neighboring power pins and avoid routing in the ground plane under the chip or the matching network. The on-chip digital-core regulator requires one external decoupling capacitor, and its output must drive only the CC1101 — don't hang other circuits off it.

Known limitation: the datasheet deliberately leaves decoupling capacitor values, the bias resistor value, and pull-up recommendations to the CC1101EM reference design rather than stating them. Don't treat any µF/nF or pull-up number as datasheet-verified — pull them from the reference BOM.

Absolute limits on the pins. RF_P, RF_N, DCOUPL, and RBIAS tolerate only −0.3 to 2.0 V — far tighter than the supply rail — so any ESD clamp or protection network on those pins must respect that. The digital pins (SPI and GPIO) have a separate, more generous limit from the same absolute-maximum table: −0.3 V to VDD+0.3 V, capped at 3.9 V — so don't over-constrain your SPI/GPIO level shifting to the RF-pin 2.0 V figure. Maximum input RF level is +10 dBm, and the part's own ESD rating is a modest 750 V HBM / 400 V CDM, so plan external protection for anything with an exposed antenna.

Getting the CC1101's output power and data path right

Output power is the easiest thing to get wrong. It's set through the PATABLE — up to 8 entries — plus the 3-bit FREND0.PA_POWER selector, which also gives you automatic PA power ramp up/down at packet start and end for 2-FSK, GFSK, 4-FSK, MSK, and ASK. The settings differ by band and inductor type: the default 0xC6 gives 8.5 dBm at 868 MHz but 7.2 dBm at 915 MHz. Use the datasheet's recommended PATABLE tables for your band instead of tuning blindly, and note that the 0x61–0x6F PA range is explicitly disallowed.

Three PATABLE traps:

On the data side, the 64-byte TX and RX FIFOs enable burst transmission — write a full packet, let the radio send it. Native packet handling tops out at 255 bytes (PKTLEN is 8-bit); longer packets use infinite-length mode (PKTCTRL0.LENGTH_CONFIG=2) with a mid-packet switch back to fixed length — the datasheet works through a 600-byte example where you stream at least 345 bytes through the FIFO (six fills of 64 bytes) before setting PKTLEN to mod(600, 256) = 88. When draining the RX FIFO for packets larger than 64 bytes, poll RXBYTES.NUM_RXBYTES at least twice the RF byte rate until the same value returns twice, then read n−1 bytes — the −1 keeps you from racing the radio as it fills the FIFO. Address and maximum-length filtering happen in hardware, so configure them in registers and spare your MCU the work.

CC1101 features that carry hidden trade-offs

Wake-on-radio (WOR) lets the chip wake itself from sleep and listen with no MCU involvement: arm it with the SWOR strobe, release CSn so it sleeps, and the on-chip RC oscillator drives a timer through IDLE→RX cycles. The wake period follows tEvent0 = (750/fXOSC) · EVENT0 · 2^(5·WOR_RES). The gotcha: the sleep-to-Event0 time must exceed 11.08 ms with a 26 MHz crystal (10.67 ms at 27 MHz), or consecutive Event0s collide. If the radio wakes several times a second, you can calibrate the RC oscillator once, write the status registers back into RCCTRL0/RCCTRL1, and set WORCTRL.RC_CAL=0 to cut current — but you must re-enable calibration manually later.

FEC is not free. It's a rate-1/2 convolutional code with constraint length 4, so the effective data rate is halved — and it's never used alone: the CC1101's FEC is paired with interleaving (enabled together via MDMCFG1.FEC_EN), which spreads burst errors across the coded stream. Holding your effective rate constant means doubling the over-air rate, which needs a wider receiver bandwidth and reduces sensitivity — the datasheet explicitly says the coding gain and the sensitivity degradation are counteracting factors. Run the numbers before enabling it.

Calibration validity. PLL calibration values are only valid over roughly ±40 °C. If you don't recalibrate before every RX/TX entry, program IOCFGx.GDOx_CFG=0x0A so the GDO pin flags PLL lock as an MCU interrupt, and recalibrate when lock isn't indicated.

CCA and carrier sense. With MCSM1.CCA_MODE set and IOCFGx.GDOx_CFG=0x09, the clear-channel state appears on a GDO pin — and if you issue STX while in RX, the chip only enters TX if the channel is clear, otherwise it stays in RX. Free collision avoidance with no MCU timing. Beyond that TX gating, the datasheet documents two more carrier-sense mechanisms worth using: an absolute CS threshold with a reference table of typical RSSI values at the CS threshold (Table 33, at MAGN_TARGET = 7, 250 kBaud, 868 MHz) spanning the MAX_LNA_GAIN/MAX_DVGA_GAIN settings, and a relative threshold via AGCCTRL1.CARRIER_SENSE_REL_THR that flags sudden RSSI changes of 6, 10, or 14 dB independent of absolute level — useful for detecting signals in environments with a time-varying noise floor.

Testing the CC1101 on the bench

Work through these in order; each one gates the next.

  1. Reset handshake. Set SCLK=1 and SI=0 first (this avoids pin-control-mode problems), hold CSn low then high for ≥40 µs, pull CSn low and wait for SO to go low (CHIP_RDYn), issue the SRES strobe, and wait for SO to go low again. If SO never asserts, stop — your supply or SPI wiring is wrong.
  2. RX current sanity. Idle in RX at 1.2 kBaud/868 MHz and confirm roughly 14.7 mA. A large deviation means wrong register config or a supply leak.
  3. RSSI check. Read the RSSI status register (2's complement). If RSSI_dec ≥ 128, RSSI_dBm = (RSSI_dec − 256)/2 − RSSI_offset; otherwise RSSI_dBm = RSSI_dec/2 − RSSI_offset, with RSSI_offset = 74 dB for 433 and 868 MHz from 1.2 to 500 kBaud and 0.5 dB resolution. With a calibrated source, a −120 dBm input should read ≈ −115 dBm and −60 dBm should read ≈ −58 dBm at 433 MHz. A big error here is your earliest catch for a bad matching network. Enabling PKTCTRL1.APPEND_STATUS lets you log per-packet RSSI in the field.
  4. Sensitivity. Inject a modulated signal at −116 dBm (0.6 kBaud/433 MHz) or −112 dBm (1.2 kBaud/868 MHz) and confirm about 1% packet error rate. If you need several dB more to hit 1% PER, the RX matching or crystal is off.
  5. Output power. Put a spectrum analyzer on the antenna port and verify the level against your PATABLE setting — remember the default 0xC6 maps to different dBm per band, and 0x61–0x6F is disallowed.
  6. Corners. Re-run the above at worst-case supply and temperature; the ±40 °C calibration window means a unit verified at room temperature can drift, so confirm PLL lock via the GDO flag after large temperature swings.

Known limitation: the datasheet's RSSI_offset table covers only 433 and 868 MHz. Using 74 dB at 315 or 915 MHz is consistent with TI's gain-based offset and reference firmware, but it's engineering practice, not a datasheet-verified value — confirm it against a known reference input in your own module.

Also remember RSSI is an estimate of signal power in the chosen channel and reflects only the current RX gain setting — don't use it alone as a selectivity pass/fail. Exercise the receiver with a nearby interferer and a real packet test.

Troubleshooting the CC1101 when it misbehaves

Triage in this order; each step traces to a documented behavior.

One integration detail worth pinning down while you're in the SPI code: CSn must stay low for the entire transfer or the transfer is cancelled, and the practical SCLK ceiling for plain burst access with no inter-byte delays is 6.5 MHz (10 MHz if you insert the spec'd 100 ns delay between bytes). Poll SO/CHIP_RDYn rather than blindly waiting the 150 µs power-down crystal start-up figure.

The through-line: almost every "mysterious" CC1101 failure is a documented state-management rule — reset handshake, POR timing, calibration validity, sleep volatility, CSn timing — being violated. Read the state machine notes before blaming the silicon.

Part page: CC1101.