我有一个 2 MHz SPI 总线,但我注意到的一件事是我的一些信号经常“颤抖”。是的,我的触发器设置正确,所以我认为问题不存在。
你可以在这里看到我的意思:(这是在持久性模式下)。这是我的 SPI 总线的时钟。


SPI 工作正常。我已经在多个板上传输了数百兆字节,到目前为止还没有发现问题。但我仍然有兴趣知道这里可能存在什么问题。另外,即使它有效,我也应该费心修复它吗?
测量是在源头用一个非常小的接地夹进行的。
这是我的电路的简化示意图。当然,板上有更多的 SPI 设备,但就这个问题而言,这是准确的,因为除了 uC 和 SD 卡外,板上还没有焊接任何东西。

主控(AVR Mega 128)正在耗尽它的内部 RC 振荡器——我不知道这是否相关,但由于信号及时移动,RC 振荡器的抖动也可能最终出现在 SPI 总线中。只是想我会提到它。我还想到,在这些测量过程中,我以无限循环运行控制器。这是代码:
while(1)
{
setFirstBitOnDriver(driver); // this sends a 8-bit command on the SPI bus.
GLCD_SetCursorAddress(40); // Change cursor position on the display.
GLCD_WriteText("LED: ");
for(wire=0;wire<72;wire++)
{
itoa(wire+1,str,10);
GLCD_WriteText(str);
GLCD_SetCursorAddress(44);
_delay_ms(10);
shiftVectorOnDriver(driver); // another command on SPI. 8-bit wide.
}
}
当内部运行 72 次然后退出时,可能会发生抖动/颤抖。由于执行前三行需要额外的时间,因此由于额外的处理时间,每个第 73 个波形到达的时间可能略有不同。如果我必须打赌,我猜这就是我的问题的原因(如果可以的话,我会立即确认,但我的董事会在工作,下周休息!)但我仍然想要意见/ SE对此问题的回答。
但是考虑到 uC 以 8 Mhz 运行,我不会因为软件而抖动,因为它以纳秒为单位,而是以微秒为单位。但在第二张图中,可以看到一条平线。这会发生很短的一秒钟,其中整个波形随时间变化并且在屏幕上不可见。我猜这是由于循环和第一张图片中的抖动是由于 RC 振荡器造成的。