Wiki

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
university:tools:pluto:hacking:power_amp [10 Jul 2019 23:30] – [VDD_GPO] Robin Getzuniversity:tools:pluto:hacking:power_amp [13 Jul 2019 02:19] – [Test Results] Robin Getz
Line 23: Line 23:
 More information about the [[adi>AD9363]] can be found on the product page. More information about the [[adi>AD9363]] can be found on the product page.
  
-===== ADLM-PLUTO implementation =====+===== ADALM-PLUTO implementation =====
  
 ==== VDD_GPO ==== ==== VDD_GPO ====
Line 83: Line 83:
  
 {{ :university:tools:pluto:hacking:gpo_rx_tx.png?600 |}} {{ :university:tools:pluto:hacking:gpo_rx_tx.png?600 |}}
 +
 +<WRAP round help>While this shows the Rx/Tx switching in 30-35ms or so, this is based on **software** control over SPI, running in an interpreted bash shell. Doing things in a C application, would make things faster, and doing things via pin control (via a state machine in the FPGA) can make things sub ~30 μs between Rx and Tx swaps to handle slotted specifications like LTE. IF you need things to go faster - just ask.
 +</WRAP>
 +
 +OK, someone asked for the C code - it's pretty trivial, just longer. You will need to change the uri, and put in proper error checking.
 +
 +<code>
 +#include <stdio.h>
 +#include <iio.h>
 +#include <unistd.h>
 +#include <stdio.h>
 +#include <signal.h>
 +
 +
 +volatile sig_atomic_t stop = 0;
 +
 +void inthand(int signum) {
 +        stop = 1;
 +}
 +
 +int main(int argc, char **argv)
 +{
 +        struct iio_context *ctx;
 +        struct iio_device *dev;
 +        struct iio_channel *ch;
 +        const char* val_str;
 +        ssize_t ret = 0;
 +        char buf[256];
 +
 +        signal(SIGINT, inthand);
 +
 +        /* Create IIO Context */
 +        ctx = iio_create_context_from_uri("usb:1.3.5");
 +
 +        /* Find IIO device in current context */
 +        dev = iio_context_find_device(ctx, "ad9361-phy");
 +
 +        /* Write into the IIO debug attributes */
 +        iio_device_debug_attr_write_bool(dev, "adi,frequency-division-duplex-mode-enable", 0);
 +        iio_device_debug_attr_write_bool(dev, "adi,gpo0-slave-rx-enable", 1);
 +        iio_device_debug_attr_write_bool(dev, "adi,gpo1-slave-tx-enable", 1);
 +        iio_device_debug_attr_write_bool(dev, "initialize", 1);
 +        
 +        while (!stop) {
 +                ret++;
 +                iio_device_attr_write(dev, "ensm_mode", "rx");
 +                iio_device_attr_write(dev, "ensm_mode", "tx");
 +        }
 +        iio_context_destroy(ctx);
 +        printf("iteration = %li\n", ret);
 +        return EXIT_SUCCESS;
 +}
 +</code>
 +
 +Over USB, you get:<xterm>
 + time ./foo 
 +^Citteration = 2693
 +
 +real 0m5.283s
 +</xterm>
 +
 +or about 0.980876346 ms per Rx/Tx slot.
 ===== Testing in IIO Oscilloscope ===== ===== Testing in IIO Oscilloscope =====
  
university/tools/pluto/hacking/power_amp.txt · Last modified: 16 Jul 2019 20:15 by Robin Getz