FAQ: What is the TRKRFFREQ register for?

The TRKRFFREQ is the frequency tracking register which stores the output from the Automatic Frequency Control (AFC) unit.

The AX5043 features an automatic frequency tracking loop which is capable of tracking the transmitter frequency within the RX filter band width. On top of that the AX5043 has a frequency tracking register TRKRFFREQ to synchronize the receiver frequency to a carrier signal. For AFC adjustment, the frequency offset can be computed with the following formula:

\Delta f = \frac{TRKRFFREQ}{2^{24}} \times BITRATE

The pull−in range of the AFC can be programmed with the MAXRFOFFSET Registers:

MAXRFOFFSET = \frac{\Delta f_{CARRIER}}{f_{XTAL}} 2^{24} + \frac{1}{2}

Further details on the TRKRFFREQ register are provided in the AX5043 Programming Manual from page 47.

Note: TRKRFFREQ is updated by the outer frequency tracking loop, while the TRKFREQ register is used for the inner tracking loop (used for PSK only).

The optimal value for the AFC can be easily calculated directly in the AX-RadioLab GUI under the PHY panel. A detailed explanation on the best practices for setting the AFC loop can be found from page 16 on the AX-RadioLab User Manual.


I do not know which formula to believe, because yours is different from the one the datasheet is providing:

Capture d’écran du 2022-03-02 10-24-04

Hi @akno , thanks for noticing this misleading formula.
What is reported in the datasheet is correct. This is further confirmed by inspecting directly the radio driver code (easyax5043.c), where the offset is loaded into the struct:

axradio_cb_receive.st.rx.phy.offset.o = signextend20(radio_read24(AX5043_REG_TRKRFFREQ2));

As the TRKRFFREQ is overall a 20bit register, the driver reads 24 bits and threats it as a signed 20 bit number (with the LibMF fucntion signextend20).
Further in the code the number is converted to frequency by:

axradio_cb_receive.st.rx.phy.offset.o = axradio_conv_freq_fromreg(signextend16(axradio_cb_receive.st.rx.phy.offset.o));
1 Like