SI473X Library for Arduino

View on GitHub

PU2CLR SI4735 Library for Arduino

Se você estiver entendendo este texto, talvez queira ler este documento em Português


SI4735 Prototypes This document is aimed at the Arduino developers, radio experimenters, hobbyists and anyone interested in building a receiver based on the Si473X IC family from Silicon Labs. This project is about an Arduino library for the SI473X BROADCAST AM, SSB and FM/RDS RADIO RECEIVERS. Actually, AM and SSB modes from 150kHz to 30MHz; and FM mode from 64 to 108 MHz.

This library is intended to provide an easier interface for controlling the SI47XX (including the boards “PL102BA-S V:2.1 10628” and “NE928-10A V:01” based on SI4730) by using Arduino platform. It also has support to the SSB mode on SI4735-D60 and SI4732-A10 devices. The communication protocol used by this library is the I²C.

This library was built based on “AN332 Si47XX PROGRAMMING GUIDE REV 1.0” and AN332 REV 0.8 UNIVERSAL PROGRAMMING GUIDE AMENDMENT FOR SI4735-D60/SI4732-A10 SSB AND NBFM PATCHES. It also can be used on all members of the SI473X family respecting, of course, the features available in each IC version. Please, follow the contents below to get the most out of this document.

This library can be freely distributed using the MIT Free Software model.

Copyright (c) 2019 Ricardo Lima Caratti.



  1. SI4735 Library construction history
  2. Labrary Features
  3. License Copyright
  4. Library Installation
  5. Other Arduino Libraries Developed by the Author
  6. Groups and Forums
  7. Thanks
  8. Your support is important
  9. About the SI4732 and SI4735
  10. Terminology
  11. Documentation
  12. Hardware Requirements and Setup
  14. Most Frequent Problems
  15. Boards where this library has been successfully tested
  16. Photos (Tools and Accessories)
  17. References
  18. Examples
  19. Third Party Projects
  20. Videos
  21. Commercial Receivers based on Si47XX Family


SI4735 Library construction history

I started my work on building an Arduino library for SI375 in early November 2019. The initial idea was to build a receiver by using an Arduino board, few components and the SI4735 device from Silicon Labs. Checking some videos on Youtube, I realized that the receiver besed on Si4735-D60 could go far beyond the initial proposal, including listening to amateur radio and citizens band stations on SSB mode. Via forums and websites, I also realized that there was a great demand for experimenters who would like to see the SI4735 device working on SSB mode. So, instead of developing a simple receiver based on the SI4735, I decided to develop a library for Arduino platform that would provide full support to the SI4735 and all SI473X device family as well.

With this library, more than 30 examples were developed using various display types. These examples can assist the experimenter in building their own receiver.

Judging by the groups created around the SI47XX devices, I estimate that this library is currently being used by hundreds of experimenters. If you are an experimenter or a radio enthusiast and want to try the SI473X devices, then this library is for you.

The following video is a little joke that shows the trajectory of the construction of this library. “PU2CLR SI4735 Arduino Library. IT IS OPEN SOURCE IT IS FREE. IT IS FOR YOU”.

A brief history of the PU2CLR SI4735 Arduino Library construction

Go to contents

SI4735 Arduino Library Features

This library uses the I²C communication protocol and implements most of the functions offered by Si47XX (BROADCAST AM / FM / SW / LW RADIO RECEIVER) IC family from Silicon Labs. This library also has primitive functions that make it easier for you to implement commands that may not have been implemented yet. See setProperty, getProperty sendCommand, getCommandResponse and getStatusResponse functions and also How to customize PU2CLR Arduino Library. It is worth noting, however, that this library is constantly improving. Check the API documentation before implementing a new function. It is likely that your demand is already implemented. See the API documentation for this library. The main features of this library are listed below.

  1. Open Source. It is free. You can use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software. See MIT License to know more.
  3. C++ Language and Object-oriented programming. You can easily extend the SI4735 class by adding more functionalities. See Customizing PU2CLR Arduino Library;
  4. Available on Arduino IDE (via Manage Libraries). Easy to install and use. See Library Installation;
  5. Cross-platform. You can compile and run this library on most of board available on Arduino IDE (Examples: ATtiny85, boards based on ATmega328 and ATmega-32u4, ATmega2560, ARM Cortex, STM32, Arduino DUE, ESP32 and more). See Boards where this library has been successfully tested;
  6. Simplifies projects based on SI4735;
  7. I²C communication protocol and Automatic I²C bus address detection;
  8. More than 120 functions implemented. You can customize almost every feature available on Si47XX family;
  9. More than 30 examples to guide the user;
  10. RDS support;
  11. SSB (Single Side Band) patch support;
  12. Clock reference selection (crystal or external clock reference);
  13. FM Receive de-emphasis to 50 or 75 μs selection.

Go to contents

Groups and Forums

There is a Facebook group called Si47XX for Radio Experimenters where the purpose is exchanging experiences with projects based on Silicon Labs SI47XX IC family. You will be welcome to the group Si47XX for Radio Experimenters.

You can also be a member of SI47XX for hobbyists

Follow a project using this library on

MIT License

Copyright (c) 2019 Ricardo Lima Caratti

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.


Go to contents

