Attualmente sto lavorando a un progetto EEPROM I2C usando il bit banging per guidare le linee SDA e SCL.
La mia funzione di lettura funziona bene ma ogni volta che scrivo qualsiasi byte con un "1" iniziale, rileggo sempre FF; anche se il byte è stato programmato con qualcos'altro prima. Il comando "0" è perfetto. Non è la mia routine di lettura; come posso vedere dall'ambito, restituisce FF.
Sto cercando suggerimenti sul perché questo potrebbe essere. C'è qualche ovvio che potrei perdere che potrebbe causare il problema? [Non riesco a pubblicare il codice - società riservata ... :(]
Ogni forma d'onda che guardo soddisfa esattamente le specifiche. Sto disaccoppiando la EEPROM. I miei pull up sono 2.2k quindi all'interno delle specifiche. Sto registrando un clock a circa 500 Hz in questo prototipo. Il chip sta inviando ACK a ciascuno dei miei byte in modo da riconoscerli. Ma non funziona ...
Sto usando un Microchip 24LC256 .
Algoritmo di scrittura semplificato per 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 di lettura semplificato per 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