Simple Wideband FM Radio


After I have developed many years ago a high-quality completely analog HF Receiver, I am now busy in thought with the construction of a hybrid-RX with analog front-end and digital signal processing. During preliminary studies for this project a direct conversion archtiture with passive current I/Q mixer was also a topic. At the same time a very cheap FM radio module (RRD-102 Ver 2.0 with a RDA5807M chip) flew to me from China. A toy, not a serious WBFM receiver, but somehow interesting. The RDA5807 chip should contain hybrid architecture, which I am interested in. The frequency range is specified with 50 - 115 MHz. On the internet you can find a lot of crap and no reliable information and the available RDA data sheets are incorrect and marked as "confidential". An old programmer's guide of the RDA5807SP is only available in Chinese language. Code examples for the RDA5807 can be found on the Internet - unfortunately often with incredibly bad code or code that only uses a fraction of the supposed possibilities of the chip. So it's a lot of fun to get this little thing working despite the information gaps. Whether this will succeed?

First considerations

As hardware such a FM radio needs beside the tuner module only a MCU for control and an AF amplifier. I will probably use my favorite MCU, the ATmega644. In addition a 128x64 LCD from the tinkering box and some buttons as well as a rotary encoder. A PSU must supply 5V for the MCU and a clean 3.3V for the RDA5807M. Because of the different operating voltages the I2C bus needs a level-translator. Depending on the AF amplifier further operating voltages might be necessary. If the receiver works well then can still think about a VHF preamplifier and filter and their switching. An AF amplifier could be designed as a small tube amplifier to spice things up a bit.
For simplicity BASCOM will be used as firmware. Programming will be difficult and exciting because of the fragmentary documentation of the RDA5807M. The first hurdle is the correct use of the I2C bus which is implemented in the RDA5807M. The chip handles a sequential read/write mode and a random access read/write mode as clearly stated in the Chinese description. Unfortunately, I am not proficient in the Chinese language. Fortunately however DeepL, the experiments can begin.

Go top top


First tests

Before I develop my own control, I use my AVR test environment to explore the peculiarities of the RDA5807M. I solder the RDA5807M breakout board on a another self developed board with the necessary peripherals. A first test (First Test Code) succeeds soon. The chip works in principle and can be addressed. The reception of a FM radio station works fine in stereo.
Further experiments (Second Test Code) result in a fully functional receiver of the european broadcast band (87 - 108 MHz). However, many parameters of the RDA5807M registers documented in the existing data sheet are completely unclear or simply wrongly documented or not designed for the hardware of the RDA5807M.

Many bits are marked as "reserved". Only the registers H00, H02 - H0F are listed in the datasheet of the RDA5807M. However, the Chinese programming guide of the RDA5807SP contains an initialization list for 53 (sic!) registers. In short, due to the poor documentation, many featuress are unclear.
My goal is nevertheless the use of the "RDA5807M expert mode" with the continuous tuning from 50 - 115 MHz in 1 kHz steps.

Go top top


RDA5807M expert mode

According to the data sheet, the RDA5807M covers a frequency range of 50 - 115 MHz. However, it is not easy to find a programming that continuously allows this big range without changing bands. After studying the datasheet very carefully, you can find hints for example as a footnote (page 9 in the datasheet). My experiments show that several registers are necessary to reach this "expert mode":

The calculation is done like this: freq_direct = (Frequency - 50000000) / 1000

The resolution of the PLL is 1 kHz and the frequency range is from 50 - 115.535 MHz. This numerical value is stored as usual as high and low byte in register H08. In principle, the described procedure works (Third Test Code). However, it is unclear whether further register parameters have to be adjusted for optimal operation. I could not find further information in any datasheet or programming guide.

Go top top


Exploring the RSSI function of the RDA5807

As with most functions, more detailed information on the RDA5807M RSSI is missing. However, RSSI (Received Signal Strength Indicator) is an interesting feature for me, so I experimented with it. Basically the RSSI value can be read out (Fourth Test Code) without any problems if you wait at least 600 ms after a tuning (frequency change). After that a stable RSSI value is obtained.
With a piece of wire (85 cm) broadcust stations with about 70 RSSI units are receivable. A better adjustment of the antenna input (more about this later) can increase this value by about 10 units. With this, it is also possible to work in stereo without any problems.
Since I don't have a calibrated FM measuring transmitter, I can't do a conversion to dBm or dBuV at this time. RSSI as relative reception field strength is a ratio value. Therefore, the value must be interpreted depending on the respective application. There are different definitions, whereby a higher value corresponds to better reception. The RDA5805M encodes the received field strength in the range of 0 - 127 units maximum.
Despite the quite acceptable reception sensitivity, the chip is probably only good as an FM broadcust receiver useful. This especially because the DSP is in no way parameterizable (probably only in the non-documented secret registers). Next I will experiment with the RDS capabilities of the RDA5807M.

To be continued ...

Go top top


Construction site

This project is currently being implemented. Bit by bit the further components are described and presented. Please be patient.


Photos und Schematics

Breakout Board
Modul Pins
RDA5807 Schematic
RDA5807M Pins
MCU Schematic
Testboard Schema
Testboard PCB
SFMR Testboard
Go top top



RDA5807M First Test
RDA5807M Second Test
RDA5807M Third Test
RDA5807M Fourth Test

Go top top



The links are currently still unsorted. Therefore, they have not yet been coded in HTML, but have been moved to a TXT file for the time being. Have fun browsing. Maybe you will find one or the other interesting document.

Go top top