AD9361 ADC/DAC Test Applications

BP
Brian Padalino
Fri, Apr 3, 2020 4:17 PM

I am porting the AD9361 ADC/DAC test applications to my platform and I am
getting some very confusing results.

At first I was only running the ADC test since I know the DAC test uses the
ADC lines in a local loopback mode.  Without the ADC lines figured out, I
thought it was very silly to try the DAC test.  The ADC test runs the PRBS
and gives me around 30% BER across all samplerates and timings.  I looked
at the saved off samples to ensure the device is being put into the correct
mode.  I did not check the values against a known sequence or anything.

I then decided to look at the DAC test and saw there is are a few tests:
all 0x0, all 0xF, all 0x5, all 0xA, LFSR.  I figured I would just try
running these tests to see if I could deduce any behavior for the paths.
To my surprise, the BER came back at 0% for all these tests.  The PRBS
test, on the other hand, still comes back around 30% BER.

This has me very confused.  I have to assume that if I sent LFSR data into
the TX side, and it comes back perfectly on the RX side, then the interface
timing is good, right?  I don't understand why the PRBS test fails with
around 30% errors.

Has anyone else run this test on a different platform lately?  I saw some
documents alluding to an Ettus E3xx test.  Does it run perfectly on that?

I'm scratching my head on the different BER values for the tests.  Any
insight would be appreciated.

Thanks,
Brian

I am porting the AD9361 ADC/DAC test applications to my platform and I am getting some very confusing results. At first I was only running the ADC test since I know the DAC test uses the ADC lines in a local loopback mode. Without the ADC lines figured out, I thought it was very silly to try the DAC test. The ADC test runs the PRBS and gives me around 30% BER across all samplerates and timings. I looked at the saved off samples to ensure the device is being put into the correct mode. I did not check the values against a known sequence or anything. I then decided to look at the DAC test and saw there is are a few tests: all 0x0, all 0xF, all 0x5, all 0xA, LFSR. I figured I would just try running these tests to see if I could deduce any behavior for the paths. To my surprise, the BER came back at 0% for all these tests. The PRBS test, on the other hand, still comes back around 30% BER. This has me very confused. I have to assume that if I sent LFSR data into the TX side, and it comes back perfectly on the RX side, then the interface timing is good, right? I don't understand why the PRBS test fails with around 30% errors. Has anyone else run this test on a different platform lately? I saw some documents alluding to an Ettus E3xx test. Does it run perfectly on that? I'm scratching my head on the different BER values for the tests. Any insight would be appreciated. Thanks, Brian
DH
Davis Hoover
Fri, Apr 3, 2020 5:53 PM

These tests use the ad9361_config_proxy.rcc which require setting the
delays to a known-good value. This has been exemplified in a separate BSP
project, which does work correctly:
https://gitlab.com/opencpi/osp/ocpi.osp.e3xx/-/blob/develop/applications/ad9361_adc_test/scripts/run_app.sh#L97
Are these values being set correctly for your platform?

---------- Forwarded message ---------
From: Brian Padalino bpadalino@gmail.com
Date: Fri, Apr 3, 2020 at 12:18 PM
Subject: [Discuss OpenCPI] AD9361 ADC/DAC Test Applications
To: discuss@lists.opencpi.org

I am porting the AD9361 ADC/DAC test applications to my platform and I am
getting some very confusing results.

At first I was only running the ADC test since I know the DAC test uses the
ADC lines in a local loopback mode.  Without the ADC lines figured out, I
thought it was very silly to try the DAC test.  The ADC test runs the PRBS
and gives me around 30% BER across all samplerates and timings.  I looked
at the saved off samples to ensure the device is being put into the correct
mode.  I did not check the values against a known sequence or anything.

I then decided to look at the DAC test and saw there is are a few tests:
all 0x0, all 0xF, all 0x5, all 0xA, LFSR.  I figured I would just try
running these tests to see if I could deduce any behavior for the paths.
To my surprise, the BER came back at 0% for all these tests.  The PRBS
test, on the other hand, still comes back around 30% BER.

This has me very confused.  I have to assume that if I sent LFSR data into
the TX side, and it comes back perfectly on the RX side, then the interface
timing is good, right?  I don't understand why the PRBS test fails with
around 30% errors.

Has anyone else run this test on a different platform lately?  I saw some
documents alluding to an Ettus E3xx test.  Does it run perfectly on that?

