Actualmente estoy trabajando en un I2C EEPROM del proyecto el uso de los bits de golpear a la unidad de la SDA y SCL líneas.
Mi función de lectura funciona bien, pero cuando escribo cualquier byte con un "1", siempre leo FF de vuelta, incluso si el byte ha sido programado con algo más antes. "0" es perfecto. No es mi lectura de rutina; como puedo ver en el ámbito devuelve FF.
Estoy buscando sugerencias sobre por qué esto podría ser. Es allí cualquier obvio que me podría pasar por alto que podría causar el problema? [No puedo publicar el código confidencial de la empresa... :(]
Cada forma de onda miro cumple con la especificación exactamente. Yo soy de desacoplamiento de la EEPROM. Mi pull ups son 2.2 k de modo que dentro de especificación. Me estoy registrando en alrededor de 500 Hz en este prototipo. El chip es el envío de Ack para cada uno de mis bytes por lo que los reconoce. Pero simplemente no funciona...
Estoy utilizando un Microchip 24LC256.
Simplificado algoritmo de escritura de un byte:
wait
SDA low
SCL low
wait
for each bit
if bit is set: SDA high
if bit is unset: SDA low
wait
SCL high
wait
wait
SCL low
wait
wait
SDA high
SCL high
wait
wait
check ACK status
SDA low
SCL low
wait
return ACK status
Simplificado algoritmo de lectura de un byte:
wait
SCL low
SDA high
for each bit (8 bits)
SCL high
wait
wait
SCL low
wait
check and store received bit
wait
do a NACK or ACK depending on if it is the last byte