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.

CC110L: Receiver: spurious packets, Carrier Sense and RX-sync

Part Number: CC110L
Other Parts Discussed in Thread: CC1101

Hello,

I'm still working on optimizing a CC110L receiver application (see this thread), and there are some unresolved issues and questions.

Summary: I have set up the CC110L to receive Manchester-encoded data at 1 kHz data rate. As built-in Manchester decoding does not work reliably with this old data format (30% packet loss), I simply use twice the data rate (2 lHz) with a 2-byte sync word 0x55 0x56.

I expect 4 bytes Manchester-encoded payload, so I set RX_LENGTH to 8 bytes, which are decoded in software to the original 4 bytes. I also attached RSSI and CRC bytes, so in total, I expect to receive packets of 10 bytes in RX _FIFO. After processing, this results in 4 bytes payload, plus one byte RSSI (I don't use the CRC value yet) This is an example of a successful payload received:

0x01 0x53 0xA4 0xFF 0x53

The payload is 0x01 53 A4 FF (as expected), and the RSSI value is 0x53 (-32,5 dB, ~1 meter distance)

This setup works fine, and packet loss is almost zero - except for one thing: the receiver also picks up spurious packets ('ghost packets'), often several per minute, although this can vary wildly.Sometimes 10 minutes go by without anything received, and then 3 or 4 packets arrive within just 10 seconds. I think it is simply receiver noise that is sometimes falsely recognized as a sync word, but I'm not quite sure - it is rather irregular for noise.

This was received in the past 2 minutes:

0x60 0x94 0x91 0x07 0xB5  
0x15 0x02 0x00 0x04 0xBD  
0xA2 0x04 0x0C 0x00 0xB7  
0xC0 0x05 0x3C 0xD4 0xBF
0x00 0x4C 0x0B 0x02 0xBD
0x44 0x10 0x00 0xC4 0xC0

The RX payload bytes are basically noise, and the RSSI values are way lower (around -105 dBm). Each spurious packet takes approximately 70 milliseconds of time to be received and processed. During this time, no other packets can be received, so with 3 spurious packets per minute, the receiver can be 'deaf' for about 0.2 seconds per minute. This translates in missing 1 in 300 legitimate packets. It isn't dramatic, but still annoying, especially since I have no idea if this might get worse in a noisier environment.

I tried tinkering with the AGCCTRL2 and AGCCTRL1 registers, and especially increasing MAGN_TARGET and CARRIER_SENSE_ABS_THR seems to improve things somewhat - but spurious packets at low dBm levels still get through. The desired function is to set an RSSI threshold below which those packets are simply ignored ( e.g. everything below 0xD0 or -98 dBm). I could also decrease the LNA and/or DVGA gain, but I'm afraid that this will decrease the overall range of the RF link - and as I frankly don't know what other effects changing those values can have, it is pretty unlikely that I will arrive at an optimal solution that way.

There is also another strange thing that I noticed at the hardware level, when looking at CS and RX-sync (I'm using RX-sync = configuration 0x06 for GDO0 to signal the arrival of a packet, and CS = 0x0E for GDO2).

When a legitimate packet is received, I see Carrier Sense (yellow trace) as well as the RX-sync (blue trace):

However, when a spurious packet is received, I only see RX-sync, but no Carrier Sense:

The datasheet suggests that CS is used to evaluate if a valid signal is received:

"5.18.3 Carrier Sense (CS)
Carrier sense (CS) is used as a sync word qualifier and for Clear Channel Assessment (see Section 5.18.4)."

But this is contradicted by what I see happening: even though CS is not asserted, a sync word is still recognized and RX FIFO is filled with noise. I tried looking here on the forum and elsewhere on the Internet for more information and examples of how to use those AGCCTRL registers to set receiver thresholds, but can't find any useful information. It is also unclear how the internal logic of the CC110L receiver works with regard to CS and RX-sync.

So basically this is the question: how can I set an RSSI threshold below which packets are ignored? Hours of trial-and-error haven't led to a solution (or even better insight), although this is also caused by the stochastic nature of those spurious packets. After making a change, it can take half an hour or more to conclude if anything has changed or not.

So thanks again already for any leads,

Richard

  • Using a sync word equal to 0x55 56 you will get a lot of false syncs since the probability of finding this sync word in noise is fairly large.

    From the above it's not clear if you are using some of the settings marked in red:

    If you use one of these, the signal has to be above the threshold before the chip starts looking for a sync word. Then you will avoid the second plot that you posted.

  • Using a sync word equal to 0x55 56 you will get a lot of false syncs since the probability of finding this sync word in noise is fairly large.

    Unfortunately, I am bound to an old data format used in an ATA5760 receiver for reasons of backward compatibility, see This link. Maybe in a couple of years, when customers no longer use the older generation of receivers, we can switch to a more reliable format.

    And what is it that makes this bit pattern more likely to occur in noise than another (less regular) pattern? Or is it simply the length?

    From the above it's not clear if you are using some of the settings marked in red:

    Ah, that was indeed what I was looking for. I did select 16/16 sync word bits detected (0x02), but not combined with the carrier sense threshold (0x06). This indeed solves the main problem, thanks! Question: what is the difference between 15/16 bits and 16/16 bits? I can't find this explained anywhere in the datasheet. Does 15/16 meant that 15 out of 16 bits should be received correctly?

    One more question: the datasheet says that the absolute CS threshold depends on the following 4 settings, with the bit values used, copied from SmartRF Studio:

    • AGCCTRL2.MAX_LNA_GAIN = 000
    • AGCCTRL2.MAX_DVGA_GAIN = 00 => -90.5 dBm (Table 5.10) combined with MAGN_TARGET
    • AGCCTRL1.CARRIER_SENSE_ABS_THR = 0000 => at MAGN_TARGET setting
    • AGCCTRL2.MAGN_TARGET = 001 => 27 dB

    (AGCCTRL1.CARRIER_SENSE_REL_THR = 00)

    How can I at least estimate what the CS threshold is? I tried interpreting the above, but I don't understand the numbers. Yes, things seem to work, but I have no idea if these settings are the optimal settings(*). From Table 5-10 I would guess that the absolute CS threshold is around -90 dBm (at 250 kBaud), but what does this MAGN_TARGET of 27 dB mean? And does it make much difference it make at lower data rates (2 kBaud in my case)?

    Background: I'm a old-school hardware guy, and I'm used to being able to measure, check and optimize signals at every stage in a receiver, complete with a detailed schematic. Working with devices like this feels a lot like trying to make sense of dozens of switches and settings that all influence how a signal is received, but with only a vague understanding of what they do and in what order they are applied, and without an easy way to check my work.

    *: I also tried to lay my hands on a CC110L hardware evaluation kit for use with SmartRF Studio in order to get a better grip on things, but those evaluation kits appear to be obsolete.

    But I'm slowly getting the hang of it, thanks to helpful people like you - so I am making progress! (and learning a lot ...)

  • Does 15/16 meant that 15 out of 16 bits should be received correctly?

    Yes. For some protocols it could be practical to allow 1 bit error. In your case I would recommend using 16/16. 

    For the threshold: I believe that this is a question that has been asked a fair amount of times. I would recommend doing a google search and look at the posts that pop up, I believe some of them should cover in some detail on how to set the limit. Try "cc1101 Cs threshold site:e2e.ti.com" as a search. The CC1101 has more features than CC110L and hence it's easier to find an answer when searching for the main device. 

  • OK, thanks, I shall check it out, and also do some more testing with different transmitter power levels to get  feel for these receiver parameters.

    For now, I can finish up the programming and start testing with customers.