Library Installation

You can install this library on your Arduino environment using different methods. The best ways to do that are described below.

Installing via Arduino IDE

This is the easiest method to install this library.

The image below shows the Arduino IDE Manage Libraries interface.

Installing from Arduino IDE 01

The image below shows the PU2CLR Si4735 Library finding process.

Installing from Arduino IDE 02

The video below shows how to install the PU2CLR Arduino Library on your Arduino IDE.

Installing via this repository

Installing from this repository

Installing from this repository

First, you have to download this library in zip format. After, unzip the file in your Arduino Library folder.

With that approach, you will have the most current version of the library. However, it may not be the most stable version. This is because the current version is always in development. Prefer releases. Do you need some old version (release) of this library? If yes, check here.

Go to contents

Other Arduino Libraries Developed by the Author

More Arduino Projects developed by author


Go to contents

Your support is important.

If you would like to support this library development, consider joining this project via Github. Alternatively, make suggestions on new features and report errors if you find them. Thank you!

About the SI4732 and SI4735

The SI4732-A10 and SI4735-D60 are DSP radio receivers IC from Silcon Labs. They have great performance on AM, SSB (LW/MW/SW) and FM (VHF) from 64 to 108 MHz. It is important to note that the engineers and programmers at Silicon Labs did an excellent job by implementing all the internal resources in this IC family. This library implements just the interface that allows you to use the SI473X resources with Arduino based board controller. The SI473X can be programmed by sending commands and getting responses. You can control it via a microcontroller like Arduino using I2C communication protocol. To make the SI473X perform an action, the microcontroller has to send a set of bytes (command and arguments) that the device interprets and executes the given command.

Functional Block Diagram

The image below shows the SI473X-D60 block diagram. It was extracted from Silicon Labs Si4730/31/34/35-D60 / BROADCAST AM/FM/SW/LW RADIO RECEIVER (page 21). Note that the author of this Library highlights in red the pin operating voltages that can be connected to the Arduino. Be aware of the operating voltage of the Arduino pins you will use in your project. Preferably use an Arduino with 3.3V operating voltage. If you are not using a 3.3V version of Arduino, you must use a kind of 5V to 3.3V converter on RST, SCLK, SDIO and SEN (depending on your project).

SI473x Block Diagram

According to the Si47XX PROGRAMMING GUIDE/AN332, the Si4732-A10 has the same firmware FMRX component and AM_SW_LW RX component as that of Si4735-D60. It is considered as the most recent revision as D60. So, All descriptions related to the SI4735-D60 also apply to Si4732-A10. Including SSB patch support. See the Si4732-A10 block diagram below.

SI4732-A10 Block Diagram

SI4732-A10 anddescriptionsI²C bus address

While the Si4735 device provides the 0x11 I²C bus address when the SEN pin is connected to the ground, the SI4732-A10 provides the same address when the SEN pin is connected to the +VCC. Also, this library provides the function getDeviceI2CAddress to detect the I²C bus address automatically. This way, you don’t need to worry about this setup if you use this function. See getDeviceI2CAddress().

The main Si4735-D60 and Si4732-A10 features

Go to contents


Term Description
API Application Programming Interface (API). In this context, it is an interface that you can use to simplify the implementation and maintenance of your software (Arduino sketch). All API documentation about this library can be found on
Arduino Libraries Libraries are files written in C or C++ (.c, .cpp) which provide your sketches with extra functionality. The SI4735 Library provides extra functionalities to make easier the Arduino deal with Si4735 device
DFS I²S - digital frame synchronization input
DIN I²S - digital data input
DCLK I²S - digital bit synchronization input clock
IDE Integrated Development Environment
I²C I²C - Inter-Integrated Circuit
I²S Serial bus interface used for connecting digital audio devices
Sketch Name that Arduino environment uses for a program
Interrupt In this context, it is a Arduino Resource. Allows important tasks to be performed regardless of the flow of your program
C++ A object-oriented programming (OOP) language. It is a superset of the C language with an additional concept of “classes.”
programming guide In this context it refers to Si47XX PROGRAMMING GUIDE (REV 1.0)
LNA Low Noise Amplifier
POC Proof of Concept
SEN Serial enable pin, active low; used as device select in 3-wire and SPI operation and address selection in 2-wire operation
CTS Clear to send
STC Seek/Tune Complete
RESP Response byte (n = 1 to 15)
RESPONSEn Response register (16-bit) in 3-Wire mode (n = 1 to 8)
RST Also RSTb—Reset pin, active low
RCLK External reference clock
SSB Single Side Band
Attack attack-time delay - the time needed for a receiver to respond to an incoming signal
SDIO Serial data in/data out pin
SCLK Serial clock pin
Soft Mute Resource used to attenuate the audiooutputs and minimize audible noise in very weak signalconditions
Firmware Upgrades The Si473x-D60 contains on-chip program RAM to accommodate minor changes to the firmware

Go to contents


Video about the API Documentation

This library has tow documentation sources:

Doxygen is a tools that can generate documentation from source code. This tools help the development team to keep the documentation updated.

If you prefer, you can also read the documentation directly from the SI4735.cpp and SI4735.h. These files are also well documented.

Main functions

