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 little usable 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.
  RegH02 Bit 2 New_Method
  RegH03 Bit 5 Direct Mode
  RegH04 Bit 6 I2S_Enable
  RegH04 Bit 0-5 GPIO1-3
  RegH05 Bit 6-7 LNA_PORT_SEL
  RegH06 Bit 13-14 Open_Mode
  RegH06 Bit 4-7 I2S_SW_CNT
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.

Go top top

RDA5807M Expert Mode

According to the data sheet, the RDA5807M covers a frequency range of 50 - 115 MHz. One of my goals is to use this "RDA5807M expert mode" with the continuous tuning from 50 - 115 MHz in 1 kHz steps. 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":

  In register H03, BAND [3:2] must be set to b11
  In register H07, 65M_50M MODE [9] must be set to b0 (50-76 MHz)
  In register H07, FREQ_MODE [0] must be set to b1
  In register H08, the frequency must be written as freq_direct [0:15]

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 RDA5807M

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 broadcast receiver realy useful. This especially because the DSP is in no way parameterizable (probably only in the non-documented secret registers).

Go top top

Exploring the RDS functionality of the RDA5807M

There is no official information about the RDS functionality of the RDA5807M. The documented registers only allow a few settings and some RDS information is missing from the readable registers. But the biggest shortcoming is the unknown correct flow control with RDSready, RDSsync, FIFO and clear FIFO. To find out a little more some tests were done.
However, the result of the tests is very modest. Up to about RSSI < 65, the RDS functionality is not given at all or only to a limited extent. The error frequency increases with decreasing RSSI. Well, this is not surprising. When "FIFO enable" is activated, the RDSR and RDSS flags are set rapidly at the same time. With "FIFO disable" and RSSI > 65 the "Sync flag" is set first and then the "Ready flag". The ready flag then changes periodically between 1 and 0. If the RSSI is weak, there is no difference between FIFO disable or enable. In BLERA/BLERB the error rate is written and RDSR/RDSS are not set.
How the intended sequence of FIFO and FIFO clear, as well as RDSsync should be controlled correctly is and remains mysterious due to the missing documentation and could not be determined.
Despite the missing information, however, RDS data could be read out without problems in test (Fifth Test Code).

Go top top

Exploring the Seek functionality of the RDA5807M

In the old Chinese programming documents from 2008 and 2010 for the RDA5807P and RDA5807SP there are three different possibilities of the Seek function. With the register contents of the RDA5807M these agree only conditionally over, so that I accomplished also for a band scan tests.
The European band scan works with the (Sixth Test Code). Nevertheless, some register values are unclear again (for example, STCIEN, SF and FM_READY are not required). Obviously, there would also be other possibilities of a Seek, but the information is simply missing.

Go top top

Concluding remarks on the RDA5807M firmware test series

The RDA5807M is a very inexpensive and interesting toy. For serious applications of the RDA5807M, however in my opinion, current and error-free programming manuals and data sheets are absolutely necessary. However, I did not find these over the Internet even after a long search. This is really a pity. Probably it is better for a radio tinkerer to use the well documented Si4703 chip instead of the RDA5807M. But with my tester knowledge I now dare to build a simple FM radio with the RDA5807M. An complete code for the RDA5807M can be written and the final hardware of the FM receiver can be designed.

Go top top

MCU ATmega644 Control Board

The next target is now the adaptation of the MCU with the MCU with the necessary periphery to the requirements of the receiver. An ATmega644 clocked with 18.3420 MHz is used as MCU. A PCB is already available from other projects. A graphic display with 128x64 pixels like it was used before should be sufficient. In addition a keypad with 5 keys and a rotary encoder to detect the direction of rotation and with another key. A buzzer is used to generate short beeps and 3 LEDs indicate certain states. All the components are mounted on a base plate which is fitted into the wooden front of the receiver. For the test of this control board a simple (test firmware) was written. Future requirements such as a combined FM / AM receiver (for example with Si4735) were also taken into account.

Go top top

Audio Amplifier

And now a little bit of hardware: It's about the audio amplifier for two channels. A solid state chip would be easy, but it's fun to mix old and new, that means a tube (valve) amplifier (see test schematic) has to be developed.
First I thought about low voltage tubes, but then the composite tube ECL86 came into the shortlist. Since the ECL86 is already outrageously expensive, I used the inexpensive PCL86, which differs only in the heating data (300 mA series heater). The PCL86 tube (see photo) consists of an end pentode and a triode as driver in a glass bulb. In technical jargon, I connected the tube as a single ended (SE) amplifier. The power is about 3 W sinus. As audio transformer I did not use an expensive high quality transformer, but inexpensive offers (H1760C). The power supply is not stabilized, but the heater is a DC heater.
Of course, this is not a high-end hi-fi amplifier. On the other hand, the amplifier and the corresponding power supply were carefully planned. The circuit is by no means an unreflected replica, but calculated with regard to the data sheets of the tube and the available components. The first test (see photo) already showed a good sound and for a radio more than enough volume. The negative feedback was tuned for good linearization and for the type of distortions and still sufficient volume. The amplifier is - not least because of the PSU circuit - even during the wild test setup absolutely quiet and no hum can be heard. A further optimization of some components may bring a tad better distortions H2, H3 distribution.
After the calculations, tests and experiments, a PCB was developed and two channels were built. Really pretty the little stereo amplifier (see photo from one channel).
For possible rebuilders of the amplifier and tube beginners still the obligatory warning about the high operating voltage in the range of 300V (!). This can be deadly and requires great care!

Go top top

Wooden Radio Case

This time I decided to really live out the tinkering and make a wooden case from scratch. The radio should also include small speaker boxes. I have enough wooden boards in stock and the simple wood processing is not foreign to me. Wood is a wonderful material, even if some will be surprised to use a huge case for an electronic project with a microprocessor and a tiny radio chip. The photos below show the construction of the wooden case.

Go top top

Radio Input Circuit

The next target in radio building is now the RF input circuit of the RDA5807M. The datasheet does not reveal any input impedance...

Go top top


Photos und Schematics

Breakout Board
Modul Pins
RDA5807 Schematic
RDA5807M Pins
SFMR Schema 1
RDA5807M Testboard
Control Board Part 1
Control Board Part 2
Control Board 1
Control Board 2
PCL86 PSU Schema
PSU HT Filter
PLF Schema
Power Line Filter
PSU Test
Test Amp Schema
Amplifier Test 1
Amplifier Test 2
Amp PCB (1 channel)
PCB Cu-side
PCB Components-side
Amp Components
PCL86 Amp
PCL86 tube
Wooden Case
Wooden Case
Wooden Case
Wooden Case
PSU Modul
PSU and Amplifier
Control Board
Go top top



The published BASCOM codes for the different tests can probably be helpful for a skilled hobbyist to understand the RDA5807M better. It should not be a problem to follow the code. However, the test code is no help for an inexperienced user who has never dealt with the RDA5807M registers or the I2C interface.


RDA5807M First Test
RDA5807M Second Test
RDA5807M Third Test
RDA5807M Fourth Test
RDA5807M Fifth Test
RDA5807M Sixth Test
Control Board Test

Go top top



Construction site

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



The links are currently not really fully processed. Nevertheless, a lot of interesting information is already available. Have fun browsing. Maybe you will find one or the other interesting document.
Further literature references to the audio amplifier with tubes can be found here here.

Go top top