I2C Zugriff Verständnisfrage

  • Hallo zusammen.

    Nutze einen Raspberry Pi 3b+ mit der neusten Version von Rasbian Lite.

    Es laufen pararell mehrere Skripte in welchen über PHP mit z.B. "exec("i2cset... ", sowie über Python und C++ Programme auf den I2C Bus zugegriffen wird.

    Meine Frage wäre daher:

    Wird, falls der Bus gerade belegt ist automatisch gewartet bis dieser frei ist oder muss das von mir selbst gehandelt werden?

  • Moin ChrisChip,

    Meine Frage wäre daher:

    Wird, falls der Bus gerade belegt ist automatisch gewartet bis dieser frei ist oder muss das von mir selbst gehandelt werden?

    Das muss das Programm selbst händeln. Jedes Programm muss den Bus selektieren und wieder freigeben.

    Kann man ein Logfile für den I2C- Datenverkehr schreiben lassen?

    Ja, jedes Programm kann das Ergebnis des Verkehrs in eine Datei schreiben. Aber es gilt das gleiche wie oben!

    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo Bernd,

    danke für die schnelle Antwort!
    Hätte gedacht das Betriebssystem regelt die Zugriffe auf den Bus und gibt den dann frei...

    Auf eigene Logfiles habe ich bisher verzichtet.

    Suche nach einer einfacheren Möglichkeit. Da ich erst seit kurzem

    (Upgrade von Jessie auf Stretch und RB 3 --> RB 3B+) Probleme habe.

    Hätte mir etwas mehr Performance erhofft.

    Gibts irgendwo ein Logfile vom Betriebssystem für Busfehler, Systemfehler usw.?

    Grüße

    ChrisChip

  • Moin ChrisChip,

    Hätte gedacht das Betriebssystem regelt die Zugriffe auf den Bus und gibt den dann frei...

    Nee, eigentlich ist es wie überall in der IT: Es kann nur einen geben.

    Auch wenn es so aussieht das alle gleichzeitig was mit der einen Datei machen, kann nur einer lesen oder schreiben. Das muss jemand regeln. Und beim Raspberry und den Bussystemen die auf der GPIO liegen, ist es halt der Programmierer. Du bekommst höchstens eine Warnung, das der Bus gerade besetzt ist.

    Gibts irgendwo ein Logfile vom Betriebssystem für Busfehler, Systemfehler usw.?

    Ja, es gibt Logfiles. Schau dir mal das Verzeichnis /var/log an. Oder einfach journalctl aufrufen. Hilfe gibt es mit "man journalctl" oder die Suchmaschine deines Vertrauens hilft weiter.

    So, nun aber genug der Raterei.

    Schreib doch einfach was du machen willst und wir schauen dann ob das geht.

    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hätte mir etwas mehr Performance erhofft.

    Naja ... wer aus PHP/Python ... über exec() mit i2cset auf den Bus zugreift, der muss sich über fehlende "Performance" nicht wundern :fies:

    Der Bus kann afair 100kHz, 400kHz oder 1.2MHz ... je nachdem, was dran hängt. Wenn das nicht reicht, wäre SPI noch eine Option. Das kann imho 125 MHz ...

    cu,

    -ds-

  • Naja ... wer aus PHP/Python ... über exec() mit i2cset auf den Bus zugreift, der muss sich über fehlende "Performance" nicht wundern :fies:

    Der Bus kann afair 100kHz, 400kHz oder 1.2MHz ... je nachdem, was dran hängt. Wenn das nicht reicht, wäre SPI noch eine Option. Das kann imho 125 MHz ...

    cu,

    -ds-


    Mit Performance war nicht der Bus gemeint ;)

    Über den Bus werden keine zeitkritischen Sachen geschickt. Wie soll ich ihn sonst aus PHP heraus ansprechen?

    Weißt du denn zufällig wie man denn die Busgeschwindigkeit ändern kann?

  • Moin ChrisChip,

    wenn es in der Vergangenheit keine Probleme gab, dann frage ich mich warum du wechselst?

    Es wäre wirklich hilfreich, wenn du mal schreibst was du eigentlich machst/machen willst.

    Weil so, ist es im Nebel stochern....

    Gruss Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Moin Zusammen,

    habe jetzt den Fehler gefunden.

    Bernd666 es werden über den I2C- Bus 2 mcp23017 angesteuert, damit gab es ziehmliche Probleme.

    Ausgänge schalteten willkürlich und zufällig nach der Systemumstellung.

    Nach langem suchen habe ich den alten I2C Treiber wieder verwendet. Damit klappt alles bestens wie zuvor :)

    Falls jemand das gleiche Problem hat, einfach googeln:

    I2C-Treiber-Probleme unter "Stretch"

    3. Eintrag

    Vielen Dank euch allen für die Unterstützung!

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!