I'm scratching my head on the different BER values for the tests.  Any
insight would be appreciated.

Thanks,
Brian

These tests use the ad9361_config_proxy.rcc which require setting the delays to a known-good value. This has been exemplified in a separate BSP project, which does work correctly: https://gitlab.com/opencpi/osp/ocpi.osp.e3xx/-/blob/develop/applications/ad9361_adc_test/scripts/run_app.sh#L97 Are these values being set correctly for your platform? ---------- Forwarded message --------- From: Brian Padalino <bpadalino@gmail.com> Date: Fri, Apr 3, 2020 at 12:18 PM Subject: [Discuss OpenCPI] AD9361 ADC/DAC Test Applications To: <discuss@lists.opencpi.org> I am porting the AD9361 ADC/DAC test applications to my platform and I am getting some very confusing results. At first I was only running the ADC test since I know the DAC test uses the ADC lines in a local loopback mode. Without the ADC lines figured out, I thought it was very silly to try the DAC test. The ADC test runs the PRBS and gives me around 30% BER across all samplerates and timings. I looked at the saved off samples to ensure the device is being put into the correct mode. I did not check the values against a known sequence or anything. I then decided to look at the DAC test and saw there is are a few tests: all 0x0, all 0xF, all 0x5, all 0xA, LFSR. I figured I would just try running these tests to see if I could deduce any behavior for the paths. To my surprise, the BER came back at 0% for all these tests. The PRBS test, on the other hand, still comes back around 30% BER. This has me very confused. I have to assume that if I sent LFSR data into the TX side, and it comes back perfectly on the RX side, then the interface timing is good, right? I don't understand why the PRBS test fails with around 30% errors. Has anyone else run this test on a different platform lately? I saw some documents alluding to an Ettus E3xx test. Does it run perfectly on that? I'm scratching my head on the different BER values for the tests. Any insight would be appreciated. Thanks, Brian
BP
Brian Padalino
Fri, Apr 3, 2020 6:08 PM

On Fri, Apr 3, 2020 at 1:54 PM Davis Hoover dhoover@geontech.com wrote:

These tests use the ad9361_config_proxy.rcc which require setting the
delays to a known-good value. This has been exemplified in a separate BSP
project, which does work correctly:

https://gitlab.com/opencpi/osp/ocpi.osp.e3xx/-/blob/develop/applications/ad9361_adc_test/scripts/run_app.sh#L97
Are these values being set correctly for your platform?

I am setting them according to a known good set for this radio from a
different application that was run on it.

Regardless, my confusion stems from why both the ADC and DAC tests which
use the PRBS show 30% BER, but the DAC tests which do not use the PRBS but
still use the TX and RX paths show 0% BER.

My thought is that if the RX-only path doesn't work, why would the TX path?

Sorry for the confusion.  Still perplexed.

Thanks,
Brian

On Fri, Apr 3, 2020 at 1:54 PM Davis Hoover <dhoover@geontech.com> wrote: > These tests use the ad9361_config_proxy.rcc which require setting the > delays to a known-good value. This has been exemplified in a separate BSP > project, which does work correctly: > > https://gitlab.com/opencpi/osp/ocpi.osp.e3xx/-/blob/develop/applications/ad9361_adc_test/scripts/run_app.sh#L97 > Are these values being set correctly for your platform? > I am setting them according to a known good set for this radio from a different application that was run on it. Regardless, my confusion stems from why both the ADC and DAC tests which use the PRBS show 30% BER, but the DAC tests which do not use the PRBS but still use the TX and RX paths show 0% BER. My thought is that if the RX-only path doesn't work, why would the TX path? Sorry for the confusion. Still perplexed. Thanks, Brian
DH
Davis Hoover
Fri, Apr 3, 2020 6:16 PM

No worries. It may be helpful to run the target-*/calculate...
executable on the .out files for both the ADC and DAC tests to observe
whether the data looks like reasonable LFSR data. Check the arguments
on that executable, there should be an option for printing out the
0s/1s which make LFSR behavior obvious. It's also useful to parse the
output for, e.g. "1 of which had bit errors"

---------- Forwarded message ---------
From: Brian Padalino bpadalino@gmail.com
Date: Fri, Apr 3, 2020 at 2:08 PM
Subject: Re: [Discuss OpenCPI] Fwd: AD9361 ADC/DAC Test Applications
To: Davis Hoover dhoover@geontech.com
Cc: discuss@lists.opencpi.org

