Comprobación de datos EEPROM

Me estoy comunicando con un chip EEPROM con microcontrolador. Estoy escribiendo ciertos datos en direcciones específicas en EEPROM y necesito verificar los datos de vez en cuando. Pero no tengo otra idea que leer la dirección escrita de la EEPROM para verificar si los datos están dañados.

Escuché sobre las rutinas CRC y las rutinas Xor. ¿Cuáles son las prácticas comunes para verificar los datos dañados? Sería útil para mi diseño. Estoy publicando el método que conozco:

paso 1: escribir datos en EEPROM y almacenarlos en una variable. paso 2. Vuelva a leer los datos y verifique con la variable almacenada.

Confío en que debe haber procedimientos estándar para verificar si
los datos en EEPROM están dañados o no.

Sería útil si me ayudaras a sugerirme el camino a seguir.

Respuestas (2)

El problema con su enfoque es que los datos de la EEPROM son permanentes, mientras que la variable es volátil. Una vez que se apague y encienda el dispositivo, ¿cómo verificará los datos en el futuro? La variable se ha ido, y todo lo que tiene es la copia de EEPROM.

Lo que tiene hasta ahora no es una estrategia de integridad de datos, sino solo un paso de verificación de escritura (que vale la pena; no lo malinterprete).

Puede almacenar sumas de verificación junto con los datos; sin embargo, las sumas de verificación solo pueden indicarle que los datos están dañados. Esto es mejor que proceder con datos corruptos; sin embargo, si los datos son críticos, significa que el dispositivo ha fallado.

Una solución más robusta es almacenar los datos de tal manera que no solo sea posible la detección de errores, sino también la corrección de errores.

Puede implementar códigos de Hamming para palabras individuales de los datos. Un código Hamming puede recuperarse de un error de un solo bit; más con algunas extensiones.

Si tiene mucho espacio en la EEPROM, puede implementar la redundancia. Por ejemplo, puede dividir la EEPROM en dos mitades que se reflejan entre sí, de forma similar a un esquema RAID0 utilizado para los discos duros. Escriba cada unidad de datos en ambas particiones, con sumas de verificación de bloque. Al leer datos, si una suma de verificación es incorrecta, puede intentar copiarla en la partición duplicada. Lo más probable es que su suma de comprobación sea buena. (Y si es así, puede sobrescribir la copia mala con la copia buena para repararla).

He estado usando este esquema durante años y años en muchos productos. Lo único diferente es que verifico el contenido de cada bloque con un código de verificación de tipo CRC o XOR. Las sumas de verificación aditivas simples no son lo suficientemente robustas para validar el contenido de incluso pequeños bloques de datos.
@MichaelKaras Re: "lo único diferente" No dije en ninguna parte que use una suma de verificación aditiva simple. CRC es un tipo de suma de verificación (Cyclic Redudancy Checksum). Por supuesto, eso es lo que debe usarse siempre que sea posible.
Supongo que uno puede elegir sus abreviaturas como desee. CRC para mí siempre fue un "código de redundancia cíclica", mientras que la suma de verificación siempre ha sido un código de verificación creado al sumar todos los números en un módulo de flujo con un ancho de bit.
@MichaelKaras En realidad, estoy un poco equivocado. CRC significa verificación de redundancia cíclica (no suma de verificación ). La palabra suma de comprobación se utiliza de forma general en informática para indicar cualquier tipo de hash utilizado para la integridad de los datos. MD5 y SHA a veces se denominan algoritmos de suma de comprobación.

Las rutinas CRC y Checksum también necesitan leer los datos. La idea es que puedan condensar una gran sección de datos en solo un par de bytes que deben verificarse. Si acaba de escribir un bloque de datos de un búfer en la memoria en el chip EEPROM, simplemente leerlo del chip y compararlo sería la solución más simple. Sin embargo, si no tiene todo el bloque de datos en la memoria al mismo tiempo, puede confirmar de forma incremental (escribir un byte, volver a leerlo, escribir el siguiente byte, volver a leerlo, etc.) o calcular un CRC o la suma de verificación de los bytes a medida que se escriben, luego lea y luego vuelva más tarde, calcule el CRC o la suma de verificación de los bytes que lee, luego compare.

¿Se puede utilizar CRC o Checksum para toda la memoria eeprom? ¿Hay algún límite en la memoria total que se puede comprobar?
Ambos son algoritmos para destilar un gran bloque de memoria en un valor pequeño y fácil de comparar. No hay límite para el tamaño de un bloque de memoria que puede crear un CRC o una suma de verificación.