Overview

The RDA5807M (and variants RDA5807FP, RDA5807NN) is a single-chip CMOS stereo FM broadcast radio receiver IC manufactured by RDA Microelectronics. Sold as an ultra-compact 10-pin RRD-102 breakout module, it tunes FM radio frequencies from 50 MHz to 108 MHz (covering US, European, and Japanese FM broadcast bands).

Integrating a fully digital synthesizer, IF selectivity, digital automatic gain control (AGC), RDS/RBDS radio text demodulator, programmable bass boost, and internal 32.768 kHz32.768\text{ kHz} clock driver, the RDA5807M outputs analog stereo audio capable of directly driving 32 Ω32\ \Omega headphones or audio power amplifiers over an I2CI^2C bus. It is widely used in DIY FM radio receivers, alarm clocks, and retro boombox projects.

Quick reference

Operating voltage (VCC)2.7 V to 3.6 V DC (3.3 V nominal)
InterfaceI2CI^2C (up to 400 kHz)
Direct Register Address0x11 (Random access register mode)
Sequential Register Address0x10 (Legacy TEA5767 backward compatibility mode)
FM frequency range50.0 MHz to 108.0 MHz (Worldwide FM)
Channel spacing25 kHz, 50 kHz, 100 kHz, or 200 kHz
Audio featuresStereo/Mono mode, Digital Volume (0–15), Bass Boost, Mute
Data decodingIntegrated RDS / RBDS (Radio Data System text & station ID)
Direct headphone driveOnboard driver outputs 32 Ω32\ \Omega headphone audio

Pinout (RRD-102 Module 10-Pin Header)

text
        ┌───────────────────┐
        │  [RDA5807M IC]   │
        │  [32.768kHz XTAL] │
        └─┬─┬─┬─┬─┬─┬─┬─┬─┬─┘
          1 2 3 4 5 6 7 8 9 10
PinNameTypeDescription
1SDADigital Input / OutputI2CI^2C Serial Data
2SCLDigital InputI2CI^2C Serial Clock
3GNDPowerGround reference (0 V)
4NCUnusedNo connection
5VCCPowerPower supply input (+2.7 V to +3.6 V DC)
6GNDPowerGround reference (0 V)
7ROUTAnalog OutputRight channel audio output
8LOUTAnalog OutputLeft channel audio output
9GNDPowerAudio ground reference
10ANTAnalog InputFM Antenna connection (connect a 75 cm wire antenna)

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply VoltageVCCV_{CC}2.73.33.6VDC
Active Supply CurrentICCI_{CC}2025mAVCC=3.3 VV_{CC} = 3.3\text{ V}, volume max
Power-Down CurrentIpdI_{pd}515µAShutdown mode
SensitivitySsensS_{sens}1.52.0µVS/N=26 dBS/N = 26\text{ dB}
Audio Output VoltageVaudioV_{audio}100150mV RMS32 Ω32\ \Omega load
Channel SeparationCSCS3035dBStereo separation
Signal-to-Noise RatioSNRSNR5560dBMeasured across 50–108 MHz

I2CI^2C Register Access Modes

The RDA5807M supports two distinct I2CI^2C communication modes:

  1. Direct Mode (0x11 Address): Allows reading and writing specific 16-bit registers (such as 0x02 for basic control, 0x03 for frequency channel tune, 0x05 for volume and bass boost).
  2. Sequential Mode (0x10 Address): Backward compatible with the legacy TEA5767 FM chip. Writes start at Register 0x02 and automatically increment.

Frequency Calculation (Channel Register 0x03)

Frequency (MHz)=Bottom_Freq+(CHAN×Channel_Space)\text{Frequency (MHz)} = \text{Bottom\_Freq} + \left( \text{CHAN} \times \text{Channel\_Space} \right)

For standard US/European tuning (Bottom_Freq=87.0 MHz\text{Bottom\_Freq} = 87.0\text{ MHz}, Space=100 kHz\text{Space} = 100\text{ kHz}):

CHAN=(Target_Freq_MHz87.0)×10\text{CHAN} = (\text{Target\_Freq\_MHz} - 87.0) \times 10

Wiring

RDA5807 PinArduino UnoESP32Notes
5 (VCC)3.3V3.3VDo not connect to 5V
3, 6, 9 (GND)GNDGNDShared system ground
1 (SDA)A4GPIO 21I2CI^2C Data
2 (SCL)A5GPIO 22I2CI^2C Clock
10 (ANT)75 cm Wire75 cm WireExtend 1/4 wavelength wire antenna
7, 8 (ROUT/LOUT)3.5mm Headphone Jack / PAM8403 Amp InputAudio output pins

Example (Arduino Radio Library)

cpp
#include <Wire.h>
#include <radio.h>
#include <RDA5807M.h>

#define FIX_BAND RADIO_BAND_FM
#define FIX_STATION 10150 // 101.5 MHz FM

RDA5807M radio;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  Serial.println("Initializing RDA5807M FM Radio...");
  
  if (!radio.initWire(Wire)) {
    Serial.println("RDA5807M not responding!");
    while(1);
  }

  radio.setBand(FIX_BAND);
  radio.setFrequency(FIX_STATION);
  radio.setVolume(10); // 0 to 15
  radio.setMono(false); // Enable Stereo
  radio.setBassBoost(true); // Enable Bass Boost

  Serial.print("Tuned to "); Serial.print(FIX_STATION / 100.0); Serial.println(" MHz FM");
}

void loop() {
  // Read RDS Radio Text if available
  char buffer[32];
  radio.formatFrequency(buffer, sizeof(buffer));
  delay(2000);
}

Common mistakes

  • Connecting VCC to 5V: The maximum supply rating is 3.6V. Supplying 5V destroys the chip.
  • Forgetting an antenna wire: Operating without an antenna wire on pin 10 results in heavy static noise and inability to lock onto FM stations. Connect a 75 cm75\text{ cm} (~30 inch) length of insulated copper wire.

Notes

  • RDA5807 vs TEA5767 vs SI4703: RDA5807 is cheaper, includes integrated RDS decoding, and directly drives 32 Ω32\ \Omega headphones without needing external op-amps.

Assets & downloads