On Fri, Apr 3, 2020 at 1:54 PM Davis Hoover dhoover@geontech.com wrote:

These tests use the ad9361_config_proxy.rcc which require setting the
delays to a known-good value. This has been exemplified in a separate BSP
project, which does work correctly:
https://gitlab.com/opencpi/osp/ocpi.osp.e3xx/-/blob/develop/applications/ad9361_adc_test/scripts/run_app.sh#L97
Are these values being set correctly for your platform?

I am setting them according to a known good set for this radio from a
different application that was run on it.

Regardless, my confusion stems from why both the ADC and DAC tests
which use the PRBS show 30% BER, but the DAC tests which do not use
the PRBS but still use the TX and RX paths show 0% BER.

My thought is that if the RX-only path doesn't work, why would the TX path?

Sorry for the confusion.  Still perplexed.

Thanks,
Brian

No worries. It may be helpful to run the target-*/calculate... executable on the .out files for both the ADC and DAC tests to observe whether the data looks like reasonable LFSR data. Check the arguments on that executable, there should be an option for printing out the 0s/1s which make LFSR behavior obvious. It's also useful to parse the output for, e.g. "1 of which had bit errors" ---------- Forwarded message --------- From: Brian Padalino <bpadalino@gmail.com> Date: Fri, Apr 3, 2020 at 2:08 PM Subject: Re: [Discuss OpenCPI] Fwd: AD9361 ADC/DAC Test Applications To: Davis Hoover <dhoover@geontech.com> Cc: <discuss@lists.opencpi.org> On Fri, Apr 3, 2020 at 1:54 PM Davis Hoover <dhoover@geontech.com> wrote: > > These tests use the ad9361_config_proxy.rcc which require setting the > delays to a known-good value. This has been exemplified in a separate BSP > project, which does work correctly: > https://gitlab.com/opencpi/osp/ocpi.osp.e3xx/-/blob/develop/applications/ad9361_adc_test/scripts/run_app.sh#L97 > Are these values being set correctly for your platform? I am setting them according to a known good set for this radio from a different application that was run on it. Regardless, my confusion stems from why both the ADC and DAC tests which use the PRBS show 30% BER, but the DAC tests which do not use the PRBS but still use the TX and RX paths show 0% BER. My thought is that if the RX-only path doesn't work, why would the TX path? Sorry for the confusion. Still perplexed. Thanks, Brian
BP
Brian Padalino
Fri, Apr 3, 2020 6:34 PM

On Fri, Apr 3, 2020 at 2:17 PM Davis Hoover dhoover@geontech.com wrote:

No worries. It may be helpful to run the target-*/calculate...
executable on the .out files for both the ADC and DAC tests to observe
whether the data looks like reasonable LFSR data. Check the arguments
on that executable, there should be an option for printing out the
0s/1s which make LFSR behavior obvious. It's also useful to parse the
output for, e.g. "1 of which had bit errors"

Just for clarification, do you mean PRBS or LFSR?  It seems on the DAC side
there is a mode for sending LFSR data into the device, and reading it back
out versus the PRBS which is internally generated to the AD9361.

Which do you mean for this?

Thanks,
Brian

On Fri, Apr 3, 2020 at 2:17 PM Davis Hoover <dhoover@geontech.com> wrote: > No worries. It may be helpful to run the target-*/calculate... > executable on the .out files for both the ADC and DAC tests to observe > whether the data looks like reasonable LFSR data. Check the arguments > on that executable, there should be an option for printing out the > 0s/1s which make LFSR behavior obvious. It's also useful to parse the > output for, e.g. "1 of which had bit errors" > Just for clarification, do you mean PRBS or LFSR? It seems on the DAC side there is a mode for sending LFSR data into the device, and reading it back out versus the PRBS which is internally generated to the AD9361. Which do you mean for this? Thanks, Brian
DH
Davis Hoover
Fri, Apr 3, 2020 6:44 PM

The AD9361 BIST PRBS mode utilizes an on-AD9361 LFSR. The OpenCPI
applications for both the AD9361 BIST PRBS, which verifies the ADC
interface, and the AD9361 BIST loopback, which verifies the DAC and ADC
interface, each utilize the same bitwise LFSR verification on the .out
file(s).

---------- Forwarded message ---------
From: Brian Padalino bpadalino@gmail.com
Date: Fri, Apr 3, 2020 at 2:34 PM
Subject: Re: [Discuss OpenCPI] Fwd: Fwd: AD9361 ADC/DAC Test Applications
To: Davis Hoover dhoover@geontech.com
Cc: discuss@lists.opencpi.org

