Atualmente, estou trabalhando em um projeto I2C EEPROM, usando bit-banging para conduzir as linhas SDA e SCL.
Minha função de leitura funciona bem, mas sempre que escrevo qualquer byte com um "1" inicial, sempre leio FF de volta; mesmo que o byte tenha sido programado com outra coisa antes. O "0" inicial é perfeito. Não é minha rotina de leitura; como posso ver no escopo, ele retorna FF.
Estou procurando sugestões sobre por que isso pode ser. Existe algum óbvio que eu possa perder que possa causar o problema? [Não consigo postar o código - empresa confidencial ... :(]
Cada forma de onda que eu olho atende exatamente às especificações. Estou dissociando a EEPROM. Meus pull ups são 2.2k, portanto, dentro das especificações. Estou com clock de cerca de 500 Hz neste protótipo. O chip está enviando ACKs para cada um dos meus bytes para reconhecê-los. Mas isso simplesmente não funciona ...
Estou usando um Microchip 24LC256 .
Algoritmo de escrita simplificado para um 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 leitura simplificado para um 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