Prototipo SDRAM frente a problemas de producción

Tengo un diseño usando un LPC1788 junto con un módulo SDRAM de ISSI ( IS42S32800D ). Esta es una interfaz de 32 bits.

He enrutado este diseño y he hecho un prototipo con un fabricante de PCB que hace prototipos de 6 capas. El prototipo de PCB funciona bien. Entonces pensé que fabricaría la PCB en un lote de volumen pequeño (100) de mi proveedor habitual de PCB. Les di la información acumulada que mi prototipo usó para asegurar que no habría problemas.

¡Sin embargo! Tengo problemas masivos con la placa de producción. Al principio, no pude obtener ninguna respuesta de la SDRAM con el mismo código que usé en mi placa prototipo. La placa anterior funcionaba a 120 Mhz, así que estaba seguro de que algo andaba mal con esta nueva placa. Luego encontré una publicación en la que la gente sugería usar el modo repetidor en las líneas de datos SDRAM (no había usado esto anteriormente) y esto generó una respuesta de SDRAM, sin embargo, no es estable. Puedo escribir en 16 o más direcciones, pero luego, con las lecturas posteriores, los datos devueltos (en cada dirección) son los datos que escribí en último lugar (probablemente debido al modo repetidor). Cuando desactivo el modo repetidor, los datos devueltos son 0xFFFFFFF. Ahora estoy tratando de conectarme a 48Mhz, la configuración más baja para la que tengo tiempos.

Estoy usando las mismas resistencias de terminación (en las líneas de datos) de 22 ohmios en ambas placas, las líneas de datos tienen un promedio de 3 cm de largo. La línea del reloj mide 2,4 cm de largo. Las líneas de dirección tienen un promedio de 3,8 cm de largo.

¿Está demasiado fuera de especificación? ¿Debería retrasar más el reloj si es sustancialmente más corto? Estoy realmente atascado aquí, ya que no he cambiado nada sobre el diseño. Esperaba una producción perfecta para estas placas.

Maximum Data Line Length: 59mm (Although this includes the branch to the NAND Flash)
Minimum Data Line Length (Ctrl to Res): 18mm
Maximum Address Line Length: 44mm
Minimum Address Line Length: 24mm
CLK: 24.5mm
CKE: 25mm
CAS: 28mm
RAS: 28.7mm

Aquí está la configuración de la pila de PCB para el prototipo original (en funcionamiento):ingrese la descripción de la imagen aquí

Aquí está la configuración de la pila de PCB para los PCB de producción (que no funcionan)ingrese la descripción de la imagen aquí

Aquí está la ruta para la SDRAM:Enrutamiento SDRAM

¿El control de impedancia fue el mismo entre las ejecuciones de proto y producción?
No estoy seguro. No sé lo suficiente sobre la integridad de la señal para definir correctamente estos parámetros para las salas de juntas. Sentí que si especificaba parámetros sin saber lo que estaba haciendo, crearía problemas en lugar de solucionarlos.
¿Y les pagó para verificar la impedancia (que @dextorb le sugirió controlar)?
No es la longitud promedio lo que importa. Es el mínimo y el máximo dentro del grupo.
He agregado longitudes de línea mínimas y máximas para usted.
@James ¿Conoce esta placa para tener una continuidad de CC confiable entre todos los puntos en la misma red?
Sí, lo creo @Kaz. Hay dos planos de alimentación (3V3 y GND) y la placa es probada por la casa de placas, por lo que deben estar conectados eléctricamente. Hay muchas tapas de desacoplamiento (0.1uF, 4.7uF, 10uF) en el reverso de la placa.
¿Cómo se ve la integridad de la señal en el seguimiento del reloj en los pines SDRAM?
Hay muy poca información para seguir aquí. Como mínimo, necesitamos imágenes de alcance de varias señales en el receptor (clk en SDRAM, addr en SDRAM, datos en ambos extremos).
@DavidKessner Obtendré esta información para usted durante este fin de semana. Gracias por tu ayuda.
¿En qué capas están tus aviones?
Los aviones están en la Capa 2 (GND) y la Capa 5 (PWR). Son planos ininterrumpidos aparte de la vía de despacho.

Respuestas (3)

Esa es una acumulación pésima. Sus núcleos deben ser de 0,2 mm y el equilibrio de su grosor debe estar en el preimpregnado entre las capas 3 y 4 (Interior 1 e Interior 2).

La razón de esto es que, para cualquier señal en una traza, debe haber una ruta de corriente de retorno en el plano justo debajo de ella. La corriente de retorno en el plano intentará minimizar la inductancia (es decir, el área del lazo), lo que significa que intentará seguir el rastro de la señal. Si el rastro de la señal está lejos del avión, buscará otros rastros para encontrar un camino de regreso. Esto es electromagnético contra lo que estás luchando.

