EEPROM 93C66 ¿problema de bits ficticios?

¿Podría alguien explicar por qué la EEPROM 93C66 genera un 0 ficticio durante una operación de lectura?

De la hoja de datos:

5.1 Leer datos de la memoria La instrucción Leer datos de la memoria (READ) genera datos en la salida de datos en serie (Q). Cuando se recibe la instrucción, se decodifican el código de operación y la dirección, y los datos de la memoria se transfieren a un registro de desplazamiento de salida. Primero se emite un bit 0 ficticio, seguido del byte de 8 bits o la palabra de 16 bits, con el bit más significativo primero. Los cambios de datos de salida son activados por el flanco ascendente del reloj serie (C). El M93Cx6 incrementa automáticamente el registro de dirección interno y registra el siguiente byte (o palabra) siempre que la entrada de selección de chip (S) se mantenga alta. En este caso, el bit 0 ficticio no se emite entre bytes (o palabras) y se puede leer un flujo continuo de datos.

Si la entrada/salida está orientada a bytes, y el primer bit de una lectura es un bit ficticio 0, todos los datos posteriores se desplazan (retrasan) un bit para hacer espacio para este bit ficticio.

Por ejemplo, si los datos almacenados en la EEPROM son:

byte1:[000000001] byte2:[000000001] 

se lee de la EEPROM como:

byte1:[000000000] byte2:[100000000] byte3:[100000000]

Me gustaría almacenar algunos datos en EEPROM, pero este cambio es el problema, ¿cuál es el uso de esta cosa diabólica llamada dummy 0?

EDITAR:

Solo quiero dejar un comentario sobre mi solución. Debido a que pude cambiar IC en mi caso, seguí usando 25LC640A-I/P DIL, se comporta como yo quería, así que si alguien necesita una pista, aquí está.

No tengo idea de por qué lo están haciendo, pero como está en la hoja de datos, tienes que vivir con eso. Parece ser un diseño bastante tonto. No te preocupes por el "por qué". Mirando la hoja de datos, no parece que necesite enviar el bit ficticio 0 al escribir.
pero corta mis valores, y los corrompe. Estoy tratando de encontrar por qué para ver si hay una razón para eso.
@ user505160 El chip no corrompe sus datos al insertar un bit ficticio, es su programa el que corrompe los datos al no ignorar el bit ficticio.

Respuestas (1)

Usamos el 9346 en varios de nuestros productos, y tiene el mismo "0" falso.

Creo que la razón por la que hace esto es que necesita tener el último bit de dirección (A0) registrado antes de leer los datos y comenzar a registrar los datos solicitados. Si observa la hoja de datos, puede ver que el bit ficticio se superpone al bit de dirección A0.

Puedes arreglar esto combatiendo el fuego con fuego :-). Agregue su propio bit de diablo ficticio al final de la palabra de dirección (haga que la longitud sea uno más larga), de modo que su puerto SPI ignore ese primer bit de la respuesta y comience a registrar la respuesta en el límite correcto.

Además, siempre necesito mirar de cerca para ver que mi configuración de CPOL y CPHA sea correcta. A veces, las cosas casi funcionan cuando estas configuraciones son incorrectas, pero están erradas por un bit (CPHA incorrecto) o, a veces, simplemente no son confiables (CPOL incorrecto).