Post Go back to editing

Linux driver - RF_ENABLED in TDD mode using SPI

Category: Software
Product Number: ADRV9002


We are using TDD profile with RX1 and RX2 generated through TES and linux driver (not the API). RX enable is configured to be via SPI.

I noticed that mode stays in "PRIMED" until I manually switch it to RF_ENABLED using iio_attr binary from libiio.

Is this expected way of activating RX or should driver move RX mode to RF_ENABLED state automatically? I thought driver should take care of this but it never happens.

Am I missing some configuration or is this the way is should behave?

Thank you!

  • So my question is this: driver is only used for initial configuring using stream+profile but it is not responsible for setting rx to enabled in TDD? User space application should do this? (Or fpga?) Or should driver take care of this?

    Once chip is configured via driver we still need app that will enable the rx?

    In FDD mode, nothing is required except driver init?

    Thank you in advance ;)

  • Hi Katarina,

    User space application functions typically calls corresponding device driver functions (see software stack image on page 32 of user guide).

    I assume that most of commands/functions generated in application code generated by TES are just wrapper functions with their lower-level implementations in the driver code. Some of this driver code is written/implemented on the FPGA such as automated TDD feature.

    When you connect to the device in TES, and click program, the device should go to calibrated state. Then it depends, what you need to do, if you start receiving the state goes automatically to RF enabled. If you stop receiving then it goes back to primed, etc. 

    Regarding the difference in operation between TDD and FDD mode when using libiio, I believe the code below sheds light on this inconsistency:

    linux/drivers/iio/adc/navassa/adrv9002.c at 7a7a7fec2ba851a2394fc83156e433add56dd777 · analogdevicesinc/linux · GitHub

    The difference in operation you observed is expected. Because in TDD (where only Rx or Tx is enabled, never both simultaneously) driver cannot know if user wants to go to Rx or Tx first, so it leaves the device in Primed state. In FDD, it puts everything in RF Enabled state.