Además, al tener capas internas a diferentes distancias de sus planos de referencia (¡recuerde, todos los rieles de suministro se ven como tierra en CA!) en comparación con las distancias de la capa externa, crea un cambio de impedancia cada vez que intercambia capas (aunque esto puede contrarrestarse con cambios en el ancho de la traza, aunque descubrí que valió la pena el problema solo una vez), y aumenta significativamente el potencial de diafonía y otras interferencias.

Otra cosa que debe verificar son los materiales utilizados: hay más de 20 materiales diferentes que se llaman a sí mismos "FR-4", por ejemplo. Lo que suelo usar se llama 370-HR. Se comporta bastante bien con señales de alta velocidad de 100-500 MHz.

Con respecto a la línea del reloj, IIRC en mi último diseño de SDRAM, configuré el reloj para que su borde ocurriera en último lugar (su trazo era 1 cm más largo), después de que se estabilizaron todas las líneas de dirección y datos. Entonces, sí, vale la pena intentar retrasar el reloj. No necesitaba ningún control de impedancia en las líneas SDRAM.

Sus resistencias de terminación deben colocarse lo más cerca posible de los controladores de línea. Si no están dentro de unos 0,5 cm, pueden causar reflejos, lo que resulta en un exceso y un timbre. En mi humilde opinión, la longitud del rastro de 3 cm es muy corta para necesitar resistencias de terminación (las uso comenzando alrededor de 6-10 cm); has probado solo a sacarlos?

Otra cosa a revisar son tus planos: ¿Tienes rastros de señal cruzando cortes de plano? Este es un gran no-no, porque obliga a la corriente de retorno a tomar una ruta larga alrededor del corte.

Finalmente, la tasa de borde es un gran problema en estos diseños. Muchos chips tienen tiempos de subida y bajada innecesariamente cortos, y la reducción de la frecuencia del reloj no tiene ningún efecto sobre esto. Estos bordes rápidos son excelentes para crear reflejos. Esto es lo que intentan solucionar sus resistencias de terminación de 22 ohmios: ralentizan los bordes. Sin embargo, si realmente lo está presionando, se puede usar una herramienta como HyperLynx de Mentor Graphics para encontrar el diseño de terminación óptimo.

Algunos libros que te puedo recomendar que cubren todo esto y mucho más, y juramos por ellos en el trabajo:

Estos libros cubren la reducción de EMI, el diseño de blindaje, el apilamiento de PCB, el control de impedancia, el desacoplamiento de la fuente de alimentación y mucho más. Además, el Sr. Ott imparte seminarios sobre este tema (viene con una copia gratuita de su libro).

El libro de Henry Ott es una biblia para mí en 1980. Sin embargo, antes de leerlo, ya tenía la habilidad de ver fugas de RF en un diseño mecánico/eléctrico, incluso antes de que comenzaran las pruebas de EMC. Las ranuras, los radiadores, las antenas dieléctricas y los cables de bus de E/S fueron las mejores antenas para la entrada y la salida.
Buena información aquí, de acuerdo con la simulación de Hyperlynx basada en mis datos de simulación ingresados, se requieren resistencias de 22 ohmios ya que, de lo contrario, la forma de onda en las líneas de datos (impulsadas en un tiempo de aumento de 1 ns) de la SDRAM se distorsiona terriblemente y algunos reflejos cruzan el voltaje de referencia.
Además, la recomendación de acumulación es buena. Hay una pequeña diferencia en la acumulación entre el prototipo y el fabricante. Estoy agregando los diagramas a la Pregunta para que los veas. Además, he estado leyendo Signal Integrity Simplified de Eric Bogatin. Buena información aquí, pero tomará algún tiempo para digerir y asimilar lo suficiente como para comenzar un nuevo diseño de tablero con sus recomendaciones.
Por lo que vale, OP originalmente tenía lo que parecían fotos de Altium. Altium tiene su propio conjunto de herramientas de integridad de señal que pueden usar archivos IBIS. También puede examinar la diafonía. Pero necesita la información de acumulación exacta para hacer esto.
Sí, Altium ha estado tratando de que desechemos las cosas de OrCAD/PADS/HyperLynx que tenemos a favor de sus cosas, pero nos quedamos con el diablo que conocemos.
Mirando las acumulaciones que publicaste, ambas son pésimas, pero la china parece ser marginalmente peor. Si la acumulación es el problema, entonces el prototipo era marginal y la producción lo empujó al límite. Personalmente, obtendría una placa de producción en blanco, la cortaría por la mitad, limaría el extremo cortado hacia abajo y miraría la pila bajo un microscopio para tener una idea de si las placas de producción son lo que dicen que son. Tuvimos un par de incidentes en los que el taller de fabricación entregó algo que no estaba de acuerdo con sus dibujos (duplicaron un par de capas) pero aun así pasó la prueba eléctrica.
Entonces, en este punto, lo que más me preocupa son las resistencias. Parecen estar en medio de las huellas en lugar de los conductores a los que pertenecen. En estas aplicaciones, es mejor no usar paquetes de resistencias, sino usar resistencias individuales pequeñas. Si debe usar paquetes de resistencias, debe tomarse el tiempo para hacer un trabajo mucho mejor intercambiando las resistencias para que el diseño sea menos loco. Eso es todo lo que puedo decir de su diseño, que no tiene contornos de paquetes y hace que la mitad de las capas sean difíciles de ver.
Habilitación de escritura de entrada WE#: La señal WE# define los comandos de operación junto con las señales RAS# y CAS# y se bloquea en los bordes positivos de CLK. La entrada WE# se usa para seleccionar el comando BankActivate o Precharge y Read o Escribir comando." Creo que incluso con un mal osciloscopio o analizador lógico, es fundamental verificar las señales básicas para WE, CAS, RAS, CS
El único osciloscopio o analizador "malo" es el que no muestra lo que está sucediendo. Y es más probable que tenga una conexión a tierra pésima para su sonda que que el instrumento real sea malo. Entonces: 1) Use sondas activas, 2) Conecte la tierra de la sonda lo más cerca posible de la señal, 3) Prefiera una tierra de punta de sonda a esas omnipresentes pinzas de cocodrilo. Pero incluso con todo esto, si su osciloscopio no tiene suficiente ancho de banda, no verá sobreimpulsos ni timbres.

