I2C Bus "belauschen"

  • Hallo,


    ich möchte bei einem Gerät den Datenverkehr auf dem I2C Bus mitlauschen. Der Bustakt beträgt etwa 70kHz. Ich hab dies zunächst mit einem PIC16F628 versuch; SCL einen Interrupt auslösen lassen. Adresse/Daten konnte ich soweit auch auswerten, allerdings entgeht mir so komplett die Start/Stop/Restart Geschichte. ACK/NACK könnte ich noch ermitteln. Hab dies per Polling von SDA und SCL versucht, leider ohne großen Erfolg.


    Mit dem MSSP-Interface von einem größeren PIC muss ich noch gucken, ob dies möglich ist, da ich im Datenblatt momentan nur Master/Slave gefunden hab; Slave allein is ja auch nicht das richtige; er wird ja nich direkt angesprochen und soll auch keine ACKs erzeugen.


    Gibt es freie Software (gerne auch für Linux), die vielleicht sogar den einfachen seriellen Selbstbauadapter unterstüzt, welcher in den Spezifikationen von Philips aufgeführt ist?


    Ein Logikanalzyer wäre natürlich das beste, habe aber leider keinen und wüsste auch nich, wo ich mir einen ausleihen kann.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.

  • moin,
    ich kenne zwar den seriellen selbstbauadapter gem.philips spez. nicht allerdings war in elektor mal ein serieller selbstbauadapter für an logicanalyzer über com unter windows veröffentlicht.
    die software hab ich hier und schick sie dir mal (setup.zip)
    den entspr. elektor artikel müsstest halt rausfinden bzw. die soft evtl. an deine bedürfnisse anpassen.
    gruss gerd


    edit:
    In elektor 2/03 ist der adapter.
    wegen der verwendeten fifos gabs verschiedene modifikationen..gugeln..

  • Interrupt gesteuert von SDA wäre wahrscheinlich besser als polling. Es gibt aber auch fertige I²C Bus watcher wenn du dafür Geld ausgeben willst. Das Tektronix DPO4000 dekodiert den I²C auch sehr fein. Das 7104er leider nicht :-(


    Der Philips Selbstbauadapter an der parallelen Schnittstelle mit dem 7405 den ich kenne, wird nur zum Schreiben verwendet, d.h. PC ist immer Master. Ist auch nicht mulitmasterfähig. Und lauschen geht da auch nicht.

  • Schade, dachte ich mir fast.


    Geld ausgeben habe ich für den (bisher) einmaligen Anwendungsfall nicht - ich werde mal gucken, ob ich nich dieses Gerät bekomme: http://elmicro.com/de/digiview.html


    Habe mir evtl. ne Quelle aufgetan, wo ich den schnell leihweise bekomme.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Ergo: Je mehr Käse, desto weniger Käse.

  • Selber bauen... ob der PIC dafür richtig, wage ich zu bezweifeln: zwar
    schnell, aber zuwenig RAM.
    SDA und SCL mit ca. 1Mhz samplen: jeweils auf den D-Eingang eines
    D-Flipflops geben, das mit 1MHz getaktet ist. Ausgänge der beiden D-FF auf
    zwei weitere D-FF, um Metastabilität zufiltern (ebenfalls mit 1Mhz getaktet).
    Diese Ausgänge wiederum auf zwei weitere D-FF (1Mhz).
    Zwischen den letzten und den vorletzten D-FF jeweils XOR schalten,
    das bei Ungleichheit einen Interrupt am µC auslöst.
    µC übernimmt dann die gesampelten SDA und SCL.
    Parallel mit 1Mhz-Takt noch Counter mitlaufen lassen, damit der µC noch
    einen Timestamp einlesen kann (Counter-Overflow bei Idle nicht vergessen).
    Die im µC gebufferten Rohdaten dann per RS232 an PC, auf dem Du
    mit einer Programmiersprache Deiner Wahl eine Visualisierung schreibt.
    Wenn Du die Inputs noch verbessern willst, machst Du da ESD-Schutz,
    FET-Pufferung (zur Minimierung der ohmschen und kapazitiven Buslast)
    und Schmitt-Trigger mit variablen Triggerpegeln hin...
    Eine nette WE-Bastelei. ;)


    Edit: Ach ja, die internen Units kannst Du dafür nicht verwenden, weil
    die kein passives Listen machen können, ohne ACK zu erzeugen.

    "As we know, there are known knowns. There are things we know we know. We also know there are known unknowns. That is to say we know there are some things we do not know. But there are also unknown unknowns, the ones we don't know we don't know." (Donald Rumsfeld)
    "Ich weiß, dass ich nichts weiß." (Sokrates)
    "Ich weiß nicht mal, dass ich nichts weiß." (Simba2)
    "Ich weiß' alles" (Alpina-Katze)

    Einmal editiert, zuletzt von tcfkao ()