У меня шина SPI 2 МГц, но я заметил одну вещь: некоторые из моих сигналов часто "дрожат". Да, мой триггер настроен правильно, поэтому я не думаю, что проблема заключается в этом.
Вы можете видеть, что я имею в виду здесь: (это с включенным режимом сохранения). Это часы моего 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 МГц, я не дрожу из-за программного обеспечения, потому что в наносекундах, а скорее в микросекундах. Но на втором рисунке видна плоская линия. Это происходит в течение очень короткой секунды, когда все осциллограммы сдвигаются во времени и не видны на экране. Я предполагаю, что это связано с петлей, а дрожание на первом изображении связано с генератором RC.