I am using CC1125 to receive wireless M-Bus packets from mode T meters and it works quite well even with large errors in frequency and data rate. The problem is that many packets are missed, and sometimes all of them, if the TX is centered exactly at the RX center frequency. This occurs with both weak and strong signals. Reception starts working again if the TX frequency is moved a few kHz either side of the nominal center frequency and it works all the way out to the limits of the RX. It's appears to be a "blind spot" in the middle of the RX passband. Could the problem have something to do with the PLL feedback AFC?
I also have a question regarding the register CC112X_AGC_GAIN_ADJUST. The user's guide give the impression that the only purpose of this register is to calibrate the RSSI reading, but, my RX stops working if I put an offset into this register, for example (signed char)-102 = 0x9A. I have to make the RSSI offset correction in software to make it work. This makes me suspect that some of the AGC settings may be wrong.
The allowed tolerances for mode T meter transmitters are quite scaring, especially for the data rate.
- Modulation: 2-FSK
- Center frequency: 868.950MHz +/-50kHz (+/-58ppm)
- Data rate: 100 +/-10 kbit/s (+/-10%)
- Deviation: +/-50kHz (nominal), +/-40kHz (minimum), +/-80kHz (maximum)
The preamble is at least 32 bits "010101..." followed by a 16-bit sync 0x54 0x3D.
I would be very happy if someone with CC1125 experience could review my settings and recommend changes where needed.
The CC1125 is running at 40MHz clock. The settings are appended below. All registers not shown here are left in their reset default state.
Regards
Johan
-----------------------------
CC112X_IOCFG2 = 0x00
CC112X_SYNC1 = 0x54
CC112X_SYNC0 = 0x3D
CC112X_SYNC_CFG1 = 0x09
CC112X_SYNC_CFG0 = 0x0B
CC112X_DEVIATION_M = 0x47
CC112X_MODCFG_DEV_E = 0x06
CC112X_DCFILT_CFG = 0x0C
CC112X_PREAMBLE_CFG1 = 0x11
CC112X_PREAMBLE_CFG0 = 0x17
CC112X_FREQ_IF_CFG = 0x00
CC112X_IQIC = 0x00
CC112X_CHAN_BW = 0x01
CC112X_MDMCFG1 = 0xC6
CC112X_MDMCFG0 = 0x05
CC112X_SYMBOL_RATE2 = 0xA4
CC112X_SYMBOL_RATE1 = 0x7A
CC112X_SYMBOL_RATE0 = 0xE1
CC112X_AGC_REF = 0x40
CC112X_AGC_CS_THR = 0xFD
CC112X_AGC_CFG3 = 0x03
CC112X_AGC_CFG1 = 0xA9
CC112X_AGC_CFG0 = 0xC0
CC112X_SETTLING_CFG = 0x03
CC112X_FS_CFG = 0x12
CC112X_PKT_CFG1 = 0x01
CC112X_PA_CFG0 = 0x78
CC112X_IF_MIX_CFG = 0x00
CC112X_FREQOFF_CFG = 0x30
CC112X_TOC_CFG = 0xCB
CC112X_FREQ2 = 0x56
CC112X_FREQ1 = 0xE5
CC112X_FREQ0 = 0x1E
CC112X_FS_DIG1 = 0x00
CC112X_FS_DIG0 = 0x5F
CC112X_FS_CAL1 = 0x40
CC112X_FS_CAL0 = 0x0E
CC112X_FS_CHP = 0x2A
CC112X_FS_DIVTWO = 0x03
CC112X_FS_DSM0 = 0x33
CC112X_FS_DVC0 = 0x17
CC112X_FS_PFD = 0x50
CC112X_FS_PRE = 0x6E
CC112X_FS_REG_DIV_CML = 0x14
CC112X_FS_SPARE = 0xAC
CC112X_FS_VCO0 = 0xB4
CC112X_XOSC5 = 0x0E
CC112X_XOSC3 = 0xC7
CC112X_XOSC1 = 0x07
CC112X_XOSC_TEST1 = 0x08
-----------------------------