Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PlutoSDR Rx support #23

Closed
f4exb opened this issue Apr 12, 2017 · 13 comments

Comments

Projects
None yet
1 participant

@f4exb f4exb added the feature label Apr 12, 2017

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Jul 24, 2017

@f4exb f4exb added this to the v3.7.0 milestone Aug 9, 2017

@f4exb f4exb self-assigned this Aug 23, 2017

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Aug 28, 2017

Got it working on GNUradio so that's a start. There is a hack to fool it to think it has an AD9364 inside: https://wiki.analog.com/university/tools/pluto/users/customizing So there should be a switch to force AD9364 limits (frequency, sample rate, bandwidth) although not guaranteed. Extended frequency range works at least down to 100 MHz.

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Aug 29, 2017

Had a glance at the AD9363 reference manual. It is quite feature rich and has everything like the LMS7002D but the hardware NCO. That's nice! Hardware decimators/interpolators and FIR filters. Feature rich AGC and gain control. We'll see how this translates with the libiio interface (a bit weird). I think it means that I will base the GUI on the Lime's

Interesting doc on driver hence parameters to be used with libiio (I think...): https://wiki.analog.com/resources/tools-software/linux-drivers/iio-transceiver/ad9361

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Aug 30, 2017

Got a revelation today about the very painful and badly documented libiio interface for the AD9361/3/4. What is refered as "filename" in libiio actually refers to the virtual file names found in the /sys/bus/iio/... structure when a device is directly attached to the host hardware. This is what they use to set parameters in the gr-iio module. This information can help make the connection between the not so badly documented paramerers here: https://wiki.analog.com/resources/tools-software/linux-drivers/iio-transceiver/ad9361 and the libiio interface.

Link to the GNUradio gr-iio module: https://github.com/analogdevicesinc/gr-iio
Direct link to libiio API documentation: http://analogdevicesinc.github.io/libiio/

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Aug 31, 2017

Another source of inspiration or verification: https://github.com/jocover/SoapyPlutoSDR
Also there is a forum dedicated to PlutoSDR: https://www.plutosdr.com/viewforum.php?f=5

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Aug 31, 2017

Modified the libiio ad9361-iiostream example to work with Pluto in a transponder configuration. It works!
Got a similar example working with C++ wrapper classes. Slowly getting to it!

@f4exb f4exb removed their assignment Sep 9, 2017

@f4exb f4exb removed this from the v3.7.0 milestone Sep 9, 2017

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Sep 9, 2017

Despite all efforts this still does not work support is dropped
It's a fail.

@f4exb f4exb closed this Sep 9, 2017

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Sep 10, 2017

This post has comments and links about the very unclear sample rate setting:
https://ez.analog.com/thread/98077

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Sep 10, 2017

Implementation in SDRangel is impossible due to libiio and gr-libiio code obfuscation and lack of documentation.

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Sep 10, 2017

Examples like this from AD documentation are just plain wrong:

            for (p_dat = iio_buffer_first(rxbuf, rx0_i); p_dat < p_end; p_dat += p_inc, t_dat += p_inc) {
		const int16_t i = ((int16_t*)p_dat)[0]; // Real (I)
		const int16_t q = ((int16_t*)p_dat)[1]; // Imag (Q)

		/* Process here */

	}

I and Q samples are processed one after the other in a loop iteration for each and not as an (I,Q) group.

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Sep 10, 2017

This last discovery seems to have unlocked the progress on development. So PlutoSDR support at least for Rx should be possible.

@f4exb f4exb reopened this Sep 10, 2017

@f4exb f4exb self-assigned this Sep 10, 2017

@f4exb f4exb added this to the v3.7.0 milestone Sep 10, 2017

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Sep 10, 2017

A reasonably working version for Rx is now on dev branch.

@f4exb f4exb changed the title PlutoSDR support PlutoSDR Rx support Sep 10, 2017

@f4exb

This comment has been minimized.

Copy link
Owner Author

commented Sep 11, 2017

Implemented in v3.7.0

@f4exb f4exb closed this Sep 11, 2017

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.