Hi.
Heute werden wir uns dem Thema UART des Raspberry Pi zuwenden. Ich habe hier seit einiger Zeit den Asuro von Arexx herumliegen und hatte, bis ich den Pi hatte, leider keine Verwendung dafür. Ich hatte ganz einfach das Problem, dass ich die Version mit dem RS-232 IR Transceiver habe. Leider hat mein PC, wie die meisten heutzutage, keinen RS-232 Anschluss mehr. Somit hätte ich zwar auf anderen Weg eine Schnittstelle wählen können (USB-UART Bridge), doch irgendwie hatte ich bisher keinen Antrieb. Dies änderte sich als ich den Pi in den Händen hielt. Endlich ergab alles einen Sinn ;) Ich verwende einfach die UART des Pi!
RS232 Modul des Asuro |
Dazu müssen wir uns ersteinmal der Seriellen Schnittstelle des Raspberry Pi zuwenden. Diese können wir nämlich nicht einfach benutzen wie wir es wollen.
Unsere kleine Himbeere ist ziemlich kontaktfreudig konfiguriert und gibt somit den gesammten Bootvorgang auch seriell aus. Weiterhin ist es möglich sich auf dem Pi über die serielle Verbindung anzumelden. Dies stört uns natürlich wenn wir den kleinen mit dem Asuro verbinden wollen. Also heist es erstmal:
UART Freimachen
In den Standardeinstellungen bekommt ihr folgendes Bild wenn ihr euch über die Serielle Verbindung mit dem Pi verbindet.
Pi konfigurieren
Dazu müssen wir uns nur zwei Dateien zuwenden.
/boot/cmdline.txt
/etc/inittab
CMDLine.txt
Wenden wir uns nun der ersten Datei zu. Die Datei /boot/cmdline.txt regelt den Bootvorgang des Pi und gibt ihm beim Booten die Optionen wo er zum Beispiel das Root Verzeichniss findet.
Unbearbeitet schaut die Datei folgendermaßen aus.
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Diese Optionen sagen dem Pi beim Bootvorgang nun das er auf der Console "ttyAMA0" die Bootlogs ausgeben soll. Die Option "root=....." sagt ihm wo er das root Verzeichniss findet. Wir müssen also nur den Bereich mit der Seriellen Schnittstelle bearbeiten. Dazu ändern wir
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1
in
dwc_otg.lpm_enable=0 console=tty1
ACHTUNG!!!
Die Einträge hinter "console=tty1" müssen alle bestehen bleiben!!! Sonst findet euer kleiner beim Hochfahren das root-Verzeichniss nichtmehr und bleibt beim Booten mit ner Kernel Panic hängen!!!
Somit schaut unsere cmdline.txt nun folgendermaßen aus.
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Wie aus nano gewohnt speichern wir die Datei mit "strg+o" und schliesen sie mit "strg+x"
Inittab
Nun ist die Datei "/etc/inittab" an der Reihe. In ihr ist geregelt das die Serielle Schnittstelle zum Einloggen benutzt werden kann. Dazu Öffnen wir wieder die Datei und ändern den Eintrag:
#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
in
#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
Wir kommentieren die Zweite Zeile also einfach aus.
Wenn wir den Pi nun neustarten können wir die serielle Schnittstelle nach unseren Belieben nutzen.
Logik-Level-kovertieren
Um unsere Serielles modul nutzen zu können müssen wir natürlich ersteinmal das 3V3 Logiklevel unseres Pi's in ein für das Modul nutzbares konvertieren. Hierzu gibt es mehrer Ansätze. Zum einen kann man natürlich einen MAX3232 Levelshifter nehmen, oder man schaut sich ersteinmal die Anleitung des Asuro mit beiligender Schematik an.
68 Ohm Widerstand paralell zu R3 |
Nun kann unser IR empfänger arbeiten.
Leider sind die GPIO-Pins des Pi nicht 5V tollerant, sodass wir uns etwas überlegen müssen.
Laut der Anleitung des Asuro sollen wir die Baudrate der Seriellen Schnittstelle auf 2400 Baud stellen. Das ist ziemlich langsam, sodass wir hier einfache Transistoren nutzen können um der Levelkonvertierung vorzumehmen. Die Schaltung hat außerdem den Vorteil das wir keine Logik negation brauchen, wie sie im PC vorgenommen wird. Bauen wir uns also folgende Schaltung.
Pegelwandler Schema |
Ausschnitt |
Gesteckter Pegelwandler |
Test
Schauen wir uns nun an ob alles funktioniert. Wir öffnen "Cutecom" und schauen ob wir die Zeichen die wir senden auch wieder vernünftig empfangen. Dazu einfach wie in der Asuro Anleitung beschrieben ein weißes Blatt mit etwas Abstand über das RS232 Modul halten. Sollte Cutecom bei euch noch nicht installiert sein so könnt ihr dies einfach mit
sudo apt-get install cutecom
erledigen.
Im Cutecom Fenster könnt ihr nun die Einstellungen für die Datenübertragung einstellen. Die Angaben entnehmt ihr einfach der Anleitung des Asuro. Wenn ihr nun im unteren Eingabefenster etwas eingebt so wird dies im Ausgabefenster oben erscheinen.
Betrachtet man das ganze mit einem Logik-Analysator sieht das ganze so aus.
Das wars auch schon. Wir sind nun in der Lage mit unserem Asuro zu kommonizieren und ihn vom Pi aus zu flashen.
MFG
Kai
Sehr gute Beschreibung! :)
AntwortenLöschenWenn ich jetzt noch wüsste, wie man die tty defaultmässig auf 9600/7/E/1 eingestellt bekommt ...
Vielen Dank