Ports benutzen (GCC)
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 testuser auf die Schnittstellen zugreifen kann, wurde er in die Gruppen "lp" und "dialout" eingetragen.
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 );
("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))
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.
...