Hallo, ich habe einen MCP4651 und den via I2C an einen Raspberry Pi geschlossen. Ich betreibe ihn mit 5V und einen Logik-Level-Shifter dazwischen (da der Raspberry nur 3,3V am GPIO liefert) Anfangs hat alles super geklappt. Ich konnte mit i2cdetect den IC unter der Adresse sehen (0x28), mit der ich ihn gemäß der pins konfiguriert hatte. Dann habe ich versucht den Status auszulesen. Dafür gibt es eine eigene Register-Adresse 0x05. Also bin ich mit i2cget -y 1 0x28 0x05 w drauf losgegangen und habe auch 0x8100 zurückbekommen. Dieser Wert entspricht nicht dem, was im Datenblatt dazu steht. Deshalb habe ich versucht statt einem Word (siehe oben das w am Schluß) nur ein Byte (b) zu lesen. Das brachte nur 0x00, was auch nicht ganz passt. Zum eigentlichen Problem: Leider "unabsichtlich" (ich hatte mich in der man-page verlesen) habe ich dann noch ein i2cget -y 1 0x28 0x05 c abgesetzt, was - wie ich nachher rausbekommen habe - eine "schreibe ein Byte und lese ein Byte"-Kombination ist. Danach - oder besser ich weiß nicht ob es dadurch oder schon nach dem 0x8100 response war - spricht der IC gar nicht mehr und blockiert den ganzen I2C-Bus. Wenn ich i2cdetect aufrufe, bekomme ich eine Anzeige als hätte ich 127 Geräte am Bus hängen. Wenn ich den IC vom Bus nehme, dann ist die Anzeige normal, weshalb ich davon ausgehen, dass der IC nun etwas abbekommen hat. Meine Frage nun: Hat irgendwer Erfahrung ob ich dieses Ding resetten kann oder mit i2cset (oder ähnlichem) die I2C-Kommunikation wieder herstellen kann? Natürlich habe ich das Ding schon vom Strom genommen und wieder angehängt, jedoch hat dies keine Auswirkung. Das alleine ist schon interessant, weil das Ding eigentlich keinen EEPROM hat, sondern nur RAM und das sollte doch bedeuten, dass ein Ab- und Anschaltung immer hilft!? Meine "graue" Theorie ist, dass ich durch das write/read-Kommando in die Status-Register-Adresse etwas hinein geschrieben habe, was ihn nun komplett durcheinander gebracht hat, aber warum sollte das dauerhaft sein? Leider habe ich gerade nur den einen IC und einen weiteren zu besorgen würde Zeit brauchen (gibt es nicht im Laden, sondern nur auf Bestellung). Hat wer eine Idee, wie ich das Ding wieder zum Laufen bringe? Danke!
Stephan P. schrieb: > Leider habe ich gerade nur den einen IC und einen weiteren zu besorgen > würde Zeit brauchen (gibt es nicht im Laden, sondern nur auf > Bestellung). Das Ding kostet keinen Euro und ist innerhalb von einem Werktagen lieferbar. Was willst du da groß hinterherjammern.
Stephan P. schrieb: > Ich betreibe ihn mit 5V und einen Logik-Level-Shifter > dazwischen (da der Raspberry nur 3,3V am GPIO liefert) Und wo liegt da der Sinn drin wenn das Ding von Hause aus auch mit 3,3V arbeitet? MCP4651 : Wide Operating Voltage: 2.7V to 5.5V - Device Characteristics Specified
> Und wo liegt da der Sinn drin wenn das Ding von Hause aus auch mit 3,3V > arbeitet? Na weil es auch noch andere Komponenten in der Schaltung gibt die jedoch nur 5V vertragen. Ich hatte es eigentlich nur der Vollständigkeit halber erwähnt.
> Das Ding kostet keinen Euro und ist innerhalb von einem Werktagen > lieferbar. Was willst du da groß hinterherjammern. Unter anderem, weil das Ding ein TSSOP Package ist und nicht eben einfach mal auf ein Steckbrett drauf geht. Ich hatte noch ein Breakoutboard von einem anderen IC den ich runtergelötet habe, aber das Board war selbst geätzt und die Platine verträgt es nicht nocheinmal etwas runter und wieder raufzugeben. Also bedeutet das neue Breakoutboards erstellen (ich mache so etwas mit dem Direkttonerverfahren). Alles in allem nicht wenig Aufwand. Aber Leute: Bitte bei der Sache bleiben! Ich hatte diese Frage hier gestellt, um Input von Leuten zu bekommen, die mit I2C Erfahrung haben und nicht um die Sinnhaftigkeit meiner Frage zu diskutieren. Grundsätzlich geht es mir um das Verständnis und nicht darum eh offensichtliche Lösungen (jedoch ohne Lerngehalt) aufgezeigt zu bekommen.
Stephan P. schrieb: > Ich betreibe ihn mit 5V und einen Logik-Level-Shifter > dazwischen Welchen denn? Sind auch auf dessen beiden Seiten je 2 Pullups dran?
Stephan P. schrieb: > Wenn ich i2cdetect aufrufe, bekomme ich eine Anzeige als > hätte ich 127 Geräte am Bus hängen. Dann ist das i2cdetect Schrott. Es sollte wenigstens erkennen, ob SDA, SCL auch wirklich high ausgeben, wenn high gesendet wird. Hat der RP ein HW- oder ein SW-I2C?
Nur weil es mir gerade selbst passiert ist: ESD Schaden kannst Du ausschliessen? Ich habe mit synthetischer Kleidung vorgestern eine WS2812 RGB Led ins jenseits befördert. viel Erfolg Hauspapa
Peter Dannegger schrieb: > Stephan P. schrieb: >> Ich betreibe ihn mit 5V und einen Logik-Level-Shifter >> dazwischen > > Welchen denn? > Sind auch auf dessen beiden Seiten je 2 Pullups dran? Es ist das Ding: http://electronics.semaf.at/Logic-Level-Converter Der ist an sich unidirektional, aber der TX-Kanal ist eh bidirektional. Aber grundsätzlich hat die Kommunikation schon funktioniert, weshalb ich die Funktion dessen nicht angezweifelt hätte. Aber ja, die zwei Pullups sind dran.
Peter Dannegger schrieb: > Dann ist das i2cdetect Schrott. Es sollte wenigstens erkennen, ob SDA, > SCL auch wirklich high ausgeben, wenn high gesendet wird. > > Hat der RP ein HW- oder ein SW-I2C? Das kann ich leider nicht sagen. Dummerweise habe ich kein Oszi, weshalb ich mit herkömmlichen Methoden versuchen muss das zu debuggen.
hauspapa schrieb: > ESD Schaden kannst Du ausschliessen? Ja, das Ding ist während des gesamten Vorganges (als es noch ging und auch danach) unangetastet gewesen. Aber danke für den Hinweis!
Peter Dannegger schrieb: > Dann ist das i2cdetect Schrott. Es sollte wenigstens erkennen, ob SDA, > SCL auch wirklich high ausgeben, wenn high gesendet wird. Das scheint das Standard Linux Tool zu sein. Das kann natürlich nur das erkennen, was der Kerneltreiber und die darunterliegende Hardware unterstützt. Ein echter Zugriff auf die Hardware ist im Usermode nicht möglich. MfG Klaus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.