El mejor valor para sobrescribir antiguo para saber si la memoria no se usa en eeprom

0

Tengo una EEPROM en la que quiero almacenar los hashes CRC32 entre 0x0000 y 0x008C. En este rango, necesito una forma en que pueda borrar uno de los hashes y sobrescribir sus bytes a un número predeterminado. Al hacer esto, puedo recorrerlos más tarde buscando un espacio libre que se haya inicializado en mi "valor de espacio libre" para almacenar uno nuevo en esa posición.

Por ejemplo, si la memoria parece:

0A0A0A0A
0B0B0B0B
0C0C0C0C
0D0D0D0D

y borro el tercer índice sobrescribiéndolo con mi marcador de posición

0A0A0A0A
0B0B0B0B
????????
0D0D0D0D

Luego puedo iterar 4 bytes a la vez buscando un espacio libre indicado por el marcador de posición y luego escribir mi nuevo hash en esa ubicación marcada como libre.

Dicho esto con un hash CRC32, cuyo valor es el más seguro de usar como marcador de lugar libre, 00000000 , FFFFFFFF , o un otro valor específico.

Gracias.

    
pregunta randy newfield

4 respuestas

2

Por defecto, los bytes de EEPROM no programados suelen ser 0xFF. Al establecerlos en ese valor, se asegurará de que no sea necesario borrarlos durante el próximo ciclo de escritura, lo que ahorra tiempo y aumenta la esperanza de vida de las propias células.

    
respondido por el Ignacio Vazquez-Abrams
2

Para sobrescribir una celda EEPROM (byte) sin tener que borrarla de antemano, se requiere que cambie sus bits de 1 a 0 (no puede voltear 0 a 1). Por lo tanto, el único "valor de marca" que es seguro es un valor de 32 bits totalmente cero. Bueno, ¡pero un CRC32 de 32 bits totalmente cero es un CRC32 perfectamente válido! Tiene un par de maneras de resolver este problema, y las 2 siguientes se han utilizado con éxito anteriormente:

a) No permita que su algoritmo CRC32 genere un valor de todo cero; debe asignar el valor de todo cero a algún otro valor; esto aumenta (un poco) la posibilidad de tener un pase falso, y

b) Para los bloques de memoria en los que está calculando el CRC32, agregue un byte extra, de modo que haga de este byte extra un valor programado que haga que su CRC32 no sea cero. Esto incurre en un byte extra en su bloque que a veces no es posible.

Otra opción más es tener una matriz de bits (en la parte superior de la tabla CRC32) que representa los bloques que están libres (un 1 representa libre, un 0 representa un bloque usado). Solo necesita 1 bit por bloque, por lo que la sobrecarga no es tan grande.

    
respondido por el guga
0

Utilice algunos número mágico . Aquí hay algunos ejemplos:

BEEFCACE
DEADBEEF
DEADC0DE
    
respondido por el Armandas
0
  

Dicho esto con un hash CRC32, cuyo valor es el más seguro de usar como marcador de lugar libre, 00000000, FFFFFFFF u otro valor específico.

Ninguno de ellos. Cada valor de hash CRC32 es igualmente probable que aparezca.

Dependiendo de lo que esté haciendo con los hash, una opción puede ser almacenar solo los 31 bits inferiores del hash, y usar el bit restante como indicador para indicar si se ha utilizado la ubicación.

    
respondido por el duskwuff

Lea otras preguntas en las etiquetas