Actualmente estoy trabajando en un proyecto I2C EEPROM usando bit-banging para manejar las líneas SDA y SCL.
Mi función de lectura funciona bien, pero cada vez que escribo cualquier byte con un "1" inicial, siempre leo FF; incluso si el byte ha sido programado con algo más antes. Liderando "0" es perfecto. No es mi rutina de lectura; Como puedo ver en el alcance, devuelve FF.
Estoy buscando sugerencias sobre por qué esto podría ser. ¿Hay alguna obvia que pueda pasar por alto que pueda causar el problema? [No puedo publicar el código - empresa confidencial ... :(]
Cada forma de onda que miro cumple exactamente con las especificaciones. Estoy desacoplando la EEPROM. Mis pull ups son 2.2k, así que dentro de las especificaciones. Estoy registrando a unos 500 Hz en este prototipo. El chip está enviando ACK a cada uno de mis bytes, por lo que los reconoce. Pero simplemente no funciona ...
Estoy usando un Microchip 24LC256 .
Algoritmo de escritura simplificado para 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
Algoritmo de lectura simplificado para 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