Reloj SPI: frecuencia lenta pero problema de tiempo de subida rápido con formas de onda

Antecedentes sobre el tema:

Actualmente tengo un bus SPI entre un Atmel ATSAM3X8E y un chip de memoria flash Spansion FL164K.

SPI siempre ha sido súper confiable para mí en proyectos anteriores, pero este diseño está siendo muy temperamental (el enrutamiento está lejos de ser ideal). Algunas placas funcionan bien, algunas tienen pérdidas de datos muy ocasionales en las comunicaciones SPI, algunas tienen pérdidas de datos casi constantes. La pérdida de datos a la que me refiero se reproduce más fácilmente sondeando constantemente el indicador de listo durante un borrado de ~50 segundos. La mayoría de las veces, la respuesta de ocupado es 0x03 (0b00000011), pero ocasionalmente regresa como no ocupado: 0x00 (0b00000000).

Afortunadamente puedo reproducir la falla en el banco y, afortunadamente, también puedo hacer que el problema desaparezca. Sin embargo, desafortunadamente, conectar una sonda pasiva es una de las cosas que hace que el problema desaparezca, por lo que no puedo "ver" la falla. Y no estoy feliz de llamarlo arreglado si no estoy seguro de lo que realmente estoy arreglando.

Información de diseño del circuito:

  • El bus SPI está enrutado a 3 cosas: flash SPI, tarjeta SD (que no está instalada) y un encabezado básico de 6 pines
  • La almohadilla roja en la parte inferior derecha es la MCU (fuente clk), el trozo que sale inmediatamente va a un FET de canal n que controla un LED, el IC SOIC8 con la almohadilla roja es el flash SPI, el encabezado de 6 pines arriba está desocupado, y la almohadilla azul en el lado izquierdo del seguimiento es un conector de tarjeta SD desocupado.
  • La distancia real de la MCU al flash SPI es de ~35 mm, y el flash SPI al pad de la tarjeta SD es de ~30 mm. El trozo del FET es de ~25 mm y el trozo del cabezal es de ~8 mm.
  • El diseño está lejos de ser ideal, y lo entiendo, pero la intención era ejecutarlo solo a <1 MHz, por lo que supuse incorrectamente que la teoría/terminaciones/reflexiones de la línea de transmisión no eran necesarias.

Diseño de trazas de PCB

Formas en que ya puedo prevenir el problema:

  • Agregue un capacitor cerámico de CLK a tierra en el encabezado de 6 pines (he probado valores de 18p a 330p). Todos ralentizan el tiempo de subida y el problema no persiste.
  • Agregue una resistencia de 1k de CLK a tierra.
  • Conecte una sonda de alcance
  • Toque la línea CLK con mi dedo

Entonces, básicamente, cualquier forma de agregar capacitancia o carga al circuito parece hacer que las lecturas sean 100% confiables.

Formas de onda (tomadas con un Rigol DS1054Z con la opción de 100 MHz y una sonda pasiva de 150 MHz con un resorte de tierra):

Nota: obviamente, una sonda de alcance está conectada para todos estos (lo que evita que ocurra el problema). Las formas de onda que vemos aquí no son lo suficientemente malas como para causar el problema, pero con suerte dan una idea de lo que podría ser lo suficientemente malo como para causar el problema cuando se elimina la capacitancia de la sonda.

Nota 2: estas tomas se tomaron a una velocidad de reloj de 5 MHz, pero el problema parece manifestarse entre 100 kHz y 20 MHz.

En la inspección inicial, la señal del reloj se ve bien (aunque es muy rápida, con un tiempo de subida de ~8 ns).

traza de osciloscopio que muestra casi 5 ciclos completos de la señal CLK

Pero un primer plano muestra un poco de un paso a la mitad

primer plano del flanco ascendente de la señal CLK

Y en la escala de tiempo más rápida, esto es lo que veo.

primer plano del flanco ascendente de la señal CLK

Finalmente, las preguntas

  • ¿Es un paso en la forma de onda ascendente típico de los reflejos de la línea de transmisión o algo más?
  • Dado que el problema de lectura ocurre independientemente de la frecuencia del reloj, asumo que el tiempo de subida (8 ns con la sonda adjunta) debe combinarse con el enrutamiento deficiente para causar los problemas de datos. Pero, ¿no son los tiempos de subida rápidos los que provocan el zumbido, no una forma de onda escalonada? ¿Es común que una sonda de alcance amortigüe el timbre que de otro modo se produciría?
  • Mirando la forma de onda, ¿qué sucede realmente dentro del esclavo para causar un problema? (¿El esclavo SPI se duplica debido a ese paso? ¿O el flash SPI no está obteniendo la velocidad de respuesta especificada de 0.1v/ns? ¿O algo más que no entiendo todavía?)
  • Finalmente, ¿qué más podría hacer para tratar de evaluar la señal sin cargar (arreglar) la señal, aparte de gastar $$$ en una sonda activa que puede o no marcar la diferencia?

Como puede ver, la teoría de frecuencias más altas no es mi área de especialización, por lo que agradezco las experiencias de cualquiera en esta área.

Respuestas (1)

Los tiempos de subida rápidos causarán mucha diafonía, como mencionaste, esto es independiente de la frecuencia. Es difícil ver en la imagen qué son las huellas y qué es la cuadrícula. Las rutas paralelas o las rutas apiladas en múltiples capas lo empeoran. Como lo ha hecho, un capacitor puede disminuir el tiempo de subida, pero debe tener cuidado de no violar los tiempos de configuración/retención.

Es posible que vea algunos reflejos debido a una falta de coincidencia de impedancia. He visto la terminación de la fuente utilizada en las líneas de reloj SPI para dar cuenta de esto. Desea que la resistencia de salida más la resistencia de su fuente sean iguales a la impedancia de su traza.

No estoy familiarizado con la MCU que está utilizando, pero verifique la hoja de datos para ver si tiene algún control de la velocidad de respuesta, es posible que pueda reducirla. Esto es común en los FPGA con los que estoy más familiarizado, pero lo he visto en algunos MCU con los que he trabajado.

Gracias, todos los puntos válidos. Revisaré el diseño para agregar un filtro RC en la fuente (que ajustaré para un tiempo de subida de 25 nS, probablemente 1 kOhm y 12 pF), y estoy seguro de que veré una mejora. Pero esto se basa en el hecho de que el tiempo de subida es la causa del problema observado y no solo algo que lo mejora ligeramente por coincidencia. No puedo estar 100% seguro sin ver que el problema ocurre en primer lugar. Tal vez debería obtener una sonda activa, o tal vez estoy siendo demasiado pedante.
con respecto a los otros puntos ... Tomé la guía de "longitud de seguimiento inferior a 1/3 del tiempo de subida", y supuse que la falta de coincidencia de impedancia no sería un problema. En este caso, un tiempo de subida de 5 ns (medido en realidad a 8 ns con el visor adjunto) permitiría trazas de hasta 250 mm sin preocuparse por la coincidencia de impedancia... El mío es inferior a 100 mm en total. Entonces, ¿crees que vale la pena considerar los reflejos incluso en esas cifras? Además, he buscado mucho en la hoja de datos, pero desafortunadamente esta MCU no parece tener control de velocidad de giro :(