This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC1200: Optimizing Transparent Serial Operation

Part Number: CC1200

We are trying to optimize the CC1200 for use in transparent serial mode.  We are focused on using both 4800 and 9600 baud data, with preference for 4800 baud.  On a bench sensitivity measurement, we are currently achieving 0 BER at about -111 dBm Rx sensitivity.  We are comparing this to another radio, with which we achieve about -115 dBm sensitivity with 0 BER.  I have attached our register dump from our hardware for reference.  Do you have any suggestions or tricks to eek out an extra few dB sensitivity on the CC1200?

Our general operating parameters are as follows (these conform closely to the comparison radio):

2-FSK, 2.7 kHz deviation, 10 kHz RBW, 10 ksps, 200 kHz Tx Loop Filter BW, 200 kHz Rx Loop Filter Bandwidth, 40 MHz 1.5ppm TCXO is the clock source to the CC1200.

Some things we've noted in testing:

1) We were able to get 10 dB sensitivity by turning off the automatic frequency adjustment in FREQOFF_CFG register (0x03), compared to the "slow" auto adjustment (0x23).  This should be acceptable for us since we calibrate the CC1200 and use a good TCXO.  We had noted previously the "fast" (0x20) and recommended (0x22) auto adjustments were causing us some small bit timing issue with our 9600 baud data (our data is not particular balanced or whitened).

2) According to the operating manual, the sample rate setting does not matter in transparent serial mode, as in this case the sample rate is based directly on the RBW setting.  Can this be confirmed?

3) The phase noise of the "other" radio when transmitting is lower then the CC1200 in FSK, but we have apparent range degradation when we use GFSK in the CC1200 transmitter.  Any suggestion to bring GFSK performance closer in line with FSK on the CC1200?  We are still doing more testing with GFSK to see if we can knock out the phase noise.

4) The "other" radio's OBW is about 10.6 kHz @ 9600 baud.  We were thinking of using the Feedback to PLL, but this probably won't help us if our RBW is already optimized for the OBW, right?

CC1200 Register Dump
Transparent Serial
2-FSK, 434.1 MHz, 2.7 kHz deviation, 10 kHz RBW, 10 ksps
200 kHz Tx Loop Filter BW, 200 kHz Rx Loop Filter BW

Add  Value
Base Registers:
0x00 0x09
0x01 0x1a
0x02 0x30
0x03 0x30
0x04 0x93
0x05 0x0b
0x06 0x51
0x07 0xde
0x08 0x0a
0x09 0x03
0x0a 0x8d
0x0b 0x00
0x0c 0x5d
0x0d 0x00
0x0e 0x8a
0x0f 0xcb
0x10 0x95
0x11 0x00
0x12 0x45
0x13 0x70
0x14 0x62
0x15 0x4d
0x16 0x31
0x17 0xec
0x18 0xa1
0x19 0xb1
0x1a 0x20
0x1b 0x51
0x1c 0x87
0x1d 0x00
0x1e 0x00
0x1f 0x0b
0x20 0x14
0x21 0x08
0x22 0x21
0x23 0x00
0x24 0x00
0x25 0x00
0x26 0x03
0x27 0x00
0x28 0x20
0x29 0x0f
0x2a 0x00
0x2b 0x30
0x2c 0x56
0x2d 0x0f
0x2e 0xff