En este tipo de frecuencia, creo que es poco probable que los problemas de tipo de longitud de pista sean un problema importante, sin duda para los problemas de retraso. Como los problemas comenzaron con una nueva PCB, lo primero que debe hacer sería probar la continuidad de todas las líneas (contra la hoja de datos, no su esquema, en caso de que su esquema tenga errores), y alcance cada pin para verificar que las formas de onda están en menos plausible: incluso si su alcance no está a la altura de verificar los detalles de tiempo, debería ser bastante obvio si hay pines abiertos o en cortocircuito.

Hacer este tipo de cosas sin un alcance adecuado está plagado de peligros potenciales: ¿cómo sabe cuánto margen tiene? Incluso si funciona, ¿cómo sabe si está o no en el límite y es vulnerable a fallas de campo/producción debido a las tolerancias, la temperatura o la fase de la luna?

2nd add Asumimos que su diseño fue probado en el margen y que el código era perfecto en sus preguntas. (no) le sugiero que verifique lo siguiente;

  1. Configure el IO para que tenga una rotación rápida y deshabilite los filtros de entrada
  2. Habilitar el modo de entrada en el reloj
  3. Establezca el bit de giro (9?) para aumentar la velocidad de giro de los pines de la interfaz SDRAM
  4. Habilite el modo repetidor ya que son bidireccionales y no deben dejarse flotando en una entrada cmos.
  5. Cambie el voltaje de suministro para determinar la sensibilidad al error.
  6. el modo de reinicio predeterminado para un pin de bus de datos es FUNC=0X00, MODE=0X02, HYSTERESIS=ENABLED, INVERT=DISABLED y SLEW=STANDARD
  7. ¿Su llamada a PINSEL_ConfigPin() con un nuevo valor de función, restablece el MODO a INACTIVO (sin resistencia desplegable/subida) y desactiva la HISTÉRESIS?
  8. ¿Está utilizando bucles for/next o código discreto como;

    • LPC_IOCON->P3_0 |= 1; // D0 @ P3.0
    • LPC_IOCON->P3_1 |= 1; // D1 @ P3.1
    • LPC_IOCON->P3_2 |= 1; // D2 @ P3.2 etc
  9. ¿Afirma volver a habilitar el pin WE, cada vez que sea necesario?
  10. ¿Lo usas? *pPIN &= ~(0x00000007);//Borrar bits de función"

Recuerdo haber depurado mi primer diseño de CMOS de un estudiante de postgrado de Física para una placa lógica de temporizador conmutable de grabación portátil sísmica. No había firmware ni uC, pero nunca hizo un análisis de tolerancia en el peor de los casos y el hardware tenía condiciones de carrera por todas partes cuando yo mismo construí y depuré una docena de placas más. El profesor sísmico trajo al jefe del departamento de física para preguntar por qué no podía depurar las placas, luego tuve que aconsejarle que la variación de los componentes exponía muchas fallas de diseño llamadas condiciones de carrera de tiempo debido a las condiciones metaestables y al borde del reloj utilizado. Él todavía no entendía, entonces le pedí que me dijera cuántos dedos desplegué mientras levantaba la mano antes de que llegara al nivel de mi cintura de abajo hacia arriba. Luego dijo, no puedes hacer eso y esperar una respuesta correcta. Dije, precisamente. Esa es una condición de carrera primitiva. Se vuelven menos obvios con más niveles de complejidad. Universidad de Manitoba 1973.

