Post Go back to editing

4 x ADAR1000 eval boards not detected with linux-adi-5.10.0 and ZCU102 FPGA

Category: Software
Product Number: ADAR1000
Software Version: Analog Devices Linux Kernel 5.10.0

Hi,

Hardware Setup

I have 4 x ADAR1000 evaluation boards, with the SPI bus daisy chained across between all 4 boards. I have set the pin programming P10 address jumpers to uniquely identify each ADAR1000 chip using AD1 and AD0 [00, 01, 10, 11]. The SPI bus is using 1 chip-select.

This configuration works correctly with the ADI SDP software. I can separately address each ADAR1000 chip by setting Bits [14:13] of the address, e.g. 0x0000 for ADAR0, 0x2000 for ADAR1, 0x4000 for ADAR2 and 0x6000 for ADAR3.

This verifies that the hardware setup is correct and that the 4 ADAR1000 evaluation boards have been setup and configured correctly.

Next, I remove the SDP controller and connect a Xilinx ZCU102 FPGA evaluation board to the P1 connector of ADAR1000_0. The connections from the ZCU102 FPGA to the ADAR1000_0 evaluation board are SPI CLK, SPI MOSI, SPI MISO, SPI CSN0 and GND.

Software Setup

I am using PetaLinux-2021.2 with the ADI linux kernel 5.10.0.

If I apply power to only 1 ADAR1000 evaluation board, and keep the other 3 evaluation boards power off, the ADAR1000 chip gets detected and I can access the device using iio. This is true for all 4 ADAR1000 evaluation boards on the daisy chain. As long as only 1 device is power up, it gets detected properly.

Each device gets its only iio device node, and I can write to each one of them without setting bits [14;13] as well as readback all the register values.

Issue #01

If I power up more than 1 ADAR1000 evaluation board, e.g. 2 ADAR evaluation boards, or all 4 ADAR evaluation boards, none of the boards get detected.

This is because in the adar1000_setup function, an attempt is being made to verify read and write operation by writing and reading to the scratchpad register, and it fails if there is more than 1 device power on and connected to the same SPI bus.

Additionally, I don't see how SPI bits [14:13] are being set in the call to the adar1000_setup function when attempting to access the SPI registers, early in the boot sequence.

Question #01

Has anyone at ADI got 4 x ADAR1000s to work together using linux-kernel-5.10.0?

Issue #02

I came across a post by John Kraft where he got a Raspberry Pi to work with 1 SPI bus and 4 chip-selects. I tried this approach, as well, by modifying the device tree and connecting individual chip-select signals (2 chip-select signals) to another setup with only 2 X ADAR1000 board connected.

The behaviour I noticed was that I could separately address and write and configure both ADAR1000 devices separately, but I could not read any data from the registers using iio.

This is in contrast to the early setup described for Issue #01 with an SPI daisy chain setup using only 1 chip-select signal, and only 1 of the ADAR 1000 devices powered on.

This probably has something to do with the adar1000_mode_4wire function putting the 1st device in broadcast mode, and disabling the SDO for the remaining three ADAR1000 devices in the chain.

Any thoughts on a possible fix for this issue?