Noisy SPI Clock

Hi everyone,
I was able to follow David Coffers excellent tutorial on enabling SPI for the jetson at http://neurorobotictech.com/Community/Blog/tabid/184/ID/11/Using-the-Jetson-TK1-SPI--Part-1-Why-is-SPI-important.aspx

While I believe I was able to follow all the instructions correctly, I am having issues with a very noisy clock.It shows 2 peaks on my scope with the highest at 2.7V. You can check the scopes at these links.


This is at the all the speeds I run it at(3-10MHZ). I have used a termination resistor of 80ohms and also tried different capacitors to improve the signal which improves the signal but it doesn’t seem to be good enough for my setup. The MOSI and CS signals also have a little noise (mainly ripples at rise and fall edges) but I don’t think it is an issue. I used an Arduino earlier which gives me a very clean signal.

I am using the bus to communicate with an IMU (ADIS 16375) through an optisolator (ADum 3150). Both devices should be able to handle SPI upto 15 MHZ and I want to run it at 5-10MHZ.

Could anyone suggest a solution to my problem?

This might seem silly but when I attempted to debug my SCK at 3.2MHZ the probe I was using was not rated correctly for it so it gave weird plots.

Can you confirm that the probe you are using is rated for the frequency you wish to observe?

Hi Babu,
I am using my university labs oscilloscope and we have here a Tektronix DPO 4054B here. The specs sheet indicates that it should easily show 3.2 MHZ. But if it was an issue with the probe, then I should be receiving something at my optoisolators end but I am not so I am guessing I am doing something wrong with the Jetson.

Has anybody else had an issue with a noisy Jetson SPI signal? I have made some low pass filters but the output doesn’t seem to be good enough for the optoisolator.

Hi Rahul,

Could you please upload a picture of your setup showing how SPI wires and scope probe are connected?
This would help identifying the root cause of the issue.

I was able to reduce the noise and was able to get the following output from the scope. The top is the CLK signal from the Jetson and the bottom was what I was getting from my opto-isolator. My optoisolator is not rated for 1.8 V, which I realized belatedly so I dont know if this is good enough to work with my IMU. I will try to give an update when I try with something from the GLT series recommended by David.

Just wanted to give an update. I have got an improved clock signal and I have a stable output, just not the right one.

This is what I have the IMU end of the GTL2003. Purple is the clock, Yellow is the signal being sent to IMU and blue is the output from the IMU. It is definitely not right. The IMU is working correctly as I am getting the correct information when using with an arduino. I am guessing the signal from the Jetson still isn’t clean enough. I have put in an RC filter for the clock but this causes it to rise it to only about 2.12V whereas the input and CS signals go upto 3V. I thought this might not be a problem but I am running out of ideas. Is there any other way to clean the expansion bus of the Jetson? What would be the likely component? Pictures of

Thanks ,
Rahul

What is the clock frequency?

I think I put it at 4 MHZ or 5MHZ. The plots seem to indicate 4 MHZ. I have also attached a plot of what it should look like.

I had been thinking that perhaps the wiring itself was contributing to noise. I doubt at 4 to 5 MHz the long/curved wires would matter unless there is another noise source nearby. There are a lot of ways to clean up wiring itself, e.g., shorter wire spans, resistors trimmed to minimum length, and I’m not sure an electrolytic capacitor does much good with shorter current spikes at leading/trailing edges of a square wave…but overall the frequency is low enough I doubt there is an issue from the wiring. You could try cleaning up wiring though, as it is easy to do as a test.

Sounds like a good idea. I noticed that there might be a delay in the clock and input signal due to a settings option in the DTB file. I think I should reduce the number of bytes first and make sure I am exactly sending 0x7E00.

Hi Rahul,

Just as linuxdev pointed out you need to use smaller cables and need to clean up your circuit. I am attaching the schematic that worked for me below.

Use 1Kohm for the 3.3V to chipset I/O. I don’t understand why you are using the 75ohm on the sck line. Also connecting multiple ground from the TK1 helps in noise removal. I have been able to build an interface board. I will still have to do testing to makes sure everything works. But it is pretty stable. The clock is not noisy and the communication is good. Adding 100pF between the 3.3V and ground will also help.

Thanks,
Benzun

Hi Benzun,
Thank you for the schematic. I was putting the 75 ohms resistor on the SCLK to make it look more of a square wave. I can see you just directly connected the ports as the datasheet suggested. I think I will just try as you suggested and see what happens. I will attempt to make the board tomorrow. As a sidenote, did you enable any of the pull down/up resistors in the jetson?
Rahul

For crosstalk it doesn’t matter if it’s 5 MHz, 100 MHz or 1 Hz. What matters is the signal slew rate.

Try twisting your SCK with a separate GND wire. Do the same for SS#, MOSI and MISO if you can. Also your probe GND connection with a long wire with crocodile might be picking-up board radiated noise which is not really on the signals itself.

You can also try decreasing TK1 pin output buffer slew rate if those SPI pins support it.

Hi Cioma,
Thank you! I had a board but was still unable to get a signal. I finally got it working when I twisted all the signal cables with gnd. Everything is working correctly now.

Rahul

I’m glad it helped :)
Crosstalk is a known problem with loose wire connections that carry fast edge signals