Primero agregado: ¿Qué esquema de terminación de bus usó? autobúsSe prefiere el método (1), ¿Está limpio 1,25 V CC?


  1. ¿Pagaron las TIC en estos tableros? la prueba de tablero desnudo es imprescindible
  2. ¿Especificó la impedancia en sus instrucciones de diseño de Gerber?
  3. ¿Ejecutó simulaciones en su diseño con tolerancias?
  4. La constante dieléctrica en los tableros y el número de capas de preimpregnado controlan la impedancia de la línea de banda y la microcinta junto con el ancho y el espacio del trazo.

    Hay muchas calculadoras Z gratuitas en línea para stripline.

    Puede intentar medir la capacitancia en pistas grandes o planos de tierra y comparar ambas placas desnudas.

    También mire las señales con un osciloscopio de alta velocidad y observe el sobreimpulso y el patrón de ojo de datos de reloj.

Tiene que haber una explicación simple para los errores, pero no es fácil de encontrar. Pero una vez que encuentre la causa raíz... no volverá a cometer ese error.

agregado: Otro error que encontré es que su diagrama de altura de pila no indica el grosor de la capa de Cu y no es suficiente para caber en 6 capas a menos que sea incorrecto o el grosor de Cu sea de 0.039 mm (NO;)

Solo un comentario para OP: veo que OP está usando Altium Designer, y hay una calculadora de impedancia integrada en el software. ¡No lo he usado mucho, pero sé que está ahí en alguna parte!
Mientras conecta una traza (presione W en la vista de PCB), presione la tecla Tab y verá la impedancia estimada.
en general, para Qty 100 PWB de baja complejidad, no pagaría por ICT (prueba), pero estos tienen pistas ciegas, por lo que ... algo para considerar ... y medir la capacitancia en una placa desnuda V + <> GND
No pagué por el control de impedancia en estas placas. Las líneas simuladas en Hyperlynx (MentorGraphics) mostraron formas de onda bastante perfectas (o bien dentro de las especificaciones) basadas en mi diseño enrutado. Para modelar esto, recreé cada línea de transmisión y vía junto con los modelos IBIS. No tengo un alcance de ancho de banda suficiente para investigar adecuadamente las señales reales =(
Si no posee un alcance adecuado, tal vez debería contratar uno por una semana o dos.
Hola Leon, he buscado alquilar un alcance, sale en £ 500 por una semana. Esto es para un alcance Lecroy de 1Ghz, por lo que puedo optar por eso para tratar de resolver esto. No utilizo ningún esquema de terminación en las líneas de dirección. ¿Creí que los que has mencionado son para DDR ram? Tengo algunos pull ups en las líneas de CONTROL, estos están en el medio (longitud) de la línea de transmisión (33k).
Además, su ejemplo da una impedancia de 50 ohmios para la línea de transmisión. He leído que para esto el ancho de la línea de transmisión debe ser la mitad de la altura dialéctica (para microstrip). Esto da como resultado un seguimiento más amplio que puedo incluir en mi enrutamiento. Tengo la mayoría de las líneas con una impedancia de 78 ohmios. Las vías tienen una impedancia de 74 ohmios, así que creo que tengo pequeños problemas de reflexión debido a esto.
Hola @TonyStewart, gracias por tu apoyo. 1) La placa prototipo no requería un giro rápido. Habilitado sin ningún cambio en efecto. 2) No estoy seguro de lo que esto significa: ¿el reloj es una salida? 3) Se dejó habilitada la histéresis. Deshabilitado sin ningún cambio en efecto. 4) El aumento de giro no está habilitado en proto. Habilitado sin ningún cambio en efecto. 5) No probado. 7) La función Pin Config no altera otros bits. 8) Código discreto para pines de control, bucle para datos/dirección 9) ¿Cuándo debo habilitar WE? ¿El controlador EMC debería hacer esto por mí? 10) Los bits se notan antes de establecerse. Tengo otro prototipo en orden, estará aquí la próxima semana.
¿Dónde entra SSTL en esto? Cuando tenía SDRAM, solo necesitaba 3.3V LVTTL. Sin líneas de 50 ohmios, sin RT, solo RS. James, 75 ohmios está bien para señales de un solo extremo; la clave es no cambiarlo a lo largo de la traza.