I am trying to use the Pluto as an SDR transceiver for amateur radio use with SDR-Radio Console <https://www.sdr-radio.com/>
I have problems with the RF output power being very unstable. I am using a Bodnar GPSDO with 40 mhz output as the external reference clock.
To try to troubleshoot the power instability issue, I monitored the output of the Pluto on a conventional receiver and was surprised to find the Pluto off frequency and drifting badly.
I have set the Bodnar device output level to : +7.7dBm, drive setting 8mA, and have tested with various attenuators between the Bodnar and the Pluto (-3db, -5db, -8db and -10db) with no success.
Disconnecting the Bodnar to substitute attenuators seems to have no effect on frequency generation in the Pluto, but it does apparently cause a reboot of the Pluto.
Any suggested solutions are appreciated.
I found this thread on ADI:
Following the suggested procedures there I acquired the following data from the Pluto in hopes it would help find the issue:
Welcome to Pluto
pluto login: root
Password:
Welcome to:
______ _ _ _________________
| ___ \ | | | / ___| _ \ ___ \
| |_/ / |_ _| |_ ___ \ `--.| | | | |_/ /
| __/| | | | | __/ _ \ `--. \ | | | /
| | | | |_| | || (_) /\__/ / |/ /| |\ \
\_| |_|\__,_|\__\___/\____/|___/ \_| \_|
v0.39
wiki.analog.com/.../pluto
# fw_printenv
ad936x_ext_refclk=<39999897>
adi_loadvals=fdt addr ${fit_load_address} && fdt get value fdt_choosen /configurations/${fit_config}/ fdt && fdt get addr fdtaddr /images/${fdt_choosen} data && fdt addr ${fdtaddr}; if test -n ${ad936x_ext_refclk} && test ! -n ${ad936x_skip_ext_refclk}; then fdt set /clocks/clock@0 clock-frequency ${ad936x_ext_refclk}; fi; fdt get value model / model; if test -n ${ad936x_ext_refclk_override} && test "${model}" = "Analog Devices PlutoSDR Rev.C (Z7010/AD9363)"; then fdt set /clocks/clock@0 clock-frequency ${ad936x_ext_refclk_override}; fi; if test ${refclk_source} = internal || test ! "${model}" = "Analog Devices PlutoSDR Rev.C (Z7010/AD9363)" ; then fdt rm /amba/gpio@e000a000/clock_extern_en; fi; if test -n ${attr_name} && test -n ${attr_val}; then fdt set /amba/spi@e0006000/ad9361-phy@0 ${attr_name} ${attr_val}; fi; if test ${refclk_source} = external || test ! "${model}" = "Analog Devices PlutoSDR Rev.C (Z7010/AD9363)" ; then fdt rm /amba/gpio@e000a000/clock_internal_en; fi; if test -n ${compatible} && test ! ${compatible} = ad9361 && test ! ${compatible} = ad9363a && test ! ${compatible} = ad9364; then setenv compatible ad9363a; saveenv; fi; if test -n ${mode} && test ! ${mode} = 1r1t && test ! ${mode} = 2r2t; then setenv mode 1r1t; saveenv; fi; if test -n ${refclk_source} && test ! ${refclk_source} = internal && test ! ${refclk_source} = external; then setenv refclk_source internal; saveenv; fi; if test -n ${compatible}; then fdt set /amba/spi@e0006000/ad9361-phy@0 compatible ${compatible}; fi; if test ${compatible} = ad9361 && test ! "${model}" = "Analog Devices PlutoSDR Rev.C (Z7010/AD9363)" ; then fdt set /amba/spi@e0006000/ad9361-phy@0 compatible ad9363a; compatible=ad9363a; fi; if test ${mode} = 1r1t || test ! "${model}" = "Analog Devices PlutoSDR Rev.C (Z7010/AD9363)"; then fdt rm /amba/spi@e0006000/ad9361-phy@0 adi,2rx-2tx-mode-enable; fi; if test -n ${cs_gpio}; then fdt set /amba/axi_quad_spi@7C430000/ cs-gpios "<0x06 ${cs_gpio} 0>"; fi; if test ${compatible} = ad9364 || test -n ${attr_val} = ad9364; then fdt rm /amba/spi@e0006000/ad9361-phy@0 adi,2rx-2tx-mode-enable; fdt set /fpga-axi/cf-ad9361-dds-core-lpc@79024000 compatible adi,axi-ad9364-dds-6.00.a; setenv mode 1r1t; saveenv; fi;
baudrate=115200
bitstream_image=system.bit.bin
bitstream_size=0x400000
boot_image=BOOT.bin
boot_size=0xF00000
bootcmd=run $modeboot
bootdelay=0
bootenv=uEnv.txt
clear_reset_cause=mw f8000008 df0d && mw f8000258 00400000 && mw f8000004 767b
devicetree_image=devicetree.dtb
devicetree_load_address=0x2000000
devicetree_size=0x20000
dfu_ram=echo Entering DFU RAM mode ... && run dfu_ram_info && dfu 0 ram 0
dfu_ram_info=set dfu_alt_info dummy.dfu ram 0 0\\;firmware.dfu ram ${fit_load_address} 0x1E00000
dfu_sf=gpio set 15;set stdout serial@e0001000;echo Entering DFU SF mode ... && run dfu_sf_info && dfu 0 sf 0:0:40000000:0 && if test -n ${dfu_alt_num} && test ${dfu_alt_num} = 1; then set fit_size ${filesize} && set dfu_alt_num && env save; fi;gpio clear 15;
dfu_sf_info=set dfu_alt_info boot.dfu raw 0x0 0x100000\\;firmware.dfu raw 0x200000 0x1E00000\\;uboot-extra-env.dfu raw 0xFF000 0x1000\\;uboot-env.dfu raw 0x100000 0x20000\\;spare.dfu raw 0x120000 0xE0000
ethaddr=00:0a:35:00:01:22
extraenv_load_address=0x207E000
fdt_choosen=fdt@3
fdt_high=0x20000000
fdtaddr=208af24
fdtcontroladdr=1ff99320
fit_config=config@8
fit_load_address=0x2080000
fit_size=0x900000
importbootenv=echo Importing environment from SD ...; env import -t ${loadbootenv_addr} $filesize
initrd_high=0x20000000
ipaddr=192.168.2.1
ipaddr_host=192.168.2.10
jtagboot=env default -a;sf probe && sf protect unlock 0 100000 && run dfu_sf;
kernel_image=uImage
loadbit_addr=0x100000
loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}
loadbootenv_addr=0x2000000
maxcpus=1
mode=1r1t
modeboot=qspiboot
model=Analog Devices PlutoSDR Rev.C (Z7010/AD9363)
netmask=255.255.255.0
preboot=if test $modeboot = sdboot && env run sd_uEnvtxt_existence_test; then if env run loadbootenv; then env run importbootenv; fi; fi;
productkey=dcd7eacfcecae5f8b4318df6dc0afa9ea9e2ffde
qspiboot=set stdout nulldev;adi_hwref;test -n $PlutoRevA || gpio input 14 && set stdout serial@e0001000 && sf probe && sf protect lock 0 100000 && run dfu_sf; set stdout serial@e0001000;itest *f8000258 == 480003 && run clear_reset_cause && run dfu_sf; itest *f8000258 == 480007 && run clear_reset_cause && run ramboot_verbose; itest *f8000258 == 480006 && run clear_reset_cause && run qspiboot_verbose; itest *f8000258 == 480002 && run clear_reset_cause && exit; echo Booting silently && set stdout nulldev; run read_sf && run adi_loadvals; envversion;setenv bootargs console=ttyPS0,115200 maxcpus=${maxcpus} rootfstype=ramfs root=/dev/ram0 rw quiet loglevel=4 uboot="${uboot-version}" && bootm ${fit_load_address}#${fit_config} || set stdout serial@e0001000;echo BOOT failed entering DFU mode ... && sf protect lock 0 100000 && run dfu_sf
qspiboot_extraenv=sf read ${extraenv_load_address} 0xFF000 0x1000 && env import -c ${extraenv_load_address} 0x1000 || true
qspiboot_verbose=adi_hwref;echo Copying Linux from QSPI flash to RAM... && run read_sf && if run adi_loadvals; then echo Loaded AD936x refclk frequency and model into devicetree; fi; envversion;setenv bootargs console=ttyPS0,115200 maxcpus=${maxcpus} rootfstype=ramfs root=/dev/ram0 rw earlyprintk uboot="${uboot-version}" && bootm ${fit_load_address}#${fit_config} || echo BOOT failed entering DFU mode ... && run dfu_sf
ramboot_verbose=adi_hwref;echo Copying Linux from DFU to RAM... && run dfu_ram;if run adi_loadvals; then echo Loaded AD936x refclk frequency and model into devicetree; fi; envversion;setenv bootargs console=ttyPS0,115200 maxcpus=${maxcpus} rootfstype=ramfs root=/dev/ram0 rw earlyprintk uboot="${uboot-version}" && bootm ${fit_load_address}#${fit_config}
ramdisk_image=uramdisk.image.gz
ramdisk_load_address=0x4000000
ramdisk_size=0x400000
read_sf=sf probe 0:0 50000000 0 && run qspiboot_extraenv &&sf read ${fit_load_address} 0x200000 ${fit_size} && iminfo ${fit_load_address} || sf read ${fit_load_address} 0x200000 0x1E00000;
refclk_source=internal
sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt
serial=104473e6a60f00011d002e00813417a0c9
stderr=serial@e0001000
stdin=serial@e0001000
stdout=nulldev
thor_ram=run dfu_ram_info && thordown 0 ram 0
uenvboot=if run loadbootenv; then echo Loaded environment from ${bootenv}; run importbootenv; fi; if test -n $uenvcmd; then echo Running uenvcmd ...; run uenvcmd; fi
usbboot=if usb start; then run uenvboot; echo Copying Linux from USB to RAM... && load usb 0 ${fit_load_address} ${kernel_image} && load usb 0 ${devicetree_load_address} ${devicetree_image} && load usb 0 ${ramdisk_load_address} ${ramdisk_image} && bootm ${fit_load_address} ${ramdisk_load_address} ${devicetree_load_address}; fi
#
# device_reboot break
# Stopping input-event-daemon: done
Stopping dropbear sshd: OK
Stopping MSD Daemon: OK
Stopping dhcpd Daemon & httpd Server: OK
Stopping network: ifdown: interface usb1 not configured
ifdown: interface eth0 not configured
OK
Stopping system message bus: done
Stopping UDC Gadgets
Seeding 256 bits without crediting
Saving 256 bits of creditable seed for next boot
Stopping klogd: OK
Stopping syslogd: OK
umount: devtmpfs busy - remounted read-only
umount: can't unmount /: Invalid argument
The system is going down NOW!
Sent SIGTERM to all processes
Sent SIGKILL to all processes
Requesting system reboot
reboot: Restarting system
U-Boot PlutoSDR v0.20-PlutoSDR-00055-g469a0fd (Jul 06 2020 - 16:01:30 +0200)
I2C: ready
DRAM: ECC disabled 512 MiB
SF: Detected N25Q256A with page size 256 Bytes, erase size 4 KiB, total 32 MiB
In: serial@e0001000
Out: serial@e0001000
Err: serial@e0001000
Model: Zynq Pluto SDR Board
Hit any key to stop autoboot: 0
Pluto>
Pluto>
Pluto> adi_hwref
804
Pluto> print fit_config
fit_config=config@8
Pluto>