Prueba de memoria de software para fallas de bus

Tengo una placa con bastantes chips flash, algunos de ellos muestran fallas intermitentes. Las pruebas de memoria estándar no muestran ninguna dirección de problema específica, salvo que ciertos chips fallan intermitentemente bajo estrés mecánico y térmico.

Sospechando las conexiones reales y no las propias celdas de flash, estoy buscando una forma de probar el bus paralelo para detectar errores de dirección o de datos.

Hay algunas pruebas de memoria, pero se aplican mejor a la memoria RAM que a la memoria flash ( http://www.ganssle.com /testingram.htm ). Específicamente, el flash paralelo tiene una secuencia de escrituras de bus para escribir en cada valor; una falla de escritura/verificación podría ser fácilmente la operación de escritura, que podría ser cualquier pin en el bus.

Ideas bienvenidas ...

0

4 Respuestas

Decidí diseñar un patrón de memoria del que creo que puedo deducir tanto errores de datos como de direcciones. El concepto es usar valores significativamente diferentes como indicadores clave de posibles errores de lectura. El concepto también es detectar una falla en un pin a la vez.

La prueba se leerá alternativamente desde las direcciones inferiores y superiores (0x000000 y 0x3FFFFF - mi chip tiene 22 líneas de dirección). En esos lugares pondré 0xFF y 0x00 respectivamente (ancho del byte). La idea es voltear todas las direcciones y líneas de datos y ver qué pasa. (Todos los demás valores en el flash tienen al menos 3 bits diferentes de 0x00 y 0xFF)

Hay 44 direcciones a las que me podría enviar una sola falla de PIN por error. En cada dirección ponga uno de los 22 valores para representar cuál de los 22 pines de dirección fue volteado. Cada uno es de 2 bits diferentes entre sí, y 3 bits diferentes de 00 y FF. (Intenté por 3 bits diferentes pero 8 bits solo podían obtener 14 valores)

        07,0B,0D,0E,16,1A,1C,1F,25,29,2C,
        2F,34,38,3D,3E,43,49,4A,4F,52,58

The remaining addresses I put a nice pattern of six values 33,55,66,99,AA,CC. (3 bits different from all other values) value(address) = nicePattern[ sum of bits set in address % 6];

Probé esto y he recopilado estadísticamente cientos de incidentes de fallas intermitentes sincronizados con el estrés mecánico.

  • errores de un solo bit detectables
  • errores de doble bit deducibles (explicables por una combinación de errores frecuentes de bit único)
  • 3 o más errores de bit (generalmente no concluyentes)

Aunque algunos de los chips tenían 3 pines defectuosos, el 70% de los incidentes eran de un solo bit (por lo general, no fallaban al mismo tiempo)

El grupo de prueba ahora está usando esto para identificar qué conexiones específicas están fallando.

0
agregado

Las pruebas de memoria típicas están ahí para hacer eso. Prefiero un pseudo aleatorizador (determinista usando un lfsr) para las pruebas 0xAA, 0x55, 0xFF, 0x00. Esto permite una prueba de bus de dirección así como una prueba de bus de datos en dos pasadas (repetir invertido). Digo típico en el sentido de mover los bits de datos y de direcciones ambos estados y variar los estados de las señales y sus vecinos. El golpeteo de un ariete para crear tensiones térmicas u otras, así no se puede escribir muy rápido en un flash, por lo que no se puede escribir rápidamente/leer ciclos.

Flash crea otro problema y eso es escribir, y leer no es tan interesante, desea escribir la lectura más tarde, horas, días, semanas para determinar si la parte contiene datos.

Cuando dices térmicamente o estrés, ¿te refieres solo durante el tiempo que está por encima de X grados, falla o quieres decir que debido a la tensión térmica está roto todo el tiempo después del evento? Del mismo modo, con la mecánica, mientras vibra o bajo tensión mecánica, la pieza falla, pero cuando se libera de esa tensión, está bien, o la tensión mecánica ha causado un daño permanente que puede detectarse bajo tensión o no.

Ahora bien, aunque no puedas escribir rápidamente/leer ciclos, puedes castigar un flash leyendo mucho. He visto problemas de lectura y alteración mediante la lectura constante de un bloque o ubicación. No necesariamente es algo que tenga tiempo de hacer para cada ubicación, pero puede llenar el ariete con un patrón pseudoaleatorio y concentrarse en un lugar por un tiempo (minutos, decenas de minutos), si tiene una parte que sabe que es mala. ver si esto acelera la detección del problema y si alguna ubicación funcionará o solo algunas. luego, otra cosa es leer todas las ubicaciones repetitivamente durante horas/días o dejarla reposar durante horas/días/semanas y luego hacer un pase de lectura sin borrar o escribir y ver si ha perdido algo.

desafortunadamente, como probablemente sepa, cada nuevo caso de falla requiere su propio proyecto de investigación y el desarrollo de una nueva prueba.

0
agregado
Las fallas son intermitentes, hasta ahora las fallas se detienen cuando se detiene la tensión mecánica.
agregado el autor Michael, fuente
Al menos durante las fallas usando uno de los trucos de prueba de memoria estándar puede intentar identificar las conexiones fallidas, si tiene un bit de dirección incorrecta y un bit de datos incorrecto al mismo tiempo, u otras combinaciones de fallas simultáneas se vuelve más difícil determinar cualquier cosa que no sea "está roto". Múltiples bits de datos con buenos bits de dirección. Es fácil determinar las rutas de bit de datos incorrectos, del mismo modo, se puede determinar un único bit de dirección ... probablemente sepa que todo esto no está seguro de lo que está buscando ...
agregado el autor old_timer, fuente

En el artículo vinculado, Jack Ganssle dice: "Crítica para esta [prueba], y para todos los demás algoritmos de prueba RAM, es que se escribe el patrón en toda la RAM antes de realizar la prueba de lectura".

Como la lectura debe aislarse de la escritura, probar el flash es más fácil. Realice la parte de escritura de las pruebas mientras el sistema no esté bajo tensión. Luego realice la porción de lectura con el sistema bajo tensión. Al registrar la dirección, el valor esperado y el valor real en suficientes casos de error, debería poder determinar el origen de los errores.

Si el sistema nunca falla al hacer lo anterior, puede realizar todas las pruebas bajo tensión. Cualquier error que aparezca probablemente sea un error de escritura.

0
agregado

El primer paso para probar una memoria es la prueba del bus de datos 0 0 0 0 0 0 0 • En esta prueba, el cableado del bus de datos se ha probado correctamente en 0 0 0 0 0 0 confirma que el valor colocado en el bus de datos por procesador0 0 0 0 0 0 0 es recibido correctamente por el dispositivo de memoria en el otro extremo0 0 0 0 0 0 00 0 0 0 0 0 0 • Una manera obvia de probar es escribir todos los posibles 0 0 0 0 0 0 0 valores de datos y verificar 0 0 0 0 0 0 0 • Cada bit se puede probar de forma independiente • Para realizar la prueba de caminar 1s, escriba el primer valor de datos dado en la tabla, verifíquelo al leerlo, escriba el segundo valor, verifique, etc. • Cuando llegas al final de la tabla, la prueba está completa

0
agregado