Je travaille actuellement sur un projet EEPROM I2C utilisant le bit banging pour piloter les lignes SDA et SCL.
Ma fonction de lecture fonctionne bien mais chaque fois que j'écris un octet avec un "1", je relis toujours FF; même si l'octet a été programmé avec autre chose auparavant. Un "0" en tête est parfait. Ce n'est pas ma routine de lecture; comme je peux le voir sur la portée, il retourne FF.
Je cherche des suggestions sur la raison pour laquelle cela pourrait être. Y a-t-il une évidence que je pourrais manquer qui pourrait causer le problème? [Je ne peux pas poster le code - société confidentielle ... :(]
Chaque forme d'onde que je regarde répond exactement aux spécifications. Je suis en train de découpler l'EEPROM. Mes tractions sont de 2,2k donc conformes aux spécifications. Je pointe à environ 500 Hz dans ce prototype. La puce envoie des ACK à chacun de mes octets pour les reconnaître. Mais ça ne marche pas ...
J'utilise une Microchip 24LC256 .
Algorithme d'écriture simplifié pour un octet:
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
Algorithme de lecture simplifié pour un octet:
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