This library has more than 120 functions. The table below shows the mains functions used in a regular receiver. Full details on the functions shown below can be read on

Method / Function Description
setup Use this function to start the device up with the parameters shown below.
getStatus Used to get the current status of the Si4735.
getCurrentRSSI Get the current receive signal strength (0–127 dBμV).
getCurrentSNR Gets the current SNR metric (0–127 dB).
getFrequency Gets the current frequency of the Si4735.
frequencyUp Increments the current frequency on current band/function by using the current step.
frequencyDown Decrements the current frequency on current band/function by using the current step.
setFrequencyStep Sets the current step value.
setVolume Sets volume level (0 to 63).
setFM Sets the radio to FM function.
isCurrentTuneFM Returns true if the current function is FM (FM_TUNE_FREQ).
getCurrentPilot Checks the current pilot. Indicates stereo pilot presence.
setAM Sets the radio to AM function. It means: LW MW and SW.
setAmSoftMuteMaxAttenuation Sets the Am Soft Mute Max Attenuation.
setAutomaticGainControl Automatic Gain Control setup.
getAutomaticGainControl Queries Automatic Gain Control STATUS.
setBandwidth Selects the bandwidth of the channel filter for AM reception.
isAgcEnabled Checks if the AGC is enabled (returns true if enabled).
setRdsConfig Sets RDS property.
getRdsStatus Gets the RDS status. Store the status in currentRdsStatus member. COMMAND FM_RDS_STATUS.
getRdsReceived Get the Rds Received FIFO.
getRdsSync Get the Rds Sync. Returns true if RDS currently synchronized.
getRdsSyncFound Get the Rds Sync Found. Returns true if found RDS synchronization.
getRdsText2A Gets the Text processed for the 2A group.
getRdsText2B Gets the Text processed for the 2B group.
getRdsText0A Gets the station name and other messages.
getRdsTime Gets the RDS time and date when the Group type is 4.
reset Reset the SI473X.
queryLibraryId Queries the library information of the Si47XX device.
patchPowerUp This method can be used to prepare the device to apply SSBRX patch.
downloadPatch Transfers the content of a SSB patch stored in a array of bytes to the SI4735 device.
downloadPatchFromEeprom Transfers the content of a SSB patch stored in an eeprom to the SI4735 device.
setSSBConfig Sets the SSB receiver mode.
setSSB Tunes the SSB (LSB or USB) receiver to a frequency between 520 and 30 MHz in 1 kHz steps.
setSSBAutomaticVolumeControl Sets SSB Automatic Volume Control (AVC) for SSB mode.
setSSBBfo Sets the SSB Beat Frequency Offset (BFO).
setSSBAudioBandwidth SSB Audio Bandwidth for SSB mode.
setSBBSidebandCutoffFilter Sets SBB Sideband Cutoff Filter for band pass and low pass filters.
setTuneFrequencyAntennaCapacitor Only FM. Freeze Metrics During Alternate Frequency Jump.
setI2CFastModeCustom Sets the I2C bus to a given value.
setI2CStandardMode Sets I2C bus to 100kHz.
setAudioMuteMcuPin This function sets the mcu digital pin you want to use to control the external audio mute circuit.

Go to contents

Defined Data Types and Structures

The Si47XX family works with many internal data that can be represented by data structure or defined data type in C/C++. These C/C++ resources have been used widely here. This approach made the library easier to build and maintain. Each data structure created here has its reference (name of the document and page on which it was based). In other words, to make the SI47XX device easier to deal with, some defined data types were created to handle byte and bits to process commands, properties and responses. The goal of this approach is separating data from code.

All data types defined in Si4735 Arduino Library are explained here

Public methods

This library was developed using the C++ language and the Object-oriented Programming approach. Methods are functions that belong to the class, in this case SI4735 class. Click here to go to API docummentation.

All methods defined in Si4735 class are explained here. The list below refer to the method groups implemented by the Si4735 class.

Si47XX device setup and startup

Methods of this group are useful to configure the way that the Si47XX devices have to be initiate.

Firmware Information

Allows to query the part number, chip revision, firmware revision, patch revision and component revision numbers.

Current Status

The Si4735 class has a set of methods to query the current frequency, RSSI, SNR, multipath, and the antenna tuning capacitance value (0-191).

Current AGC Status

Methods to query AGC status. Returns whether the AGC is enabled or disabled and it returns the gain index.

Si4735 filters configuration

The SI4735 class has a set of methods to setup filters on AM and SSB mode.


Methods to setup the audio mode (Digital or Analog), volume, mute etc.


This library implements some RDS features of the SI4735. All function to deal with RDS are documented here. Below you have some videos showing the RDS functionalities implemented by the PU2CLR Si4735 Arduino Library.

RDS on Arduino DUE with Touch Screen

RDS on Arduino Pro Mini 3.3V (8MHz)

See RDS example implementations for more details.

SI4735 Patch Support for Single Side Band

The SI4735 class implements a set of methods to apply patches and deal with SSB mode. All API documentation about pathces can be seen here.

The SSB patches used in some examples of this library were tested only on SI4735-D60 and SI4732-A10 devices. The updates used in that examples are unlikely to work on other SI47XX devices.