On Fri, Apr 3, 2020 at 2:17 PM Davis Hoover dhoover@geontech.com wrote:

No worries. It may be helpful to run the target-*/calculate...
executable on the .out files for both the ADC and DAC tests to observe
whether the data looks like reasonable LFSR data. Check the arguments
on that executable, there should be an option for printing out the
0s/1s which make LFSR behavior obvious. It's also useful to parse the
output for, e.g. "1 of which had bit errors"

Just for clarification, do you mean PRBS or LFSR?  It seems on the DAC side
there is a mode for sending LFSR data into the device, and reading it back
out versus the PRBS which is internally generated to the AD9361.

Which do you mean for this?

Thanks,
Brian

The AD9361 BIST PRBS mode utilizes an on-AD9361 LFSR. The OpenCPI applications for both the AD9361 BIST PRBS, which verifies the ADC interface, and the AD9361 BIST loopback, which verifies the DAC and ADC interface, each utilize the same bitwise LFSR verification on the .out file(s). ---------- Forwarded message --------- From: Brian Padalino <bpadalino@gmail.com> Date: Fri, Apr 3, 2020 at 2:34 PM Subject: Re: [Discuss OpenCPI] Fwd: Fwd: AD9361 ADC/DAC Test Applications To: Davis Hoover <dhoover@geontech.com> Cc: <discuss@lists.opencpi.org> On Fri, Apr 3, 2020 at 2:17 PM Davis Hoover <dhoover@geontech.com> wrote: > No worries. It may be helpful to run the target-*/calculate... > executable on the .out files for both the ADC and DAC tests to observe > whether the data looks like reasonable LFSR data. Check the arguments > on that executable, there should be an option for printing out the > 0s/1s which make LFSR behavior obvious. It's also useful to parse the > output for, e.g. "1 of which had bit errors" > Just for clarification, do you mean PRBS or LFSR? It seems on the DAC side there is a mode for sending LFSR data into the device, and reading it back out versus the PRBS which is internally generated to the AD9361. Which do you mean for this? Thanks, Brian
BP
Brian Padalino
Fri, Apr 3, 2020 7:08 PM

On Fri, Apr 3, 2020 at 2:45 PM Davis Hoover dhoover@geontech.com wrote:

The AD9361 BIST PRBS mode utilizes an on-AD9361 LFSR. The OpenCPI
applications for both the AD9361 BIST PRBS, which verifies the ADC
interface, and the AD9361 BIST loopback, which verifies the DAC and ADC
interface, each utilize the same bitwise LFSR verification on the .out
file(s).

So this is where the confusion comes from.  There is a mode which runs such
that the data_src is set to 'mode=lfsr', the spec is here:

https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/components/misc_comps/specs/data_src-spec.xml#L48

The script is here:

https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/AD9361_BIST_loopback.sh#L249

And it's called here:

https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/ad9361_dac_test.sh#L147

But the PRBS test is called here:

https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/ad9361_dac_test.sh#L86

So if I comment out the PRBS test, and only run the loopback test - things
work spectacularly great - 0% BER.

But the PRBS test runs with 30% BER.

I suppose I should have clarified specifically I am using the loopback test
when it shows 0% BER.

Does this help shed any light on anything, especially regarding my
confusion?  I would have thought the loopback test would fail miserably if
the PRBS test also does.  But this is not the case.

Thanks,
Brian

On Fri, Apr 3, 2020 at 2:45 PM Davis Hoover <dhoover@geontech.com> wrote: > The AD9361 BIST PRBS mode utilizes an on-AD9361 LFSR. The OpenCPI > applications for both the AD9361 BIST PRBS, which verifies the ADC > interface, and the AD9361 BIST loopback, which verifies the DAC and ADC > interface, each utilize the same bitwise LFSR verification on the .out > file(s). > So this is where the confusion comes from. There is a mode which runs such that the data_src is set to 'mode=lfsr', the spec is here: https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/components/misc_comps/specs/data_src-spec.xml#L48 The script is here: https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/AD9361_BIST_loopback.sh#L249 And it's called here: https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/ad9361_dac_test.sh#L147 But the PRBS test is called here: https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/ad9361_dac_test.sh#L86 So if I comment out the PRBS test, and only run the loopback test - things work spectacularly great - 0% BER. But the PRBS test runs with 30% BER. I suppose I should have clarified specifically I am using the loopback test when it shows 0% BER. Does this help shed any light on anything, especially regarding my confusion? I would have thought the loopback test would fail miserably if the PRBS test also does. But this is not the case. Thanks, Brian
DH
Davis Hoover
Fri, Apr 3, 2020 8:24 PM

