[sdiy] Why did this 100pF capacitor fix the SPI bus?

Richie Burnett rburnett at richieburnett.co.uk
Tue Feb 16 17:06:01 CET 2021

It's hard to know for sure without more info, but if the waveforms looked 
clean on a scope with no obvious reflections, then it's possible his code 
has configured the SPI peripheral to sample the SPI data line at the wrong 
time.  For example, if the data line changes state on the positive going 
edge of the clock, it should be sampled on the negative going clock edge 
where the data is being held stable.  Sometimes if you get this wrong it 
will work if one of the clock or data lines is longer, or there is more 
capacitive loading on one line.  But it can be right on the edge of working. 
Check the datasheet timing diagrams and the SPI peripheral configuration 
carefully.  There are 4 different SPI modes, (0,0) (0,1) (1,0) (1,1).  Make 
sure both ends of the link are set up for the same mode.

Another potential problem is coupling of the SPI clock signal onto one of 
the SPI data lines.  For example, if the data line changes state on the 
positive going edge of the clock, you would sample the data line on the 
negative going clock edge where the data line *should* be stable.  However, 
if the data and clock lines are long and run right next to each other, it is 
possible that the rapid falling edge of the clock line can induce a little 
negative going spike onto the data line right at the very moment when the 
receiving device is sampling it!  This can normally be taken care of by 
increasing the separation of the data and clock lines, or retrofitting 
resistors of a few ohms to tens of ohms in series with the data and clock 
lines at the driving end to limit the slew-rates.


-----Original Message----- 
From: Spiros Makris
Sent: Tuesday, February 16, 2021 3:36 PM
To: synth-diy mailing list
Subject: [sdiy] Why did this 100pF capacitor fix the SPI bus?

Hello list,
I was recently helping a friend debug his prototype, that uses the DAC8564, 
on the SPI bus of an atmega328p. I don't have the prototype here (and 
haven't seen in in real life), but through trial and error we managed to get 
it fixed.
The DAC is the only component on the SPI bus, and the exact same thing was 
working on the breadboard, with the exact same code. No matter what he tried 
and checked, the IC was just not responding to any commands at all. A 
picture of the waveforms captured with a scope didn't show anything 
suspicious either, like ringing, extreme overshoot etc. The length of each 
signal was <2cm for all signals of the SPI port.
Eventually he discovered that when jumper wires were connected to the 6pin 
SPI header, on the MOSI and GND lines, the damn thing magically worked. He 
didn't have to connect them to anything on the other side, mind you, just 
have them there.
I figured the only thing they could be changing electrically is acting as a 
capacitor, and eyeballed the value as 100p, based on the capacitance between 
two lines of the breadboard.
Well, what do you know, this actually worked. Now I am completely baffled as 
to why. Any ideas?

Synth-diy mailing list
Synth-diy at synth-diy.org
Selling or trading? Use marketplace at synth-diy.org 

This email has been checked for viruses by AVG.

More information about the Synth-diy mailing list