Jango1987
07.11.2009, 16:51
Hi leute, ich möchte das MSSP-Mudul nutzen um über einen I²C-Bus einen Seriellen EEprom zu steuern.
Mein Problem dabei: Start-Condition geht. Ich kann Daten Senden und bekomme auch ACK vom EEprom nach jedem byte, dass ich sende. Dass die ACKs vom EEprom kommen, weiß ich, weil kein ACK mehr kommt, wenn ich den Identifier ändere.
nur kann ich keine Daten empfangen. Ich empfange nur "1-worte" also 0xff.
So in etwa sieht mein Flowchart aus:
Fürs schreiben:
- Start-Condition
- Deviceselect-byte senden (R/W=0)
--- empfange ACK
- Address High-byte senden
--- empfange ACK
- Address Low-byte senden
--- empfange ACK
- Data-byte senden
--- empfange ACK
- Stop-Condition
Fürs lesen:
- Start-Condition
- Deviceselect-byte senden (R/W=0)
--- empfange NOACK !!!!!
- Start-Condition
- Deviceselect-byte senden (R/W=0)
--- empfange ACK
- Address High-byte senden
--- empfange ACK
- Address Low-byte senden
--- empfange ACK
- ReStart-Condition
- Deviceselect-byte senden (R/W=1)
- Data-byte empfangen
--- NOACK senden
- Stop-Condition
ich schreibe b'11110000' und lese b'11111111'. Dazwischen habe ich eine Warteschleife von ca 30msec.
Der verwendete EEprom ist ein M24C32
http://www.datasheetcatalog.org/datasheet/SGSThomsonMicroelectronics/mXrrswv.pdf
Hat jemand eine idee was daran falsch sein kann? danke für die Mühe des lesens..
Gruß Jango1987
Mein Problem dabei: Start-Condition geht. Ich kann Daten Senden und bekomme auch ACK vom EEprom nach jedem byte, dass ich sende. Dass die ACKs vom EEprom kommen, weiß ich, weil kein ACK mehr kommt, wenn ich den Identifier ändere.
nur kann ich keine Daten empfangen. Ich empfange nur "1-worte" also 0xff.
So in etwa sieht mein Flowchart aus:
Fürs schreiben:
- Start-Condition
- Deviceselect-byte senden (R/W=0)
--- empfange ACK
- Address High-byte senden
--- empfange ACK
- Address Low-byte senden
--- empfange ACK
- Data-byte senden
--- empfange ACK
- Stop-Condition
Fürs lesen:
- Start-Condition
- Deviceselect-byte senden (R/W=0)
--- empfange NOACK !!!!!
- Start-Condition
- Deviceselect-byte senden (R/W=0)
--- empfange ACK
- Address High-byte senden
--- empfange ACK
- Address Low-byte senden
--- empfange ACK
- ReStart-Condition
- Deviceselect-byte senden (R/W=1)
- Data-byte empfangen
--- NOACK senden
- Stop-Condition
ich schreibe b'11110000' und lese b'11111111'. Dazwischen habe ich eine Warteschleife von ca 30msec.
Der verwendete EEprom ist ein M24C32
http://www.datasheetcatalog.org/datasheet/SGSThomsonMicroelectronics/mXrrswv.pdf
Hat jemand eine idee was daran falsch sein kann? danke für die Mühe des lesens..
Gruß Jango1987