Okay I'm with you now. Your confusion is definitely warranted. Something's
gotta be different between the PRBS and loopback... May be worth trying to
manually run each PRBS/loopback test by running ocpirun -p on the command
line and using the calculate BER executable on the output files. Double
check which assembly is loaded in each case to ensure it's not loading a
different one - ocpihdl get should show an assembly UUID.

---------- Forwarded message ---------
From: Brian Padalino bpadalino@gmail.com
Date: Fri, Apr 3, 2020 at 3:08 PM
Subject: Re: [Discuss OpenCPI] Fwd: Fwd: AD9361 ADC/DAC Test Applications
To: Davis Hoover dhoover@geontech.com
Cc: discuss@lists.opencpi.org

On Fri, Apr 3, 2020 at 2:45 PM Davis Hoover dhoover@geontech.com wrote:

The AD9361 BIST PRBS mode utilizes an on-AD9361 LFSR. The OpenCPI
applications for both the AD9361 BIST PRBS, which verifies the ADC
interface, and the AD9361 BIST loopback, which verifies the DAC and ADC
interface, each utilize the same bitwise LFSR verification on the .out
file(s).

So this is where the confusion comes from.  There is a mode which runs such
that the data_src is set to 'mode=lfsr', the spec is here:

https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/components/misc_comps/specs/data_src-spec.xml#L48

The script is here:

https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/AD9361_BIST_loopback.sh#L249

And it's called here:

https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/ad9361_dac_test.sh#L147

But the PRBS test is called here:

https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/ad9361_dac_test.sh#L86

So if I comment out the PRBS test, and only run the loopback test - things
work spectacularly great - 0% BER.

But the PRBS test runs with 30% BER.

I suppose I should have clarified specifically I am using the loopback test
when it shows 0% BER.

Does this help shed any light on anything, especially regarding my
confusion?  I would have thought the loopback test would fail miserably if
the PRBS test also does.  But this is not the case.

Thanks,
Brian

Okay I'm with you now. Your confusion is definitely warranted. Something's gotta be different between the PRBS and loopback... May be worth trying to manually run each PRBS/loopback test by running ocpirun -p on the command line and using the calculate BER executable on the output files. Double check which assembly is loaded in each case to ensure it's not loading a different one - ocpihdl get should show an assembly UUID. ---------- Forwarded message --------- From: Brian Padalino <bpadalino@gmail.com> Date: Fri, Apr 3, 2020 at 3:08 PM Subject: Re: [Discuss OpenCPI] Fwd: Fwd: AD9361 ADC/DAC Test Applications To: Davis Hoover <dhoover@geontech.com> Cc: <discuss@lists.opencpi.org> On Fri, Apr 3, 2020 at 2:45 PM Davis Hoover <dhoover@geontech.com> wrote: > The AD9361 BIST PRBS mode utilizes an on-AD9361 LFSR. The OpenCPI > applications for both the AD9361 BIST PRBS, which verifies the ADC > interface, and the AD9361 BIST loopback, which verifies the DAC and ADC > interface, each utilize the same bitwise LFSR verification on the .out > file(s). > So this is where the confusion comes from. There is a mode which runs such that the data_src is set to 'mode=lfsr', the spec is here: https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/components/misc_comps/specs/data_src-spec.xml#L48 The script is here: https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/AD9361_BIST_loopback.sh#L249 And it's called here: https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/ad9361_dac_test.sh#L147 But the PRBS test is called here: https://gitlab.com/opencpi/opencpi/-/blob/7b689ca89f329f1845290626ab95647946877082/projects/assets/applications/ad9361_dac_test/scripts/ad9361_dac_test.sh#L86 So if I comment out the PRBS test, and only run the loopback test - things work spectacularly great - 0% BER. But the PRBS test runs with 30% BER. I suppose I should have clarified specifically I am using the loopback test when it shows 0% BER. Does this help shed any light on anything, especially regarding my confusion? I would have thought the loopback test would fail miserably if the PRBS test also does. But this is not the case. Thanks, Brian