I'm trying to get the AD-FMCOMMS3-EBZ card working on the ZCU102 (ES2 version) board.
For the OS, I'm building my Linux distribution for the board using Yocto. I've tried:
- Using the Xilinx 4.6 kernel and patching in the appropriate IIO pieces from the Analog Devices kernel (the "xcomm_zynq" branch).
- Using the Analog Devices kernel directly.
Both kernels give me similar results.
For the HDL, I'm using the AD HDL repo, on the "dev" branch, building the projects/fmcomms2/zcu102 target, using Vivado 2016.4. I had to make a couple of changes:
- Changed the AXI addresses of the AD cores, so that they'd match the addresses found in default example device tree.
- axi_ad9361: 8000 0000
- axi_ad9361_adc_dma: 8001 0000
- axi_ad9361_dac_dma: 8002 0000
- Changed some of the pin numbers in "system_constr.xdc". It looks like the pins were set for the ES1 board, and a few pins changed between the ES1 and ES2.
For the device tree, I'm using the "zynqmp-zcu102-revB-ad9361-fmcomms2-3.dts" found in the AD kernel source.
And of course, I've got the AD-FMCOMMS3-EBZ plugged into the HPC0 port on the ZCU102.
I've also got the libiio userspace libraries installed on the system.
The kernel boots up, and has the following relevant kernel messages:
[ 7.741057] ad9361 spi32766.0: ad9361_probe : enter (ad9361)
[ 7.869639] ad9361 spi32766.0: ad9361_probe : enter (ad9361)
[ 8.094689] ad9361 spi32766.0: ad9361_probe : AD936x Rev 2 successfully initialized
[ 8.203514] cf_axi_dds 80004000.cf-ad9361-dds-core-lpc: DRP unlocked.
[ 8.209897] cf_axi_dds: probe of 80004000.cf-ad9361-dds-core-lpc failed with error -110
[ 8.691684] SAMPL CLK: 61440000 tuning: RX
[ 8.695729] 0:1:2:3:4:5:6:7:8:9:a:b:c:d:e:f:
[ 8.700115] 0:# # # # # # # # # # # # # # # #
[ 8.704542] 1:# # # # # # # # # # # # # # # #
[ 8.710462] ad9361 spi32766.0: ad9361_dig_tune: Tuning RX FAILED!
[ 8.719975] cf_axi_adc 80000000.cf-ad9361-lpc: ADI AIM (10.00.b) at 0x80000000 mapped to 0xffffff8009048000, probed ADC AD9361 as MASTER
The "iio_info" command confirms that only devices it has are the "ad7291", the "ad9361-phy", and the "cf-ad9361-lpc". There's no *dds-core-lpc device for the TX (which we already know since it failed in the kernel).
If I try to some code for receiving data from the ADC, it sometimes will successfully (or so it claims) configure the device (set the LO, bandwidth, etc) and create the DMA buffer, but then fails on the iio_buffer_refill() with error 110 (Timed Out). Sometimes, the code will just hang during the device configuration part.
Am I missing anything? I've double checked the pin numbers, interrupt numbers, and addresses in Vivado and my device tree and everything seems to be right.
Any assistance / tips would be very much appreciated.