Ports benutzen (GCC)

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Einleitung

Über die Ansteuerung der Schnittstellen unter Linux findet man im Internet überall etwas anderes, die einen sagen man soll die Schnittstellen über ihre I/O-Adresse (0x378,...) ansteuern.

Hier bleiben zwei Fragen offen:

- Kann ich USB-RS232 Adapter benutzen? -- Nein, USB-RS232 Adapter werden nicht über I/O-Adressen angesteuert.
- Brauche ich root Berechtigung? -- Ja, ohne root Berechtigung kann man nicht auf I/O-Adressen zugreifen.


Die hier vorgestellte Methode ermöglicht folgendes:

- zugriff auf Schnittstellen ohne root Berechtigung
- zugriff auf alle parallelen oder seriellen Schnittstellen, egal ob USB oder nicht

Allgemein

Zugriffsrechte:

Damit man auf die Schnittstellen zugreifen kann braucht man die passende berechtigung. Auf meinem Debian System sehen die Zugriffsrechte so aus:

noway:/# l /dev/ttyUSB0 /dev/ttyS0 /dev/parport0
crw-rw---- 1 root lp 99, 0 Feb 28 16:00 /dev/parport0
crw-rw---- 1 root dialout 4, 64 Jan 22 01:11 /dev/ttyS0
crw-rw---- 1 root dialout 188, 0 Jan 22 01:11 /dev/ttyUSB0

Damit der user auf die Schnittstellen zugreifen kann, muss er in die Gruppen "lp" und "dialout" eingetragen werden.


("Bevor man auf irgendeinen IO-Port vom Userspace zugreifen kann, muss man ioperm(2) aufrufen. Dazu benötigt das Programm allerdings root- oder SUID-Root-Privilegien." <- (nicht korrekt, geht ohne))


Schnittstellen öffnen und schließen

Bevor man auf eine Schnittstelle zugreifen kann muss man diese öffnen:
int port = open( "/dev/ttyS0", O_RDWR );

Die Schnittstellen die man hier öffnen kann sind unter anderem:

- die RS-232's im system: /dev/ttyS0, /dev/ttyS1, ...
- die USB-RS232's: /dev/ttyUSB0, /dev/ttyUSB1, ...
- die Parallelen Schnittstellen: /dev/parport0, /dev/parport1, ...

Wenn das Programm beendet wird sollte man diese auch wieder schliessen:
close( port );

Serielle Schnittstelle

Die Serielle Schnittstelle besitzt 3 Ausgangspins (TX,RTS,CTS) und 4 Eingangspins (RX,DTR,DSR,RI).

Jetzt kann man diese Pins einzeln setzen und abfragen, oder sie als RS232 Schnittstelle benutzen.

Pins einzeln verwenden:

...

Als RS232 verwenden:

...

Parallele Schnittstelle

Die Parallele Schnittstelle besitzt 8 Datenleitungen und 9 Steuerleitungen, sowie 8 Massepins.

Die Datenleitungen können Bidirektional verwendet werden, die Steuerleitungen haben aber eine festgelegte Richtung.

...