Problema de integridad de la señal SPI

Tengo una PCB personalizada de cuatro capas (señal, tierra, alimentación, señal) con un STM32F4 (72 MHz) conectado a un receptor Si4684 y un transmisor FM Si4711 a través de SPI.

Ingrese la descripción de la imagen aquí

Parece que mi diseño tiene algunos problemas de integridad de la señal. Puedo comunicarme con el Si4711, pero solo puedo comunicar comandos breves con el Si4684. La comunicación con Si4684 falla (algunos bits son incorrectos) al transferir la imagen del firmware del STM32 al chip (transferencia de datos grandes).

Cuando conecto mi analizador lógico al pin MISO Si4711, esto da la vuelta. No es posible la comunicación con el Si4711, pero la comunicación con el Si4684 funciona perfectamente. Si conecto el analizador lógico al pin MISO Si4711 y envío el comando POWER_UP al Si4711, parece que no hay respuesta del chip. Sondear el pin MOSI Si4711 muestra claramente que el comando se recibe correctamente.

El comportamiento es el mismo si ejecuto el reloj a 300 kHz o 8 MHz. Desafortunadamente, no tengo un osciloscopio disponible, pero supongo que esto podría ser un problema de velocidad de respuesta, ya que es independiente del reloj.

¿Cuál podría ser la razón por la que necesito conectar el analizador lógico al pin MISO para que funcione el Si4684 y por qué esto hace que el Si4711 deje de funcionar?

Lo que he intentado hasta ahora: - Terminación en serie (50 ohm, 100 ohm) en la línea CLK - Ajuste de la velocidad GPIO de los pines SPI en el STM32 (BAJO, MEDIO, ALTO). Creo que esto establece la velocidad de giro del pin. - Conexión del analizador lógico a los otros pines SPI. - Verifiqué dos veces que tengo el modo SPI correcto (0,0) configurado

Entiendo que tendré que hacer un nuevo diseño, pero me gustaría mucho saber por qué sucede esto.

Encuentre el diseño y el esquema parcial a continuación. Las señales SCK, MOSI y MISO están resaltadas.

Ingrese la descripción de la imagen aquí

Ingrese la descripción de la imagen aquí

ACTUALIZACIÓN: Moví el Si4711 a I²C y ahora no hay problemas.

Necesita señales de activación de chip para estos dispositivos SPI. En la pregunta no mencionaste nada sobre ellos.
Lo siento, mantuve las señales CS fuera del dibujo. Pero tengo líneas CS individuales para cada chip y he confirmado que se están comportando correctamente.
¿Podemos ver el diseño de la PCB?
¿Cuál es la tensión de alimentación del STM32? El Si4710 parece ser compatible con 2.7V a 5.5V y el Si4684 es un chip de 1.8V.
FWIW No esperaría ningún problema con el diseño que ha descrito a las velocidades que ha descrito. Trate de obtener un osciloscopio, es realmente una herramienta esencial. El problema podría no estar relacionado con el SPI. ¿Cómo es la integridad y el desacoplamiento de la potencia? Acuerde que sería útil publicar un esquema completo y un diseño de PCB.
Si está utilizando la combinación incorrecta de modos, por ejemplo, está conduciendo y muestreando una señal dada en el mismo borde del reloj en lugar de en los bordes opuestos, se puede esperar una operación muy irregular y la carga parásita de las sondas puede arreglar/romper las cosas.
@kva Diseño y esquema agregados
@pericynthion Sí, realmente necesito un alcance ... He agregado el diseño y los esquemas parciales ahora.
@ Foxrider83 El STM32 funciona con 3.3v. El Si4684 ha especificado que V IO sea 1.62 - 3.6v, así que creo que debería estar bien.
Puede limitar la velocidad de giro de los pines de salida stm32 en el firmware, para ver si eso ayuda. Si no sabe cómo hacerlo, indique qué plataforma de desarrollo está utilizando...
@bitsmack Pensé que se había hecho con la propiedad GPIO_SPEED (BAJO, MEDIO, ALTO, MUY_ALTO), pero si esto se puede configurar en otro lugar, estoy ansioso por aprender. Estoy usando openstm32 con el controlador HAL.
Gracias, JohnDonut, pero ese era el escenario al que me refería. Estoy de acuerdo con el comentario anterior de que no sospecharía problemas de integridad de la señal con su diseño y velocidades ... Espero que alguien tenga una respuesta que lo ayude.
Gracias por todos los aportes. Ayer probé todo tipo de terminación e incluso intenté mover el Si4711 a un bus SPI diferente (el mismo bus que el flash ic). Desafortunadamente, nada ayudó. Así que durante la noche modifiqué mi placa para que el Si4711 ejecute I2C en su lugar. Mis preocupaciones se han ido, todo funciona bien. Pero aún tengo curiosidad por qué el SPI falló como lo hizo.

Respuestas (1)

Trabajé en el cabezal del sensor (cámara IR de 4 canales, mux CMOS debajo del sensor laminado IndiumPhosphide) que absolutamente no cooperaría con el FPGA emisor de señales de control hasta que corté todos los cables de la interfaz digital (aproximadamente 12 de ellos) e inserté Resistencias de 1Kohm para ralentizar en gran medida los bordes de las señales de temporización y así evitar el sobreimpulso (hasta -5 voltios) y el sobreimpulso (hasta +10v) en la interfaz de 0v/5v.

En el diagnóstico, antes de insertar la serie R de 1Kohm, miré usando un TEK7904 en tiempo real (alcance de 500 MHz, sin muestreo) y P6201 (sonda de 900 MHz a 1pF cuando se colocó el cabezal X10), vi estos horribles excesos con bordes de 500 picosegundos en ejecución 4" a través de 1 PCB, otras 4" a través de la segunda PCB y luego pasando por un conector de 1" y hacia abajo en el depósito de nitrógeno líquido.

Por lo tanto, tenemos 4+4" incrustados dentro de la PCB, con una longitud efectiva de 8" (escalado por sqrt(Er)), por lo que 4+4 se convierte en 8+8, con una ruta de retorno que hace 16+16") más conector y dewar.

Su SPI es de solo 3 hilos. Explore dónde, exactamente, se amortiguan mejor los reflejos/sobreimpulsos.

Creo que hay un conflicto entre esos dispositivos ya que no implementó ninguna línea de selección de chip, por lo que ambos esclavos intentan comunicarse y usar la terminología del lenguaje C es un comportamiento indefinido :)
Tengo líneas individuales de selección de chip y están confirmadas.
@PeterJ, si bien no había selecciones de chips en el diagrama original de "distancia", el esquema desde que se agregó los muestra.