Ext. Registers:
0x00 0x1c
0x01 0x03
0x02 0x0b
0x03 0x00
0x04 0x00
0x05 0x0a
0x06 0x01
0x07 0x00
0x08 0x00
0x09 0x00
0x0a 0x00
0x0b 0xfb
0x0c 0x56
0x0d 0xd1
0x0e 0xeb
0x0f 0x02
0x10 0xee
0x11 0x10
0x12 0x07
0x13 0xa0
0x14 0x00
0x15 0x20
0x16 0x40
0x17 0x0e
0x18 0x28
0x19 0x03
0x1a 0x00
0x1b 0x33
0x1c 0xff
0x1d 0x17
0x1e 0x00
0x1f 0x00
0x20 0x6e
0x21 0x1c
0x22 0xac
0x23 0x14
0x24 0x00
0x25 0x00
0x26 0x00
0x27 0xb5
0x28 0x00
0x29 0x02
0x2a 0x00
0x2b 0x00
0x2c 0x10
0x2d 0x00
0x2e 0x00
0x2f 0x01
0x30 0x01
0x31 0x01
0x32 0x0e
0x33 0xa0
0x34 0x03
0x35 0x04
0x36 0x03
0x37 0x00
0x38 0x00
0x39 0x00
0x64 0x00
0x65 0x00
0x66 0x00
0x67 0x00
0x68 0x00
0x69 0x00
0x6a 0x00
0x6b 0x00
0x6c 0x00
0x6d 0x00
0x6e 0x00
0x6f 0x00
0x70 0x00
0x71 0x80
0x72 0x00
0x73 0x41
0x74 0x00
0x75 0xff
0x76 0x00
0x77 0x00
0x78 0x00
0x79 0x00
0x7a 0xd1
0x7b 0x00
0x7c 0x3f
0x7d 0x00
0x7e 0x00
0x7f 0x30
0x80 0x7f
0x81 0x00
0x82 0x00
0x83 0x00
0x84 0x00
0x85 0x00
0x86 0x02
0x87 0x00
0x88 0x00
0x89 0x00
0x8a 0x00
0x8b 0x00
0x8c 0x01
0x8d 0x01
0x8e 0x00
0x8f 0x20
0x90 0x11
0x91 0x0a
0x92 0x10
0x93 0x00
0x94 0x00
0x95 0x00
0x96 0x00
0x97 0x00
0x98 0x00
0x99 0x00
0x9a 0x00
0x9b 0x0b
0x9c 0x40
0x9d 0x00
0x9e 0x00
0x9f 0x00
0xa0 0x00
0xa1 0x00
0xa2 0x00
0xd2 0x00
0xd3 0x00
0xd4 0x00
0xd5 0x00
0xd6 0x00
0xd7 0x00
0xd8 0x0f
0xd9 0x00
0xda 0x00

  • I should also mention under testing we found RBW values of 12 kHz, 15 kHz, and 20 kHz all resulted in poorer sensitivity performance, hence we have selected 10 kHz to be close to the OBW.  We are performing our tests at 434.1 MHz and at 4800 baud with a BER tester and RF Signal Generator directly into the radio antenna port.

  • Hi David, 

    I have assigned a expert to get back to you on.

  • Important note: Transparent mode just output the raw data without any processing. When using packet mode (FIFO) mode this signal is post processed in the modem. If you want to get the same performance in transparent mode as in FIFO mode you most likely have to do some post processing. We have not looked into this part since the radio is designed to use FIFO mode and transparent is added later to enable backwards compatibility.  I would assume that you have a protocol where you can't use FIFO mode (no preamble/ sync).  

    1) Using FIFO mode the frequency offset estimate could be locked when sync found. Before that the radio doesn't know when you receive noise or a actual signal. Receiving noise will most likely get the frequency estimate to "jump" around and when you actually receive useful data it will take some time for the estimate to output the correct value. If you don't have a preamble the estimate will most likely be off at the beginning and cause errors.  

    2) Yes and no. The datarate you set is not used directly but it sets the internal sample rate and increasing the datarate will give less jitter.

    3) Not sure here. The phase noise should not be dependent on the modulation format. Or are you actually looking at the modulation shape since FSK is a lot wider than GFSK. 

    4) For the reasons listed under 1) it could be that the FB2PLL does not give the wanted result since it typically needs 4 byte preamble to settle the FB2PLL. Meaning that the loop will most likely be too slow. But note that we haven't tested FB2PLL and transparent meaning that you have to do testing your self to see what works and not. 

  • Unfortunately, we need to use transparent operation due to integration requirements with existing hardware.  We have strict timing requirements that prevent us being able to buffer and re-send the data, and our existing hardware are all using directly modulated serial data.  We do use a preamble and sync though, albeit less then ideal.

    TER said:

    3) Not sure here. The phase noise should not be dependent on the modulation format. Or are you actually looking at the modulation shape since FSK is a lot wider than GFSK. 

    I am talking about the modulation shape.  You can see what I mean in the attached image.  The yellow trace is the CC1200 in FSK mode.  The purple trace is our old ("other") radio.  If we change CC1200 to GFSK, it is very similar in modulation shape to our old radio.  In FSK, the CC1200 has a lot of spurs.

    TER said:

    4) For the reasons listed under 1) it could be that the FB2PLL does not give the wanted result since it typically needs 4 byte preamble to settle the FB2PLL. Meaning that the loop will most likely be too slow. But note that we haven't tested FB2PLL and transparent meaning that you have to do testing your self to see what works and not. 

    Does FB2PLL operate when FOC is disabled?  It seems like FB2PLL is using the FOC feedback for the PLL.  As I noted we got 10dB better performance with FOC disabled, I doubt the 1-2 dB we might get from FB2PLL will be worth enabling FOC again.

  • Could you elaborate a bit more on the system requirements? When using transparent mode he MCU has to process and store the data before resending. If you use the FIFO the chip does the processing with a few bits latency and they you can read out the processed packet from he FIFO. Have you compared the timing? (transparent vs FIFO). You will get better performance using FIFO (even with a not too ideal sync word)

    3) If you plot FSK using Matlab this is how it will look like. In other words, the shape is modulation dependent and not chip dependent. 

    4) You have to enable FOC for FB2PLL

  • The CC1200 is used in a pluggable radio module designed to be a backward compatible replacement for our old radio module.  The over-the-air RF data is not generated by the MCU controlling the CC1200 on the module (the RF MCU), but by the MCU of our host system.  The host system only provides UART for direct-modulated data and some GPIO to configure the mode (off, tx, rx) and the operating frequency.  The new RF MCU contained in the interprets the legacy configuration data and configures the CC1200 accordingly, but the OTA data is generated by the UART of the Host MCU, and this is why we cannot use the FIFO mode.

    If we wanted to read/buffer the OTA data in the RF MCU (basically, bridge UART-to-SPI), we would have at least 3x the data latency (1 Tx Host to RF MCU, 1 OTA, 1 RF MCU to Rx Host).  Unfortunately our old products are designed to handle a half-duplex feedback cycle within 50-100ms and use 4800 baud, so the 3x data latency would exceed 100ms, not giving enough time for the Rx Host to switch tx/rx modes and service the data in sync.

    So because of the timing requirement for half-duplex comms in our old system, we are not doing any intermediate processing on the OTA data...the host UARTs are connected directly to the CC1200 and the CC1200 is directly modulating the UART data stream to achieve a similar OTA data latency to our old systems.

  • After further testing, we've determined we can further reduce our RxBW and our CC1200 module now performs on par with our old radio.

    While reading the user manual, I noticed the DCFILT_CFG register.  We have just taken the values from SmartRF Studio for this and the associated I and Q registers.  I've noticed the CC1200 module tends to take longer to work out the preamble than our old radio.

    1) Could we see any benefit in changing the DC Filter configuration in transparent serial mode?

    2) Does the DC Filter configuration have any affect on transmission, or only reception?

    3) What are the pros/cons of using the manual compensation (I/Q registers) vs. the filter algorithm (DCFILT_FREEZE_COEFF)?

    4) Do you have any recommendations on how to tune the DC Filter configuration for this use case?

  • We have never looked at the DC filter in the context of transparent mode. 

    The DC filter removes the DC component in RX and is critical when using zero IF. In your case it should be less important but use the setting from SmartRF Studio. This filter should have the same function in FIFO mode and in transparent mode. In FIFO mode only 4 bits of preamble is needed (to settle the AGC) so we have not seen any limitations with the DC filter with the settings given. In transparent mode you may have a benefit of adjusting settings but we would not be able to give you any guidance here and I would recommend doing a trial and error approach to see if you are able to get faster response without affecting performance.