Hallo Leute, ich möchte gerne mit einem Arduino die Kommunikation zwischen einem I2C Display Treiber und dem Display selber beobachten. Dazu dachte ich, dass ich einen Uno als I2C Slave konfiguriere, ihn jedoch nicht auf die Nachrichten des Masters antworten lasse. Somit würde er ja jede Nachricht mitlesen aber nicht darauf reagieren. Ich könnte jedoch die Nachricht, die ja eigentlich für das Display bestimmt war, in meinem Arduino für weitere Anwendungen benutzen. Quasi ein I2C Sniffer. Habt ihr eine Idee wie sich so etwas umsetzen lässt oder ob es sich überhaupt umsetzen lässt? Viele Grüße und Danke.
Mit dem Hardwaremodul geht das nicht, aber per Software geht alles. guugst du hier: Beitrag "I2C (TWI) Sniffer mit AVR" Oliver
Ein Slave kann ja nur empfangen wenn er adressiert ist. Somit schickt er aber dann auch ein ACK wenn er eine Adresse oder Daten bekommen hat. Um das zu vermeiden würde ich einen Soft-I2C-Slave programmieren und das ACK beim Empfangen weglassen .... Allerdings wäre das eine Herausforderung wenn man die Datenrate nicht kennt oder allein wenn diese sehr hoch ist und man per Interrupt einzelne Bits empfangen will ... Also mit Einschränkung umsetzbar ....
Oliver S. schrieb: > guugst du hier: > Beitrag "I2C (TWI) Sniffer mit AVR" Ich würde gerne die Arduino-Hardware nutzen. Einen Tiny habe ich hier nicht rumliegen.
Mitdenker schrieb: > Allerdings wäre das eine Herausforderung wenn man die Datenrate > nicht kennt oder allein wenn diese sehr hoch ist und man per > Interrupt einzelne Bits empfangen will ... Der Bus arbeitet mit 400 kHz und ist mir bekannt.
Das Konzept finde ich gut. Einfach ein Tool, mit dem man I2C Kommunikation beobachten kann. Aber ich würde es eher anders angehen: - einen Logicanalyzer implementieren - die Daten zum PC senden (flanken mit timestamps) - am PC eine Software, die den Datenstrom analysiert Man wäre so nicht beschränkt auf I2C. Jegliche Kommunikation könnte man aufzeichnen und am PC übersetzen.
Thomas W. schrieb: > Aber ich würde es eher anders angehen: > > - einen Logicanalyzer implementieren > - die Daten zum PC senden (flanken mit timestamps) > - am PC eine Software, die den Datenstrom analysiert Gerade das möchte ich aktuell noch nicht machen. Erstmal würde ich gerne die Nachrichten auf dem Arduino auswerten und anschließend Rückschlüsse ziehen. Natürlich ist es deutlich universeller wie du es vorgeschlagen hast aber mir reicht erstmal I2C.
ThinkArduino schrieb: > Ich würde gerne die Arduino-Hardware nutzen. Einen Tiny habe ich hier > nicht rumliegen. Pech ;) Eine kurze Google-Suche nach "I2C Software slave Arduino" fördert das hier zu Tage: https://github.com/Testato/SoftwareWire/wiki/Arduino-I2C-libraries Darin wird eine Software-lib aufgeführt, die auch Slave kann. Die würde ich in dem Fall mal näher anschauen, und eventuell als Ausgangsbasis nutzen. Oliver
ThinkArduino schrieb: > Ich würde gerne die Arduino-Hardware nutzen. Einen Tiny habe ich hier > nicht rumliegen. Lies den Thread mal bis zum Ende... VG Stefan
Stefan W. schrieb: > ThinkArduino schrieb: >> Ich würde gerne die Arduino-Hardware nutzen. Einen Tiny habe ich hier >> nicht rumliegen. > > Lies den Thread mal bis zum Ende... > > VG > > Stefan Habe ich. der Arduinoversion habe ich bereits getestet und diese funktioniert leider nicht. Jedenfalls passt der Terminaloutput nicht mit dem auf dem Oszi zusammen.
ThinkArduino schrieb: > Der Bus arbeitet mit 400 kHz und ist mir bekannt. Der Bus arbeitet mit einer beliebigen Frequenz von Null bis zu einer Maximalfrequenz die von Master und Slave abhängig ist. Das ist dir scheinbar nicht bekannt.
Mitdenker schrieb: > ThinkArduino schrieb: >> Der Bus arbeitet mit 400 kHz und ist mir bekannt. > > Der Bus arbeitet mit einer beliebigen Frequenz von Null > bis zu einer Maximalfrequenz die von Master und Slave > abhängig ist. > > Das ist dir scheinbar nicht bekannt. Oh scheinbar nicht. Habe nur ins Datenblatt des Display's und des Treibers geschaut und dort steht "400 kHz I2C-Bus".
ThinkArduino schrieb: > Habe nur ins Datenblatt des Display's und des Treibers geschaut Davon war vorher gar nicht die Rede. Bei "Display's" solltest du dich mal bei dieser Seite schlau machen: http://www.deppenapostroph.info
Oliver S. schrieb: > Darin wird eine Software-lib aufgeführt, die auch Slave kann. Die würde > ich in dem Fall mal näher anschauen, und eventuell als Ausgangsbasis > nutzen. Arduino Libs sind bekanntlich dazu da sich von der Hardware zu abstrahieren was oft zu bösen Geschwindigkeitseinbussen führt. Wird also in diesem Zusammenhang (hohe Datenrate, jedes Bit muss einzeln bearbeitet werden) nicht sehr hilfreich sein. Einziger Ausweg: beim "Sniffen" setzt man die Datenrate des zu untersuchenden Systems soweit herunter dass "der Sniffer" auch noch mitkommt. ThinkArduino schrieb: > Habe nur ins Datenblatt des Display's und des > Treibers geschaut und dort steht "400 kHz I2C-Bus". Ich wette dass man das Display auch mit 3721 Hz Clockfrequenz betreiben kann. Oder mit jeder anderen Frequenz unterhalb von 400 kHz.
ThinkArduino schrieb: > Habe ich. der Arduinoversion habe ich bereits getestet und diese > funktioniert leider nicht. Jedenfalls passt der Terminaloutput nicht mit > dem auf dem Oszi zusammen. Ok. Kannst du denn sicher, dass dein Oszilloskop korrekt dekodiert? Und passt die Busgeschwindigkeit zur Signalform? (Flankensteilheit -> Lastkapazität/ Dimensionierung Pullup-R) Ich würde auch das nicht außer Acht lassen, gerade bei Busfrequenzen von 400 kHz. Eventuell solltest du für die Tests die Taktfrequenz mal herunter setzen (sofern du das im Master ändern kannst). Viele Grüße Stefan
Es gibt einfach FPGAs im Arduino Format für ca 30 Euro. 2 Tage Software und der I2C Sniffer ist fertig.
PittyJ schrieb: > 2 Tage Software und der I2C Sniffer ist fertig. Insbesondere bei Arduino-Jüngern (die immer nach der geeigneten Lib suchen) könnte sich diese Zeit noch "geringfügig" erhöhen.
Aktuelles Projekt in der März-April Elektor: Ein I2C-Sniffer mit schöner Auswertung per PC-Programm. Zu finden unter https://www.elektormagazine.de/magazine/elektor-87/42487
Ja, sorry, eben in der Mittagspause gelesen und gedacht da war doch was. Muss man ja nicht nehmen...
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.