|
 |
 |
 |
|
|
c't Projekte - c't-Bot und c't-Sim -
Mailinglisten
[Voriger (Datum)]
[Nächster (Datum)]
[Voriger (Thread)]
[Nächster (Thread)]
[Nach Datum][Nach Thread]
Absender: Marko Bolowski
Datum: Mi, 18.06.2008 13:20:41
Hallo,
in twi.c hat sich ein Fehler in der Funktion 'Send_to_TWI' (I2C-Teil) eingeschlichen. Der schlummert da wohl schon seit längerem.
Dort wird das Senden oder Empfangen auf dem I2C-Bus in einer if-Anweisung verarbeitet. Die Auswertung von 'zusenden' und 'zulesen' ist vertauscht. Für I2C gilt Schreiben->0 (R), Lesen ->1 (W) (vgl. twi.h)!
Vergleicht man die Funktion in TWI (alt) mit I2C (neu) sieht man:
'if ((ptr->slave_adr & 0x1) == 1)' ist i. Allg. nicht das Gleiche wie 'if(!(data_pack[i].slave_adr & R))'. Also kann anschließend toWrite, pWrite im if-Zweig und toRead, pRead im else-Zweig von I2C nicht sein, sondern muss getauscht werden.
Im (alten) TWI-Teil ist es richtig. Das führt u.a. dazu, dass der SRF10 nur mit der alten Methode funktioniert. Nach einem Patch im if-Teil von I2C funktioniert der SRF10 auch damit.
Grüße
Marko
|
|
|