Bad communication is a common problem engineers face with their analog-to-digital converters (ADCs). While this isn’t strictly a data converter issue, it does come up regularly and can be hard to debug. In this post I’ll talk about how to debug digital communication problems, along with some things you might see when communications go wrong.
A picture is worth a thousand words
If you can’t communicate with the device or if the communication doesn’t make sense, get an oscilloscope capture of the communication lines. If the device uses serial peripheral interface (SPI), it helps to use a four-channel oscilloscope. Capture the C͞S, SCLK, DIN and DOUT/D͞R͞D͞Y lines. If the device uses I2C, capture SDA and SCL and check that you are using the correct I2C address.
Communications should match the timing characteristics in the data sheet. See that the clock rates aren’t too fast, that the pulse widths aren’t too narrow, that the setup and hold times are observed, and that the waveforms are clean and well behaved. Figure 1 shows an example of SPI timing characteristics.
Figure 1: Serial interface timing diagram from the ADS1220
With a scope shot, you can even read the bits coming out of the device. You can confirm reads and writes directly, without having the microcontroller interpret the results. If the scope shot doesn’t match what you read on the computer, then the source code may have an error. The error could be a wrong command coming from the microprocessor or missing bytes from a universal serial bus (USB) interface.
We just don’t speak the same language
One common error is the version of SPI communication being used. For those more experienced with analog circuits instead of digital communications, this is a common mix-up. As a quick overview, there are four versions of SPI dealing with clock polarity (CPOL) and phase (CPHA).
Many of TI’s delta-sigma ADCs use CPOL=0, CPHA=1, where the SCLK dwells low and the DIN and DOUT are clocked at the falling edge of SCLK. Data is set up with the rising edge of SCLK. Figure 2 shows a sample readout of SPI data.
Figure 2: SPI communication using CPOL=0, CPHA=1
I don’t know if you heard me correctly
Another important debugging tool is the read back of all registers in the device. This helps when the part is doing something you don’t understand. If your system requires a microcontroller to set up the device, the code may not be sending what you think it’s sending. In that case, it helps to ensure that the write was correct by reading back the configuration status.
It’s too loud in this room
Noise in the communication lines may cause serious error. In particular, noise on the SCLK is a big problem. When there is extra noise on SCLK, the device might think that the SPI has clocked another bit of data, advancing the data being clocked out or clocked in without warning.
If there is noise causing an extra SCLK, an extra added SCLK may force DOUT high (or DOUT/D͞R͞D͞Y high if the two lines are combined) at the end of clocking out the data. In some devices, two extra SCLKs may force a calibration cycle. This varies from device to device and may not always be the case. However, if the DOUT/D͞R͞D͞Y is forced high more often than not, or if you see an unexplained calibration cycle in scope shots, these clues may be used to help debug the problem.
Don’t interrupt me when I’m talking
Clocking out the data shouldn’t be done asynchronously to ADC conversions. The D͞R͞D͞Y line indicates when new data are available and updated on DOUT. When D͞R͞D͞Y transitions from high to low, new data can be clocked out with SCLK and must be clocked out before the next D͞R͞D͞Y indication. If the data-read operation does not complete before the D͞R͞D͞Y is indicated again, the device does not retain the remaining data on DOUT. Instead, DOUT is updated while being clocked out – resulting in corrupted data. If you simply clock out data without trying to detect the D͞R͞D͞Y output, you may be reading invalid data. Figure 3 shows an instance where the data being read is interrupted by a new D͞R͞D͞Y indication after the sixth SCLK, shown by the arrow. The ADC thinks that the seventh SCLK is the start of a new data read.
Figure 3: The ADC read is interrupted by a D͞R͞D͞Y indication
Did you say what I think you said?
It helps to know what you are expecting as a conversion result. Apply a known voltage to the inputs and a known reference voltage and collect some data. You may need to measure back the inputs and reference, but the output data should match what you expect for the conversion. Examining raw data from the device is better than the converted data you get from the microcontroller.
I hear you loud and clear
These are a few common errors made in communicating with products in the precision data-converter line. By knowing what kinds of problems can arise and by doing some simple debugging, you can avoid common communication errors.
Related blogs: Delta-sigma ADC basics: Walking around the delta-sigma blocks
Small Form Factor, 2-Wire 4 to 20mA Current Loop RTD Temperature Transmitter Reference Design
ADS1220 IBIS mode
All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.
TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs andembedded processors, along with software, tools and the industry’s largest sales/support staff.