Ich arbeite derzeit an einem I2C-EEPROM-Projekt, bei dem Bit-Banging zum Ansteuern der SDA- und SCL-Leitungen verwendet wird.
Meine Lesefunktion funktioniert einwandfrei, aber wenn ich ein Byte mit einer führenden "1" schreibe, lese ich FF immer zurück. auch wenn das Byte zuvor mit etwas anderem programmiert wurde. Führende "0" ist perfekt. Es ist nicht meine Leseroutine; Wie ich auf dem Bereich sehen kann, gibt es FF zurück.
Ich suche nach Vorschlägen, warum dies sein könnte. Gibt es irgendwelche offensichtlichen Fehler, die das Problem verursachen könnten? [Ich kann den Code nicht posten - Firma vertraulich ... :(]
Jede Wellenform, die ich betrachte, entspricht genau der Spezifikation. Ich entkopple das EEPROM. Meine Klimmzüge sind 2,2k, also innerhalb der Spezifikation. Ich takte in diesem Prototyp mit ungefähr 500 Hz. Der Chip sendet ACKs an jedes meiner Bytes, damit er sie erkennt. Aber es funktioniert einfach nicht ...
Ich benutze einen Microchip 24LC256 .
Vereinfachter Schreibalgorithmus für ein 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
Vereinfachter Lesealgorithmus für ein 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