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.

CC1120: I have a problem with nothing being stored in the RX FIFO.

Part Number: CC1120
Other Parts Discussed in Thread: , CC1200

Hello expertes.

I am a  person who is experimenting with the CC1120 in the environment shown in the picture below.

The CC1120 module acts as a RX and is composed of an mcu and a CC1120 chip, the CC1120 chip is controlled by the MCU.

The CC1120 module is manufactured, not a commercial product.

BOOSTXL-CC1120-90 is used as TX and is a commercial product of TI.

BOOSTXL-CC1120-90 interlocks with SMART RF and can transmit packets with the set Carrier Frequency through Packet TX of SMART RF in PC.

 

However, I am not receiving anything from the CC1120 Module.

I thought that the received data would be stored in the RX FIFO (0x3F) and the received data could be read by reading the 0x3F register.

However, as a result of reading NUM_RXBYTES that can read number of bytes in the RX FIFO, 0x00 was read.

Even when reading the RX FIFO itself, 0x00 was read.

I used two BOOSTXL-CC1120-90 and set one to TX and the other to RX to conduct a RF test.

At that time, it was confirmed that packets were transmitted and received normally.

The register value of BOOSTXL-CC1120-90 used for RX was extracted by using SAMRT RF and applied to CC1120 module as it is.

In my opinion, there seems to be a problem with the way srx is strobe or rx fifo is handled after inputting the register value.

The picture below is the code that writes the value to the register, executes manual calibration, and then executes it.

 

The code tried to run in the form of continuously reading NUM_RXBYTES and reading RXFIFO when the value became greater than 0.

I'd really appreciate any suggestions on what to fix or fix in the code above.

Thank you so much for reading long post.

                                                             - by KIM - 


  • I do not understand your code. Once there is more than 0 bytes in the RX FIFO (for example 1, if you have just started to receive something), you try to read 8 bytes from the FIFO. You should NEVER read more bytes from the FIFO than what is in there, so reading 8 bytes when there are less than 8 bytes in will mess up the FIFO pointers.

    What you should do in your code is the following:

    Reset CC1200

    Write configuration registers

    Calibrate the synth (if autocal is not enabled)

    Strobe SRX

    Wait for the packet to be received (Packet received signal asserted)

    Check if there are byte in the FIFO (the packet received signal will also be asserted if filtering took place).

    Read as many bytes as indicated by the NUM_RXBYTES register.

    For the above approach you should use packet length filtering and set max packet length to 125. That way you will have room for length byte, 125 payload byte, and 2 status bytes, and the RX FIFO will never overflow.

    Siri

  • thank you much for telling me. I will write the code in the form you said. Is the register where Packet received signal asserted is the MODEM_STATUS1 register?

  • No. The best thing is to program one of the GPIO pins to output this signal  (IOCFGx = 0x06) and wait for a falling edge interrupt, or you can poll MARCSTATE and wait for the radio being back in IDLE state (MARCSTATE = 0x41).

    You can look at the cc112x_easy_link example here:

    www.ti.com/.../swrc253

    Siri

  • Thank you, I have reviewed the details and it makess sense. Thank you always for the good answers.

  • Glad I could help :-)