AnsweredAssumed Answered

AD9648 ADC: Problem Configuring Registers over SPI from a TI Hercules Microcontroller

Question asked by ColinM on May 11, 2018
Latest reply on May 31, 2018 by ColinM

Hi. I’m open to any ideas on problems configuring an AD9648 (or similar chip). I am unable to program or read configuration registers on the AD9648 ADC chip over SPI from a microcontroller. I’m using a TI Hercules Launchpad board to control the Analog Devices AD9648 Evaluation board via SPI. The AD9648 board is good, because I am able to program it using the HSC-ADC-EVALCZ Data Capture Board. I have adjusted the timing of the SPI signals from the TI Launchpad board to be as close as possible to those from the HSC-ADC-EVALCZ board. I’m unable to program any registers on the chip, and when trying to read any register, the data (the third byte in the sequence) always returns 0x00. The timing of my SPI signals is according to the specification in AD9648.pdf, including SPI Clock Phase, for which each data bit is valid when the clock rises and transitions when the clock falls.


I am able to read a single register from the AD9648 chip, but only when I change the SPI Clock Phase during the two address bytes to be opposite to that specified. The attached oscilloscope screenshot shows reading of the correct value 0x18 from register zero in this clock mode.  Three SPI signals are shown in the trace. Purple (or magenta) is Chip Select, Yellow is CLK, and Blue (or cyan) is SDIO from the AD9648 as received on the MISO/SOMI input of the TI Launchpad board. There are three bytes in this trace. The first byte is 0x80 with the MSB defining this instruction as a register read operation. This “read bit” is the blue pulse on the left of the image. The second address byte is 0x00, selecting the register zero “SPI Port Config”. The third byte, containing a blue pulse two-bits wide is the 0x18 read from the AD9648. The data bits in the first two bytes are centred on the negative clock edge. The Clock Phase is opposite to the specification in AD9648.pdf and AN-877.pdf, yet it seems to work. With this incorrect Clock Phase setting, I can almost always read register zero, and can on occasion write to and read back from multiple registers on the chip. However, when I use the correct Clock Phase setting, I always read 0x00 from all registers. 


I have experimented with many SPI parameter adjustments, and have collected many screenshots from the oscilloscope. The attached image best illustrates my problem. There are other problems too. Sometimes a data bit in the byte received from the ADC chip is only half a clock cycle wide, for example reading value 0x01 from register 0x2A. This is not long enough for it to be parsed by the SPI receiver (MISO) on the TI microcontroller. The TI Launchpad is working correctly, because it is able to program similar Analog Devices chips on other evaluation boards.

The microcontroller board in use is a TI Hercules TMS570LS12x LaunchPad Development Kit. The SPI interface is configured using the Ti Halcogen GUI. The C program to set up the ADC registers calls SPI transmit and receive functions provided by the TI Hardware Abstraction Layer (a C language library).


Note that the AD9648 chip multiplexes SPI MOSI and MISO through the SDIO pin, so the scope trace of MISO show both MOSI and MISO through the same oscilloscope probe. The other two scope probes are on SCLK and CSB.