First of all, it is important to say that the SSB patch content is not part of this library. The patches used with test purpose here were made available by Mr. Vadim Afonkin on his Dropbox repository. Also, on Silcon Labs website, support and community, there is a topic called “__SSB and/or ASK/FSK/nPSK demodulation on Si radio chips”. If you follow that topic, you will see a post from a member called “DASM” making available a link to a patch for the SI4735-D60 and SI4732-A10. The structure of this file is a bit different if compared with Vadim’s files amrx_6_0_1_ssbrx_patch_full_0x9D29.csg and amrx_6_0_1_ssbrx_patch_init_0xA902.csg. However, they have the same idea and can be easily adjusted for patching. If you have some experience with C, all you have to do is following the recommendations of the SI47XX PROGRAMMING GUIDE AN332; page 219.


What does SSB patch means?

In this context, a patch is a piece of software used to change the behavior of the SI4735-D60 and SI4732-A10 device.

There is little information available about patching the SI4735-D60 and SI4732-A10. The following information is the understanding of the author of this project and it is not necessarily correct.

A patch is executed internally (run by internal MCU) of the device. Usually, patches are used to fixes bugs or add improvements and new features of the firmware installed in the internal ROM of the device. Patches to the SI473X are distributed in binary form and have to be transferred to the internal RAM of the device by the host MCU (in this case Arduino boards). Since the RAM is volatile memory, the patch stored into the device gets lost when you turn the system off. Consequently, the content of the patch has to be transferred again to the device each time after turn the system on or reset the device.

I would like to thank Mr Vadim Afonkin for making available the SSBRX patches for SI4735-D60 on his Dropbox repository. On this repository you have two files, amrx_6_0_1_ssbrx_patch_full_0x9D29.csg and amrx_6_0_1_ssbrx_patch_init_0xA902.csg. It is important to know that the patch content of the original files is constant hexadecimal representation used by the language C/C++. Actally, the original files are in ASCII format (not in binary format). If you are not using C/C++ or if you want to load the files directly to the SI4735-D60 or SI4732-A10, you must convert the values to numeric value of the hexadecimal constants.

For example:
Hexadecimal C/C++ constant Binary representation Decimal representation
0x15 00010101 21
0x01 00000001 1
0xFF 11111111 255

ATTENTION: The author of this project does not guarantee that procedures shown here will work in your development environment. Given this, it is at your own risk to continue with the procedures suggested here. This library works with the I²C communication protocol and it is designed to apply a SSB extension PATCH to CI SI4735-D60 or SI4732-A10. Once again, the author disclaims any liability for any damage this procedure may cause to your SI4735 or other devices that you are using.

All methods/functions to deal with SSB on Si4735-D60 can be seen here.

This library implements many SSB examples. See the table below.

SSB sketch SSB sketch SSB sketch

Video - SI4735 Arduino Library and SSB/CW support

See SSB example implementations here.

Go to contents

EEPROM support

Depending on your MCU memory size, to use SSB mode may not be possible due to the large amount of memory required by the patch. To solve this problem this library implemented the function downloadPatchFromEeprom. This function reads the patch content from an external EEPROM and transfer it to the SI4732-A10 or SI4735-D60 devices. To run this function you must have a external I2C EEPROM device well configured with your MCU and the Si4732/35 device on I2C bus. Also, the EEPROM must have the patch content generated by the sketch SI47XX_09_SAVE_SSB_PATCH_EEPROM stored in it. See folder TOOLS.

The example SI4735_06_SSB_EEPROM shows this functionality on an Arduino Pro Mini.

The example SI47XX_03_SSB_Tiny4kOLED implements this functionality on an ATtiny85.

To store the SSB patch content into an EEPROM, See sketch SI47XX_09_SAVE_SSB_PATCH_EEPROM.

Attention: The full ssb patch needs about 16KB on eeprom. All data that you have stored before into your eeprom device will be lost after the execution of the sketch SI47XX_09_SAVE_SSB_PATCH_EEPROM.

The EEPROM device used for testing was the AT24C256 Serial I2C Interface

Watch the video: ATtiny85 working with SI4735-D60 and SSB

Digital Audio support

First of all, it is important to say that passive Crystal and digital audio mode cannot be used at the same time on SI47XX devices. The document Si47XX ANTENNA, SCHEMATIC, LAYOUT, AND DESIGN GUIDELINES; AN383; rev 0.8; page 6; you will find the following note: “Crystal and digital audio mode cannot be used at the same time”. So, for Digital Audio, you have to remove the crystal, and capacitors connected to the crystal from the circuit.

This library supports the external clock reference and has implemented the digital audio functions. You can configure digital audio and external clock reference by using the functions: setup, radioPowerUp, digitalOutputFormat, digitalOutputSampleRate, setRefClock and setRefClockPrescaler.

See the API Documentation for more details.

Customizing PU2CLR Arduino Library

Maybe you need some Si47XX device functions that the PU2CLR SI4735 Arduino Library has not implemented so far. Also, you may want to change some existent function behaviors. This topic describes some approaches to add new SI473X features to your application.

Please, check the API documentation before implementing something you think is new. It is possible that what you want has already been implemented.

Primitive Functions

