SPI Read from AD9954


I'm trying to do SPI read from AD9954. My design is using 4 wires SPI, which mean utilizing SDIO and SDO port of AD9954. I have set bit 9 of CFR1 at addr 0x00 to '1', bit 8 leave it at '0' for MSB first. Then I tried to read CFR2 at addr 0x01. I would expect to receive readback for the unused bit [23:16] as its default value which is 0x18. But I get all '0'.

I'm able to get 0x18 if I use 3 wires SPI, using SDIO only. Of course bit 9 of the addr 0x00 is set to '0' for SDIO operation. 

I'm using Zynq as a master, PS side of the zynq only support 4 wires SPI, to use 3 wires SPI I have to add bi-directional buffer at the PL side to concert SDIO into MOSI and MISO. Therefore as far as PS is concern, there is no difference if I use 3 or 4 wires SPI because write signal is still out of its MOSI port and read signal goes into MISO port. This is prove that my bare metal C code is written correctly.

What I'm seeing now is SDO port of AD9954 doesnt respond to the read request from the master. But if it is configured as SDIO mode, AD9954 did respond to the read request. 

Unfortunately I can't use 3 wires SPI as the controller is shared with other slave that requires a "special" handling to the MOSI signal.

Please help me to resolve the read problem asap. Thank you very much


Kheng Oon Lim