PU2CLR Si4735 Arduino Library  2.0.7
Arduino Library for Si47XX Devices - By Ricardo Lima Caratti
SI4735-D60 / SI4732-A10 NBFM

Narrow Band FM (Frequency Modulation) implementation.

First of all, it is important to say that the NBFM patch content is not part of this library. It is important to note that the author of this library does not encourage anyone to use the NBFM patches content for commercial purposes. In other words, this library only supports NBFM patches, the patches themselves are not part of this library.
More...

Functions

void SI4735::patchPowerUpNBFM ()
 This method can be used to prepare the device to apply NBFM patch. More...
 
void SI4735::loadPatchNBFM (const uint8_t *patch_content, const uint16_t patch_content_size)
 Loads a given NBFM patch content. More...
 
void SI4735::setNBFM ()
 Set the radio to FM function. More...
 
void SI4735::setNBFM (uint16_t fromFreq, uint16_t toFreq, uint16_t initialFreq, uint16_t step)
 
void SI4735::setFrequencyNBFM (uint16_t freq)
 Set the frequency to the corrent function of the Si4735 on NBFM mode. More...
 

Detailed Description

Narrow Band FM (Frequency Modulation) implementation.

First of all, it is important to say that the NBFM patch content is not part of this library. It is important to note that the author of this library does not encourage anyone to use the NBFM patches content for commercial purposes. In other words, this library only supports NBFM patches, the patches themselves are not part of this library.

This implementation was not tested.

No NBFM patch was found to test this implementartion.

This implementation is applicable to Si47035-D60 and SI4732-A10 when powering up the part in FM mode with the NBFM patch

What does NBFM patch means? In this context, a patch is a piece of software used to change the behavior of the SI4735-D60/SI4732-A10 device. There is little information available about patching the SI4735-D60/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 SI4735 or SI4732 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 off the system. Consequently, the content of the patch has to be transferred again to the device each time after turn on the system or reset the device.

I would like to thank Mr Vadim Afonkin for making available the SSBRX patches for SI4735-D60/SI4732-A10 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, you must convert the values to numeric value of the hexadecimal constants. For example: 0x15 = 21 (00010101); 0x16 = 22 (00010110); 0x01 = 1 (00000001); 0xFF = 255 (11111111);

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
SI4735-D60 and SI4732-A10 devices. Once again, the author disclaims any liability for any damage this procedure may cause to your SI4735-D60 or SI4732-A10 or other devices that you are using.

See also
AN332 REV 0.8 UNIVERSAL PROGRAMMING GUIDE; pages 3 and 5

Function Documentation

◆ patchPowerUpNBFM()

void SI4735::patchPowerUpNBFM ( )

This method can be used to prepare the device to apply NBFM patch.

Call queryLibraryId before call this method. Powerup the device by issuing the POWER_UP command with FUNC = 0 (FM Receiver).

See also
setMaxDelaySetFrequency()
MAX_DELAY_AFTER_POWERUP
Si47XX PROGRAMMING GUIDE; AN332 (REV 1.0); pages 64 and 215-220 and
AN332 REV 0.8 UNIVERSAL PROGRAMMING GUIDE AMENDMENT FOR SI4735-D60 SSB AND NBFM PATCHES; page 32.

References SI4735::waitToSend().

Referenced by SI4735::loadPatchNBFM().

◆ loadPatchNBFM()

void SI4735::loadPatchNBFM ( const uint8_t *  patch_content,
const uint16_t  patch_content_size 
)

Loads a given NBFM patch content.

Configures the Si4735-D60/SI4732-A10 device to work with NBFM.

Parameters
patch_contentpoint to patch content array
patch_content_sizesize of patch content

References SI4735::patchPowerUpNBFM(), and SI4735::queryLibraryId().

◆ setNBFM() [1/2]

void SI4735::setNBFM ( )

Set the radio to FM function.

Todo:
Adjust the power up parameters

Set the radio to NBFM function.

See also
AN332 REV 0.8 UNIVERSAL PROGRAMMING GUIDE; pages 32 and 14
setAM(), setSSB(), setFM()
setFrequencyStep()
void SI4735::setFrequency(uint16_t freq)

References SI4735::radioPowerUp().

Referenced by SI4735::setNBFM().

◆ setNBFM() [2/2]

void SI4735::setNBFM ( uint16_t  fromFreq,
uint16_t  toFreq,
uint16_t  initialFreq,
uint16_t  step 
)

Tunes the SSB (LSB or USB) receiver to a frequency between 64 and 108 MHz.

See also
AN332 REV 0.8 UNIVERSAL PROGRAMMING GUIDE;
setAM(), setFM(), setSSB()
setFrequencyStep()
void SI4735::setFrequency(uint16_t freq)
Parameters
fromFreqminimum frequency for the band
toFreqmaximum frequency for the band
initialFreqinitial frequency
stepstep used to go to the next channel

References SI4735::setNBFM().

◆ setFrequencyNBFM()

void SI4735::setFrequencyNBFM ( uint16_t  freq)

Set the frequency to the corrent function of the Si4735 on NBFM mode.

You have to call setup or setPowerUp before call setFrequency.

See also
maxDelaySetFrequency()
MAX_DELAY_AFTER_SET_FREQUENCY
Si47XX PROGRAMMING GUIDE; AN332 (REV 1.0); pages 70, 135
AN332 REV 0.8 UNIVERSAL PROGRAMMING GUIDE; page 39
Parameters
uint16_tfreq is the frequency to change. For example, FM => 10390 = 103.9 MHz; AM => 810 = 810 kHz.

References SI4735::waitToSend().