This library has primitive functions that make it easier for you to implement commands that may not have been implemented yet. The methods setProperty, getProperty sendCommand, getCommandResponse and getStatusResponse can be used to setup the SI473X devices directely. They can also be useful to check some features of the SI473X devices. To use those methods you have to be guided by the “AN332 Si47XX PROGRAMMING GUIDE REV 1.0” and AN332 REV 0.8 UNIVERSAL PROGRAMMING GUIDE AMENDMENT FOR SI4735-D60 SSB AND NBFM PATCHES Silicon Labs documentation. If you are familiar with bit operators in C / C ++, you will have no problem in using the above functions.

The example below configures the GPIO by sending the 0x81 (GPIO_SET) command(AN332 Si47XX Programming guide page 195).

SI4735 rx;
uint8_t args[] = {0b00001010} // will set the GPIO 1 and 3 to high
uint8_t response[0]



Extending the SI4735 class

The best way to customize the PU2CLR SI4735 Arduino Library for your needs is extending the current version of the library by using C++ OOP approaching. For example:

#include <SI4735.h>
class MyCustomSI4735 : public SI4735 { // extending the original class SI4735
    // New functions / methods
    int methodA() {    // some SI47XX command that PU2CLR SI4735 Arduino Library does not implement
      return 0;

    int methodB() {    // another SI47XX command that PU2CLR SI4735 Arduino Library does not implement
      return 1;

    // Overwriting existent methods
    void setTuneFrequencyAntennaCapacitor(uint16_t capacitor) { 
      // Here, your setTuneFrequencyAntennaCapacitor code that will replace the original code 
      // Tip: currentFrequencyParams is a protected member of SI4735 class and can be referred in your code
      currentFrequencyParams.arg.ANTCAPH = 0;         // it is just an example 
      currentFrequencyParams.arg.ANTCAPL = capacitor; // it is just an example 

    void reset() {
      /// your reset code that will replace the original reset code 
      pinMode(resetPin, OUTPUT);
      digitalWrite(resetPin, LOW);
      digitalWrite(resetPin, HIGH);

MyCustomSI4735 radio; // the instance of your custom class based on SI4735 class

void setup()
  while (!Serial);
  Serial.println("Customizing Si4735 class example.");
  radio.setup(12, 0); // Arduino pin 12 as reset and FM mode (0)
  radio.setFM(8400, 10800, 10390, 10); 
  // Setting the tune capacitor with your code instead Si4735 library code.
  // Calling new functions implemented by you.

void loop() {
  // Your code with your custom SI4734 library.

If you use that approach, all you have to do is download the current version of PU2CLR SI4735 Arduino Library. Instead of using PU2CLR SI4735 Arduino Library class directly, you can use your own class that extends the original class. This way, you always have the current version of the library customized for your needs. So, no extra work will be needed when you update the PU2CLR SI4735 Arduino Library. In other words, your custom code will be always synchronized with the PU2CLR SI4735 Arduino Library code.

Please, check the API documentation before implementing something you think is new. It is possible that what you want has already been implemented.

See also:

Go to contents

Hardware Requirements and Setup

This library has been written for the Arduino platform and has been successfully tested on many boards. See Boards where this library has been successfully tested

Arduino 5V and Si4735

Board InterrupT (IRQ) Pins I²C / TWI pins successfully tested Voltage converter
(Nano, Uno or Mini 5V)
D2 and D3 A4 (SDA/SDIO), A5 (SCL/SCLK) Yes Yes
(Pro Mini 3.3 / 8Mhz)
D2 and D3 A4 (SDA/SDIO), A5 (SCL/SCLK) Yes No
Mega 2560 2, 3, 18, 19, 20 and 21 20 (SDA/SDIO), 21 (SCL/SCLK) Yes Yes
(Micro, Leonardo or Yum)
0, 1, 2, 3 and 7 2 (SDA/SDIO), 3 (SCL/SCLK) Yes Yes
Zero all digital pins except pin 4 D8 (SDA/SDIO) and D9 (SCL/SCLK) Not tested No
Due all digital pins 20 (SDA/SDIO), 21 (SCL/SCLK) Yes No
101 all digital pins.
Only pins 2, 5, 7, 8, 10, 11, 12, 13 work with CHANGE
- Not tested No
ESPRESSIF ESP32 all GPIO pins Most pins (usually 21 and 22) Yes No
STM32F103 PA0, PA1 PB6 (SCL) and PB7(SDA) Yes No


The main purpose of this prototype is to test the Si4735 Arduino Library. It does not intend to be a real radio or an exigent listener. However, it is possible to start with it and then, if you wish, you can include some devices to the circuit to improve, for example, its sensibility beyond other desired features.

The image below shows a version of Silicon Labs SSOP Typical Application Schematic connect to the host MCU (Arduino Pro Mini 3.3V). Pay attention to the Si4735-D60 SEN pin (16). When the SEN pin is connected to the ground, the I²C bus address is 0x11. When the SEN pin is connected to +3.3V, the I²C bus address is 0x63. By default, the “Si4735 Arduino Library” uses the 0x11 I²C bus address (SEN pin connected to GND). If you want to use the address 0x63 (SEN connected on +3.3V), see the functions (methods) getDeviceI2CAddress, setDeviceI2CAddress and setDeviceOtherI2CAddress.

Basic Schematic Eagle version

Please, check the folder extras/schematic/. There, you will find other schematics with OLED, LCD, TFT, buttons and encoders setup. Also, check the comments at the beginning of each sketch example. You will find the SI473X, button, encoder, display and Arduino settings.

The picture below shows the SI4735-D60/SI4730-D60 pinout (SSOP)

Si4735-D60 pinout

The picture below shows the SI4732-A10 pinout (16L SOIC Package)

Si4732-A10 pinout

The picture below shows the SI473X pinout (QFN)

Si4735-D60 pinout

The image bellow shows the Silicon Labs SSOP Typical Application Schematic.

Silicon Labs Schematic


The table below shows the component parts used to build the radio prototype based on Si4735 and used the Silicon Labs SSOP Typical Application Schematic as main source. However, some parts were included by the author of this project.

Part Description
C1 22nF Monolithic Multilayer Chip Ceramic non polarized capacitor (Place it close to VA pin)
C2 1nF Monolithic Multilayer Chip Ceramic non polarized capacitor
C3 470nF Monolithic Multilayer Chip Ceramic non polarized capacitor
C4 100nF Monolithic Multilayer Chip Ceramic non polarized capacitor (Place it close to VD pin)
C5 and C6 22pF (Crystal load capacitors)
C7 and C8 *1 4.7uF Monolithic Multilayer Chip Ceramic non polarized capacitor
R3 2.2K
(R4 and R5) *2 2.2K to 10K (pull-up resistors)
L1 Ferrite loop stick (about 500 μH)
X1 32.768 kHz crystal
SI4735 digital CMOS AM(LW, MW and SW)/FM radio receiver IC

Notes from Silicon Labs Broadcast AM/FM/SW/LW Radio Receiver documentation (page 12):

Go to contents

Tips to build

Go to contents

Most Frequent Problems

The system does not start.

Depending on your setup, the system can hang at the beginning.

It has been observed in several tests. Some tips:

  1. Avoid using the computer connected to the mains during testing. The electrical grid can disturb the communication between the Arduino based board and the SI47XX device;
  2. The RESET pin is not configured properly. Check the connection of the SI47XX pin 15 (RST) and the Arduino based board;
  3. Try to use a 22K pull-up on Arduino Board pin used for reseting (RESET PIN). It may be needed if you are using some Arduino based boards like (Atmega32, Atmega128 etc)
  4. If the SI47XX pin 16 (SEN) is grounded, the I2C bus address must be 0x11, otherwise it must be 0x63 (the default I2C bus address is 0x11). Preferably, keep this pin grounded;
  5. Check if the pins 17 (SCLK / SCL) and 18 (SDIO / SDA) of the SI47XX device are correctly connected to the Arduino board pins;
  6. Check the pull-up resistors connected to the pins 17 (SCLK / SCL) and 18 (SDIO / SDA) of the SI47XX device;
  7. Check the voltage on SI47XX pin 15 (RST). It should be 3.3V. All digital pins of your Arduino must have 3.3v when in HIGH condition. If it is greater than 3.3V, probably you are using an 5V board;
  8. If you are using the board Arduino Pro Mini 3.3V (8MHz), be sure you selected the correct board on Arduino IDE Tools menu, Processor: “Atmega328P (3.3V, 8MHz)”. By default, the Arduino IDE uses the 5V processor version;
  9. Do not try to power an ATmega328 Arduino Board designed to work with 5V and 16MHz with a 3.3V supply. That configuration will make your system unstable. See ATmega328P Datasheet;
  10. Do not try to power your Arduino based board designed to work with 3.3V with greater voltage. See the technical specifications of your Arduino Board and remember that the maximum voltage of the SI47XX MCU CONTROL INTERFACE is 3.6V;
  11. Check the external crystal and its capacitors connections.

Attention: The pins numbers above is considering Si473x-D60(SSOP) package.

On FM mode, the receiver jump from a station to another station without any action.

If you are using Arduino Mini Pro, UNO or similar, pay attention to the pin 13 and the use of internal pull-up resistor. This pin has a LED and a resistor connected on the board. When this pin is set to HIGH, the LED comes on. If you use the internal pull-up resistor of the pin 13, you might experiment problem due to the drop voltage caused by the LED circuit. If this occurs in your project, do one of the following:

After power up or try to tune the receiver, the display shows LW and 0 kHz

This problem can be a little complicated to solve. It can occur in many situations. I have observed that very few times in my experiments:


void setup() {
 si4735.setMaxDelayPowerUp(500); // now the delay after power up will be 500 ms
 si4735.setup(RESET_PIN, FM_FUNCTION);



void setup() {
  si4735.setup(RESET_PIN, FM_FUNCTION);

I cannot tune satisfactorily any station on LW, MW or SW

When the receiver starts or when I switches it from FM to AM and vice-versa, I have loud click in the speaker

Some users may be uncomfortable with the loud popping of the speaker during some transitions caused by some Si47XX device commands. This problem occurs during the receiver transition from the power down to power up internal commands. Also, every time the user changes the mode (FM to AM or AM to FM) the sequence power down and power up internal commands is required by the Si47XX devices.

The SI473X devices have HIGH DC (DC bias) component in the analog audio output pins (SI4735-D60 pins 23 and 24). When the device goes to power down mode, the voltage on the audio pins drops to 0V. The device do it internally and there is not a way to avoid that. When the device goes to power up, that audio pins suddenly goes to the  HIGH DC again. This transition causes the loud pop in the speaker. So far, the author of this library have not found an internal solution to solve the loud popping of the speaker. It is important to say that internal SI473X mute or volume commands will not work for this purpose. However, it is possible to solve this problem by adding an extra mute circuit and control it by the MCU (Atmega, ESP32, STM32, ATtiny85 etc).

The schematic below shows this approach.

Mute circuit

Considering that you are using a MCU based on Atmega328, when the D14 (A0) is HIGH the Si47XX output audio will be drained to the ground. At this condition, no audio will be transferred to the amplifier input and, consequently, to the speaker. So, no loud click in the speaker.

When the D14 is LOW, the most of signal audio output from the Si47XX will be transfered to the input of the amplifier.

The code below shows all you have to do in your sketch to implement this resource.

#include <SI4735.h>
#define AUDIO_MUTE 14      // Pin A0 - Switch AGC ON/OF

Si4735 r;

void setup() {
  // It is all you have to do to control a external audio mute circuit if you have one. 
  r.setAudioMuteMcuPin(AUDIO_MUTE); // Tells the system to control an external audio mute circuit. 

  r.setup(RESET_PIN, -1, 1, SI473X_ANALOG_AUDIO); // Starts on FM mode and ANALOG audio mode. 


Video about external circuit and audio mute control

Some low power audio amplifiers IC also implement mute circuit that can be controlled externally. You can find this resource on LM4906, LM4863, KA8602B, MC34119, PAM8403 and HT82V739 devices.

Go to contents

Saving Memory on ATmega328 applications

  Converts a number to a char string and places leading zeros. 
  It is useful to mitigate memory space used by sprintf or generic similar function
void convertToChar(uint16_t value, char *strValue, uint8_t len)
  char d;
  for (int i = (len - 1); i >= 0; i--)
    d = value % 10;
    value = value / 10;
    strValue[i] = d + 48;
  strValue[len] = '\0';

Boards where this library has been successfully tested

This library can be useful to develop a cross-platform software. So far, it has been successfully tested on the architectures shown below.

Silicon Labs Schematic

The table below shows the some boards where this library has been successfully tested.

  Board Need voltage converter I²C Pins Used Reset Pin Features
1 Arduino Pro Mini 3.3V 8MHz No A4 and A5 12 More…
2 Mega 2560 Pro Yes 20 and 21 12 More…
3 ESP WEMOS LOLIN32 No GPIO21 and GPIO22 [ˆ4] GPIO25 [ˆ5] More…
4 ESP32 Dev Module No GPIO21 and GPIO22 [ˆ4] GPIO25 [ˆ5] More…
5 ESP32 Wrover Module No GPIO21 and GPIO22 [ˆ4] GPIO25 [ˆ5] More…
6 ESP8266 No GPIO4 and GPIO5 GPIO2 More…
7 Arduino UNO Yes A4 and A5 12 More…
8 Arduino NANO ATmega 328 Yes A4 and A5 12 More…
9 Arduino NANO ATmega 168 Yes A4 and A5 12 More…
10 Arduino NANO 33 IoT Yes A4 and A5 12 More…
11 Arduino Yún / ATmega-32u4 Yes 2 and 3 12 More…
12 ATtiny84 No 7 and 8 6 More…
13 ATtiny85 No 5 and 7 2 (D3) More…
14 Arduino DUE No 2 and 3 12 More…
15 BlueDuino 3.3V (ATmega-32u4) No 2 and 3 10 More…
16 Arduino Mini Pro 5V 16Mhz Yes 2 and 3 10 More…
17 STM32F746G-DISCO No - - More…
18 STM32F103 Series No PB6 (SCL) and PB7(SDA) PA12 More…
19 STM32F411 Series No PB6 (SCL) and PB7(SDA) PA12 More…
20 Raspberry Pi Pico No GP0 (0) and GP1 (1) GP16 (16) More…
21 Seeeduino XIAO No A4 and A5 3 More…
22 Teensy 3.1 No A4 and A5 12 More…
23 Teensy 4.1 No A4 and A5 12 More…
24 Atmega32 No PC1 and PC0 PB6/12 More…
24 Atmega128 No PC1 and PC0 PB6/12 More…
  1. More about ESP boards on ESPRESSIF Development Boards.
  2. More about BlueDuino on Seed.
  3. On you can see the technical specification about many board.

The table below shows some SI473X, SI474X devices and Si4730 based-boards where the PU2CLR SI4735 Arduino Library has been successfully tested.

SI473X board / IC FM RDS AM SSB LW MW SW Tested
SI4735-D60 X X X X X X X Yes
SI4735-B20 X X X   X X X Yes
SI4732-A10 (*1) X X X X X X X Yes
SI4730-D60 (*2) X X* X   X* X X* Yes
SI4734-D60 X   X   X X X Yes
NE928-10A SI4730 X   X         Yes
PL102BA V2.11 10628 (*2) X X* X   X* X X* Yes
SI4743-C10 X X X   X X X Yes
SI4745-C10 X X X   X X X Yes

*1 - Acording to Silicon Labs guide AN332, the SI4732-A10 has the same firmware FMRX component and AM_SW_LW RX component as that of SI4735-D60. See Si47XX PROGRAMMING GUIDE; AN332; page 2. So, like the SI4735-D60, it is possible to use it to listen to SSB mode with the SI4732-A10.

*2 - Although the SI4730-D60 does not officially support SW, several tests performed during the development of this library, as well as tests performed by other experimenters, it was observed excellent performance of this IC on HF/SW band. See “Si47XX PROGRAMMING GUIDE; pages 2 and 3; Table 1 - Product Family Function” for more details. See the video Si4730-D60 ultimate testing (FM/RDS + LW + SW). It is important to note that the author of this library does not guarantee all SI4730-D60 devices sold on the market will work in LW and SW bands and FM with RDS as well.

The videos below show the PU2CLR Si4735 Arduino Library working on some boards

Cross-platform Si4735 Arduino Library

Si4735 Arduino Library - Arduino Mega 2560 and ESP32 LOLIN32 WEMOS

Si4735 Arduino Library working with ATtiny85

Si4735 Arduino Library and Bluepill STM32F103

Go to contents

Photos (Tools and Accessories)

This item describes some tools and accessories you might need to build your radio based on SI4735. Most of the accessories used in this project you will find on eBay and AliExpress.

Arduino Pro Mini Arduino Pro Mini
Arduino Pro Mini 01 Arduino Pro Mini 02

FT232 USB Adapter FT232 USB Adapter
FT232 USB A SI4735 on adapter 05

Magnifier Solder
Magnifier Solder

Adapter for SI4735 Soldering Accessories
Adatper for Si4735 Soldering Accessories

It was a bit hard to solder the kind of CI on adapter. However, by using a electronic magnifier it was possible.

SI4735 soldered on adapter

Si4735 on Adapter Si4735 on Adapter
IC SI4730 soldering on adapter SIC SI4730 soldering on adapter
SI4735 on adapter 01 SI4735 on adapter 03

Go to contents


The basic circuit built on protoboard is based on the “SSOP Typical Application Schematic”, suggested by the Silicon Labs Documentation (Si4730/31/34/35-D60-BROADCAST AM/FM/SW/LW RADIO RECEIVER; page 19). Two pull-up 4.7K resistors were added on I²C bus (It is an arbitrary value. Actually, this value may vary depending on your devices connected to the bus). Also, it is recomended to add two 4.7uF capacitors between the CI audio output and audio amplifier. The photos below do not show these capacitors. See C7 and C8 on schematic.

The figure below shows a suggestion to shrink the prototype and connections. If you are just doing prototyping, I recommend this approach due to the short connections with the Si4735 (recommended by the manufacturer).

Mini Protoboard 01

The configuration above connected to Arduino Pro Mini is shown below.

Mini Protoboard 02

The following photo shows the most common prototyping approach. Use this approach if you don’t want to solder the components on the adapter plate.

Protoboard 01

The figure above shows the very basic shematic implementation (no Button or Encoder). See the folder examples for more details and other configuration with LCD and OLED


  1. Silicon Labs Si4737 WB/AM/FM Stereo/RDS single-chip receiver HAL library for Arduino
  6. Understanding the ‘Phasing Method’ of Single Sideband Demodulation
  7. Design a modulator and demodulator SSB by DSP processor TMS320C50 for PLC systems
  8. Installing Additional Arduino Libraries
  9. Specification of the radio data system (RDS) for VHF/FM sound broadcasting in the frequency range from 87,5 to 108,0 MHz
  10. Radio Data System
  11. RDS Encoder
  12. RDS in Europe, RBDS in the USA –What are the differences and how canreceivers cope with both systems?
  13. RBDS & RDS PTY Codes and Program Types
  14. Using RDS/RBDS with the Si4701/03
  16. Other implementations using Si4735 and Arduino
  17. I²C
  18. Forums
  19. “Multi-Band Receiver On A Chip Controlled By Arduino” commented by Tom Nardi on Hackaday
  20. C/C++ for Arduino

Go to contents


Here you can see some experiments using this library. Watch them.

Project examples made by the author

Third-party projects using this library

Videos that powered the standalone SI473X devices:

Go to contents

Commercial Receivers based on Si47XX Family

The table below shows some radios based on SI47XX

Manufacturer Model Device More information
Tecsun PL310ET Si4734 About
Tecsun PL-365 Si4735 Review
Tecsun PL-360 Si4734 Review
Tecsun PL380 Si4734 Reviews
Tecsun PL880 Si4735 Reviews
Degen DE1103 DSP Si4735 Review
Degen DE1123/Kaito KA1123 Si4734 Review
Degen DE1125/Kaito KA801 Si4734 Reviews
Degen DE1126 Si4734 Review
Degen DE1127 (discontinued) Si4734 Review
Sangean ATS-909X Si4735 Review
XHDATA D808 Si4735 Review
RADIWOW R-108 SI4734 Review
C Crane CC Skywave   Review

Go to contents