Hello ADI Team,
I am trying to control an AD9914 Evaluation Board (EVAL-AD9914) externally using a ZCU102 FPGA board (Zynq UltraScale+ ZU9EG).
My objective is initially to verify basic SPI register read/write communication from the ZCU102 before proceeding with DDS frequency/waveform configuration.
Hardware setup
-
AD9914 Evaluation Board: EVAL-AD9914
-
External SPI controller: ZCU102 / Zynq UltraScale+ ZU9EG
-
SPI controller in FPGA: AXI Quad SPI
-
Software: Vitis
-
SPI driver:
XSpi -
External signals connected:
-
CSB
-
SCLK
-
SDIO
-
I/O_UPDATE
-
RESET
-
SYNCIO as required
-
-
The USB control path on the evaluation board has been disabled for external control according to the evaluation-board guidance.
-
The AD9914 function pins are configured for serial programming: F0 = HIGH, F1 = F2 = F3 = LOW.
The AD9914 datasheet indicates that the serial interface can operate either as a bidirectional single SDIO interface or using separate SDIO and SDO signals. I am currently trying to understand the correct readback behavior for my external-control setup.
Write test
I am able to perform an SPI write transaction from the ZCU102.
For example, I am writing CFR1 (address 0x00) with:
u8 TxBuffer[5] = {
0x00, // Instruction/address
0x00,
0x01,
0x00,
0x0A
};
u8 RxBuffer[5] = {0};
Status = XSpi_Transfer(&SpiInstance,
TxBuffer,
RxBuffer,
5);
This sends:
0x0001000A
to CFR1.
I can observe the expected CSB, SCLK and SDIO activity on the oscilloscope/logic analyzer.
Read test
I am then trying to read back CFR1.
My understanding is that the read operation should consist of:
-
CSB LOW
-
Send the read instruction/address
-
Complete the instruction phase
-
Release the bidirectional SDIO line from the FPGA
-
Generate the required additional SCLK cycles
-
AD9914 drives the register data on SDIO
-
FPGA samples the returned 32-bit data
-
CSB HIGH
The part I am currently having difficulty with is the SDIO direction change during the read transaction.
I am using the Xilinx/AMD XSpi_Transfer() API, which performs a full-duplex SPI transfer. I am not sure whether the AXI Quad SPI + XSpi_Transfer() configuration I am using can correctly perform the required SDIO turnaround/high-impedance period for the AD9914 2-wire read operation.
Questions
-
For external control of the EVAL-AD9914, what is the recommended procedure for performing a register read using the bidirectional SDIO/2-wire SPI interface?
-
After sending the read instruction/address, exactly when should the external controller release SDIO and allow the AD9914 to drive the line?
-
Is there any required turnaround clock or delay between the instruction phase and the 32-bit read-data phase?
-
Can the AXI Quad SPI + Xilinx
XSpi_Transfer()driver be used directly for the AD9914 2-wire read operation, or does the SDIO direction need to be controlled separately? -
If using the 3-wire configuration (SDIO input + SDO output), what is the recommended register/configuration sequence to switch the AD9914 from the default bidirectional SDIO configuration to separate SDIO/SDO operation?
-
Is there any additional requirement involving SYNCIO/ResetSPI that must be performed before the first external SPI transaction after power-up/reset?
-
For basic register read/write verification, is a valid REF_CLK required, or can the serial register interface be tested without the DDS reference clock?
My immediate goal is only to verify reliable SPI register read/write communication with the AD9914 evaluation board. Once this is working, I will proceed with REF_CLK/PLL configuration and DDS waveform generation.
Any guidance on the correct external SPI read sequence and the expected SDIO/SDO waveform would be greatly appreciated.
Thank you.