Skip to content

AGCCTRL2=0xC7 default makes the CC1101 deaf for weak OOK signals (cheap remotes / keyfobs) #208

Description

@wiredsim

Summary

The hardcoded radio.SPIsetRegValue(RADIOLIB_CC1101_REG_AGCCTRL2, 0xc7) in src/rtl_433_ESP.cpp (line ~208) makes the receiver effectively deaf to weak OOK signals from cheap 433 MHz remotes. The value caps DVGA gain to the lowest setting and targets a 42 dB IF level — fine for nearby weather stations or high-power sensors, but kills sensitivity for typical low-power keyfobs.

Switching to 0x03 (full DVGA gain available, MAGN_TARGET = 33 dB) dramatically improves reception.

Measured impact

Hardware: M5Stack ATOM Matrix + E07-M1101D CC1101, 8 dBi whip antenna. Signal source: a PT2262-class 433 MHz remote (~10 mW) at ~10 cm from the antenna.

Config RSSI register during press Captures in 30s of pressing
Default AGCCTRL2=0xC7 Flat at ~-89 dBm (no swing) 0 events
Override AGCCTRL2=0x03 (applied post-init via raw SPI) -90 → -20 dBm swing 24 clean unparsed events with high consensus across retransmissions

The default value's source comment in the file says "Settings borrowed from lsatan" — suggesting it wasn't independently chosen for this library or tested against weak-OOK signal sources.

Why this matters

A lot of rtl_433 use cases involve cheap sensors and remotes that transmit at low power. Anyone trying to use this library to receive PT2262/EV1527-family signals, garage fobs, doorbells, pyrotechnic cue remotes, etc. is likely to hit this same wall. In our case we spent hours convinced our wiring or antenna was bad before tracing the deafness to AGCCTRL2.

Proposed fix

The safer option is to expose this via a build flag so users can override without touching the library source:

#ifndef CC1101_AGCCTRL2
#  define CC1101_AGCCTRL2 0xC7
#endif

// ...

state = radio.SPIsetRegValue(RADIOLIB_CC1101_REG_AGCCTRL2, CC1101_AGCCTRL2);

Paired with a README note explaining that weak-OOK use cases (sub-GHz remotes, keyfobs) often need -DCC1101_AGCCTRL2=0x03.

A bolder fix would be to change the default outright to 0x03. That would dramatically improve out-of-box reception for the cheap-remote use case, but could regress users who have tuned around the current value, so the build flag is probably the right tradeoff.

Happy to submit a PR for the build flag approach. Let me know if you'd prefer a different design.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions