Post Go back to editing

ADRV9002: MCS setting on the IIO oscilloscope

Category: Software
Product Number: ADRV9002
Software Version: 2021_R2

I am testing MCS with EVAL-ADRV9002 and ZCU102.
UG-1828 has the following description and I figured that even with one ADRV9002 I would need to use MCS to phase match RX1 and RX2.

"MCS is needed when an application requires deterministic latency among datapaths within one ADRV9001 device or multiple ADRV9001 devices."

I have created a json file with MCS enabled.


I loaded the json file on IIO oscilloscope, MCS is now enabled, but the local oscillator of RX cannot be changed from 2400MHz.

(Local frequency could be changed when MCS is disabled.)

I am trying to run MCS using the following procedure, is there a mistake in the procedure?
1. load Json file with MCS enabled in IIO Oscilloscope.
2. Change the local frequency in IIO Oscilloscope.
3. control the MCS pin.

Best regards

hsato

Thread Notes

  • Hi  

    This is Ivan, thank you for reaching out and bringing the matter to our attention. I have received your inquiry and am currently looking into the issue. I will get back at you as soon as possible. 

    Regards

  • Hi,

    First, I would recommend for you to move to the 2022_R2 release as we fixe the LO stuff. But actually note, that was a workaround because there are two fundamental issues with MCS (apparently at the FW level) at this point:

    1) The issue you're already facing with changing the LO;

    2) In our tests, MCS only works once. Meaning, if you try to run it a second time, it will get stuck at some point point.

    - Nuno Sá

  • Thanks for the reply.
    I have verified that I can change the local frequency with MCS enabled on my 2022_R2.
    I then entered 6 pulses on the MCS pin with the following shell script, but MCS does not appear to be running.

    echo 465 > /sys/class/gpio/export
    echo "out" >  /sys/class/gpio/gpio465/direction
    echo 1 >  /sys/class/gpio/gpio465/value
    echo 0 >  /sys/class/gpio/gpio465/value
    sleep 0.001
    echo 1 >  /sys/class/gpio/gpio465/value
    echo 0 >  /sys/class/gpio/gpio465/value
    sleep 0.001
    echo 1 >  /sys/class/gpio/gpio465/value
    echo 0 >  /sys/class/gpio/gpio465/value
    sleep 0.001
    echo 1 >  /sys/class/gpio/gpio465/value
    echo 0 >  /sys/class/gpio/gpio465/value
    sleep 0.001
    echo 1 >  /sys/class/gpio/gpio465/value
    echo 0 >  /sys/class/gpio/gpio465/value
    sleep 0.001
    echo 1 >  /sys/class/gpio/gpio465/value
    echo 0 >  /sys/class/gpio/gpio465/value
    sleep 0.001
    echo 465 > /sys/class/gpio/unexport
    


    1. Is there a mistake in the procedure I am executing?
    2. is there any way to verify that MCS is running?

    Best regards
    hsato

  • Hi

    You need to first set the device in the MCS read state by doing `echo 1 > /sys/bus/iio/devices/iio\:device1/multi_chip_sync`. Since, you're doing it from a script you need to do the echo from the background like `echo 1 > /sys/bus/iio/devices/iio\:device1/multi_chip_sync &`  and then send the pulses. The reason is that the echo will block because the driver will do a busy poll waiting for the 6 pulses and return to you when MCS is done. There's also timeout of 10 seconds for you to send the pulses. If MCS is not done in 11 seconds the poll will timeout.

    - Nuno Sá

  • Thank you for your thoughtful response.
    I performed the MCS using the procedure you described and was able to make the phases of RX1 and RX2 constant.

    Best regards
    hsato