PI4B / Compute Module 4 / bcm2711 I2C Mappings

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi,

    ich habe mir ein eigenes CarrierBoard für das CM4 gebaut, jedoch bezieht sich meine Frag recht allgemein auf das Mapping UND Aktivieren der 5 I2C.

    Hier mal die wichtigsten Quellen:

    https://datasheets.raspberrypi.org/cm4/cm4-datasheet.pdf

    https://www.raspberrypi.org/documentation/…TA_2711_1p0.pdf

    Vorweg:

    So ganz verstanden habe ich das mit den Firmware getriebenen Bussen und jenen die in Software verfügbar sind noch nicht.

    Das englische Forum hat mich sehr verwirrt, vor allem weil viele nicht mals ihre Schreibfehler korrigieren oder sich auf sehr alte PiOS beziehen, die angeblich längst korrigiert wurden.

    Im groben habe ich mich an dem kaufbaren IO-Board der Foundation orientiert und exakt gleich die I2Cs an DSI0 (IDSC/IDSD) & DSI1(SCL0/SDA0) gehängt.

    Für die Tatsache, dass an IDSC/IDSD das netlabel/alias SCL1/SDA1 gehängt wurde möchte man so manche Designer schlagen.

    Zumal dann im Forum darauf hingewiesen wird, dass DSI1 das primäre Display sein (analog zum PI4B) und DSI0 das sekundäre.

    https://datasheets.raspberrypi.org/cm4io/cm4io-datasheet.pdf

    Mittels des richtigigen Blob für Display0_only ODER Display1_only bekomme ich auch beide Anschlüsse (incl. Touch) zum laufen.

    Nun das Problem:

    Ich möchte gerne verstehen WIE ich die angeblich 5 vorhandenen I2Cs des bcm2711 verkabeln und auch tatsächlich nutzen kann?

    dtparam=i2c_arm=on

    Bringt mich "nur" zu einem Ergebnis, welches genau wie diese hier aussieht (nur dass ich keine Devices finde)

    Icon: Auslesen von I2C am Beispiel BME280

    Ergo ist GPIO2/GPIO3 --> I2C1 (Und sollte laut 200Pin Mapping des CM4 auf PIN56/58 liegen)

    Aber wo sind die anderen I2Cs? (Z.b. jene die ich mit auch an den DSI habe)

    Kann ich diese NICHT verwenden, wenn ich dort ein Display betreibe? (relativ unwahrscheinlich)

    Code
    dir /dev/i2c*

    Gibt mir jedenfalls kein weiteres Device an.


    Zur Vollständigkeit hier noch mal das Mapping von dem ich ausgehe (Bitte bezieht euch NICHT auf das HAT)

    BCM2711Compute Module 4Schnittstelle
    GPIO0 & GPIO1(ALT0) | GPIO28 & GPIO29(ALT0)?? | GPIO44 & GPIO45(ALT1)PIN80 & PIN82/dev/i2c-0
    GPIO2 & GPIO3(ALT0)PIN58 & PIN56/dev/i2c-1
    ??????ID_SD(35) & ID_SC(36)/dev/i2c-2
    GPIO4 & GPIO4(ALT5)PIN34 & PIN54/dev/i2c-3
    GPIO6 & GPIO7(ALT5) | GPIO8 & GPIO9(ALT5)PIN30 & PIN37 | PIN39 & PIN40/dev/i2c-4
    GPIO10 & GPIO11(ALT5) | GPIO12 & GPIO13(ALT5)PIN44 & PIN38 | PIN31 & PIN28/dev/i2c-5


    Hier noch ein Post, der mich ebenfalls sehr verwirrt hat, da von Piin27/28 die Rede war (für Zeile 1)

    https://www.raspberrypi.org/forums/viewtopic.php?f=98&t=295172

    Also wie kann ich nun erfolgreich meine I2c-Uhr (an SDA0/SCL0 des CM4)

    Und meine anderen Geräte an ID_SD/ID_SC (des CM4) erkennen?

    LG :conf:

    2 Mal editiert, zuletzt von Oekel (9. Februar 2021 um 15:45)

  • Ich denke, hier stehen schon einige Infos, die ich aber nicht recht deuten kann.

    https://github.com/raspberrypi/do…-disp0-only.dts

    https://github.com/raspberrypi/do…-disp1-only.dts

    Können die nicht weiter verwendet werden, wenn ein Display drauf hängt?

    Und wieso finde ich nur die ID_SCL/ID_SDA und nicht SCL0/SDA0 hier?

    Welches I2C bleibt mir denn noch um vernünftig arbeiten zu können?

  • Du brauchst Dich mit den alternate funktions der GPIO Pins nicht herumschlagen, wenn Du laut /boot/overlays/README

    dtoverlay=i2c3 bis i2c6 für weitere I2C Anschlüsse verwendest. Dabei ist jeder zusätzliche I2C-Bus an zwei verschiedenen Pin Paaren, davon einmal default voreingestellt, an der 40 Pol. Pinleiste abgreifbar.

    Servus !

    RTFM = Read The Factory Manual, oder so

  • dtoverlay=i2c3 bis i2c6 für weitere I2C Anschlüsse verwendest. Dabei ist jeder zusätzliche I2C-Bus an zwei verschiedenen Pin Paaren, davon einmal default voreingestellt, an der 40 Pol. Pinleiste abgreifbar.

    Danke, das mag sein. Aber wie genau muss ich folgendes verstehen?

    https://github.com/raspberrypi/fi…ys/README#L1482

    Sicherlich kann ich (da Prototyp noch den I2C wechseln) doch derzeit hängt meine RTC genau wie bei dem original CarrierBoard an SCL0/SDA0 (CM4:Pin80/82)

    Kann ich da trotz Display (DSI) aktivieren?


    Code
    dtoverlay=i2c0,pins_44_45=1

    Und weitere Devices hängen an ID_SD(35) & ID_SC(36) was habe ich überlesen, um nicht zu wissen auf welchen GPIO dies vom BCM2711 mappt?

  • Hast du denn dtparam=i2c_vc=on? so wie ich das verstehe ist doch nur das ein Problem.

    Und ID_SD ist laut deinem selbst geposteten Datenblatt Bus 1. Oder was ist die Frage?

  • Hast du denn dtparam=i2c_vc=on

    Ja habe ich jetzt auch mal rein genommen, obwohl mittelfristig eines der beiden DSI-Displays schon laufen soll (taten sie bisher ja auch beide)

    Ich bin selbst nur Linux Anwender und habe kein HAT, oder Compute Module.

    I2C0 und I2C1 würde ich nicht anfassen.

    jo so dämmert mir es auch gerade :( Aber in der Theorie müsste es doch auch irgendwie gehen. (Ich mag es nicht, wenn man aus dem Lernprozess raus geht mit dem Fazit: "ich mach es halt anders, weil ersteres nicht hingehauen hat"


    er findet einfach keines der 6 devices und

    Code
    sudo i2cdetect -y 0

    ist auch noch extrem langsam bei der Ausführung

  • Naja, also die Doku ist da doch ganz klar: wenn du dtparam=i2c_vc=on verwendest, hast du keinen I2C0 fuer den ARM mehr. Das ist also schon mal ein Fehler.

    Und was ich so finde soll das mit den pins-parametern so aussehen:

    Code
    dtoverlay=i2c1,pins_44_45
  • [...] hast du keinen I2C0 fuer den ARM mehr.

    Was heißt das bitte genau. Der ARM ist für mich der ganze Chip.

    A) möchte ich das ganze genau verstehen

    B) möchte ich am Ende wissen, ob ich jene I2Cs, die ich mit dem richtigen blob (erfolreich fürs Display) anspreche noch für weitere Devices verwenden kann?

    Wenn bei B) die Antwort "neine" heißt, wieso ist es dann so bei dem CM4-IO-Board mit dem RTC gehandhabt?

  • Du hast ein SoC. System on a Chip. Da sind 4 ARM Kerne drin. Und eine VideoCore CPU bzw GPU, sowie diverse andere Baugruppen wie UARTS, SPI und I2C. Verbunden durch einen Systembus.

    Und I2C 0 scheint geteilt zwischen ARM und VC. So interpretiere ich die Doku. Und es geht halt immer nur einer von beiden, was auch Sinn macht (muxing eben).

    Und wenn man DSI benutzen will, dann gibt es doch explizit diese Jumper, die im Schaltplan dann gesetzt werden müssen. Und irgendwo auf dem Board sind. So würde ich denken, I2C0 steht dann eben genau NICHT zur Verfügung, wenn es vom VideoCore für DSI genutzt wird. Die Hypothese kann ich aber nicht so eben prüfen, mein CM4 Board ist erstens nicht betriebsbereit und zweitens kostet das mehr Zeit, als ich gerade erübrigen kann.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!