Forum: Mikrocontroller und Digitale Elektronik RPi CM4 : Uart freischaltung funktioniert nicht


von Johnny S. (sgt_johnny)


Lesenswert?

Hallo zusammen,

Ich habe ein Problem mit einem Raspberrypi ComputeModule 4. Laut dem 
Datenblatt, Seite 8
https://datasheets.raspberrypi.org/cm4/cm4-datasheet.pdf

Können den GPIO's diverse alternative funktionen zugeweisen werden. Für 
den Pi4, welcher auch den BCM2711 als Chip hat, wird hier beschrieben 
wir man mehr als eine UART-Schnittstele aktivieren kann
https://www.raspberrypi.org/forums/viewtopic.php?t=244827

Das selbe möchte ich auf dem CM4 machen. Hierzu habe ich zuerst
1
raspi-gpio get 0-15
 ausgeführt, um zu sehen ob die Pins bereits belegt sind, das ergebnis 
ist:
1
pi@raspberrypi:~ $ raspi-gpio get 0-15
2
GPIO 0: level=1 fsel=0 func=INPUT pull=UP
3
GPIO 1: level=1 fsel=0 func=INPUT pull=UP
4
GPIO 2: level=1 fsel=0 func=INPUT pull=UP
5
GPIO 3: level=1 fsel=0 func=INPUT pull=UP
6
GPIO 4: level=1 fsel=0 func=INPUT pull=UP
7
GPIO 5: level=1 fsel=0 func=INPUT pull=UP
8
GPIO 6: level=1 fsel=0 func=INPUT pull=UP
9
GPIO 7: level=1 fsel=0 func=INPUT pull=UP
10
GPIO 8: level=1 fsel=0 func=INPUT pull=UP
11
GPIO 9: level=0 fsel=0 func=INPUT pull=DOWN
12
GPIO 10: level=0 fsel=0 func=INPUT pull=DOWN
13
GPIO 11: level=0 fsel=0 func=INPUT pull=DOWN
14
GPIO 12: level=0 fsel=0 func=INPUT pull=DOWN
15
GPIO 13: level=0 fsel=0 func=INPUT pull=DOWN
16
GPIO 14: level=1 fsel=4 alt=0 func=TXD0 pull=NONE
17
GPIO 15: level=1 fsel=4 alt=0 func=RXD0 pull=UP

Nun habe ich wie beschreiben das config.txt bearbeitet, der USB-Hub muss 
auch aktiviert werden, da sonst die Tastatur etc. am Port nicht geht
1
#Enable Uarts
2
dtoverlay=uart0
3
dtovleray=uart2
4
dtovleray=uart3
5
dtovleray=uart4
6
dtovleray=uart5
7
8
#Enable the USB Hub 
9
dtoverlay=dwc2,dr_mode=host
Danach habe ich den Pi neu gestartet, jedoch sind mit
1
raspi-gpio get 0-15
 keine neuen  Pins mit alternativen Funktionen sichtbar, und uach
1
sudo ls -l /dev
 zeigt weiterhin nur Uart0 mit ttyAMA0 an

Zusätzlich gibt
1
 dtoverlay -l
 an, es seien angeblich keine Overlays geladen, dies ist aber falsch, da 
der USB-Hub, sowie Uart 0 funktionieren. Wird dtoverlay=uart0 oder der 
Hub aus dem config.txt entfernt, so funktionieren diese auch nicht mehr, 
und die dazugehörigen GPIO sind im "Normalen" Zustand.

Zusätzlich habe ich mittlerweilen diverse parameter wie z.b.

diable-bt
enable_uart=1
dtoverlay=uart3,ctsrts

Sowie nur einzelne UARTs versucht, leider alle ohne erfolg. Nur UART0 
scheint zu funktionieren, der rest zeigt keine Funktion. Auch manuelles 
Laden über das Terminal
1
 dtoverlay uart3
 scheinz war zu funktionierne (keine Fehlermeldung) und es wird auch ein 
geladenes Overlay angezeigt, aber trotzdem sind die GPIO's nicht 
angepasst, und auch keine weitere Schnittstelle zu sehen.

Schaut man sich den Beitrag aus dem Raspi-Forum an müsste es bei 
funktionieren ja so aussehen:
1
GPIO 7: level=1 fsel=0 func=INPUT pull=UP
2
GPIO 8: level=1 fsel=3 alt=4 func=TXD4 pull=NONE
3
GPIO 9: level=1 fsel=3 alt=4 func=RXD4 pull=UP
4
GPIO 10: level=0 fsel=0 func=INPUT pull=DOWN
5
GPIO 11: level=0 fsel=0 func=INPUT pull=DOWN
6
GPIO 12: level=1 fsel=3 alt=4 func=TXD5 pull=NONE
7
GPIO 13: level=1 fsel=3 alt=4 func=RXD5 pull=UP
8
GPIO 14: level=0 fsel=4 alt=0 func=TXD0 pull=NONE
9
GPIO 15: level=1 fsel=4 alt=0 func=RXD0 pull=UP
10
pi@raspberrypi:~$ ls /dev/ttyAMA*
11
/dev/ttyAMA0  /dev/ttyAMA1  /dev/ttyAMA2  /dev/ttyAMA3  /dev/ttyAMA4

Offensichtlich scheint etwas schief zu gehen, da ja UART0 und der Hub 
gehen, vermute ich das beim Ausführen derweiteren dtoverlays irgendetwas 
schiefgeht, und dann einfach abgebrochen wird.

Kann mir allenfalls jemand helfen woran es liegt, oder hat Tipps wie man 
weiter debuggen kann? Gibt es irgendwie eine Möglichkeit anzuzeigen wenn 
die dtoverlays geladen werden und ob es Funktioniert hat?

von STK500-Besitzer (Gast)


Lesenswert?

dtoverlay=uart0?

Zumindest beim RPi4 ist der doch hart-verdrehtet und in Abhängigkeit von 
"enable_uart" entweder auf  das Bluetooth-Modul oder das 
Consolen-Terminal geschaltet.
Das Consolene-Terminal muss man doch auch noch ausschlten 
(raspi-config...)

Bei meinem RPI4 funktionierte das alles ohne Probleme.

von Johnny S. (sgt_johnny)


Lesenswert?

STK500-Besitzer schrieb:
> dtoverlay=uart0?

Beim CM4 gehen die pins für UART0 auf den 40pol Header welchen man vom 
normalen Raspi kennt, dort auf pin8 und pin 10, scheint mir nach dem 
ersten Blick aber auch beim PI4 so zu sein?


> Zumindest beim RPi4 ist der doch hart-verdrehtet und in Abhängigkeit von
> "enable_uart" entweder auf  das Bluetooth-Modul oder das
> Consolen-Terminal geschaltet.
> Das Consolene-Terminal muss man doch auch noch ausschlten
> (raspi-config...)
>
> Bei meinem RPI4 funktionierte das alles ohne Probleme.

Wenn ich mir die seite: 
https://www.raspberrypi.org/documentation/configuration/uart.md
ansehe, dasnn setzt "enable_uart" doch nur, ob UART0 mit PL011 oder mit 
miniUart betrieben wird, die Pins müssten doch bei beiden optionen den 
richtigen Zustand haben (alt=4, func=TXDx) usw.

Auf dem Raspberryi Pi 4, scheint es auch bei vielen zu funktionieren, 
aber ev. hat sich ja am CM4 etwas geändert... :/

von STK500-Besitzer (Gast)


Lesenswert?

Johnny S. schrieb:
> Beim CM4 gehen die pins für UART0 auf den 40pol Header welchen man vom
> normalen Raspi kennt, dort auf pin8 und pin 10, scheint mir nach dem
> ersten Blick aber auch beim PI4 so zu sein?

> ansehe, dasnn setzt "enable_uart" doch nur, ob UART0 mit PL011 oder mit
> miniUart betrieben wird, die Pins müssten doch bei beiden optionen den
> richtigen Zustand haben (alt=4, func=TXDx) usw.

> Auf dem Raspberryi Pi 4, scheint es auch bei vielen zu funktionieren,
> aber ev. hat sich ja am CM4 etwas geändert... :/

Jein. Beim RPi4 kann man mit Hilfe des enable_uart-Flags entscheiden, ob 
ttyAMA0 oder ttyS0 auf die Pins 14 und 15 "geroutet" wird (und damit 
auch das Consolen-Terminal).
Die jeweils andere Schnittstelle landet dort auf dem Bluetooth-Modul.

https://www.raspberrypi.org/forums/viewtopic.php?t=244827

Dann gibt es noch die symbolic-links, /dev/serial0 und /dev/serial1. Die 
zeigen immer auf TXD/RXD0 und auf das Bluetooth-Modul.

Lies dir den Foren-Beitrag meines Links mal durch.
Dann verwende bitte mal "enable_uart=1" und guck dir die 
/dev/serial-Konfigruation vorher und nachdem du es gesetzt hast an.

Oder lass einfach mal das "dtoverlay=uart0" weg.

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
Noch kein Account? Hier anmelden.