Oliver Saal

RS232-Schnittstelle

Pinbelegung RS232-Schnittstelle SUB-D 9 polig

Aus Sicht eines PCs, in diesem Fall ist ein Mikrocontroller angeschlossen:
PinBeschreibungAbkürzungRichtung
(vom PC aus gesehen)
Bemerkung
1carrier detectCDin
2receive dataRxDinDaten zum PC
3send dataTxDoutDaten vom PC
4data terminal readyDTRoutPC bereit
5groundGND
6data set readyDSRinMikrocontroller bereit
7request to sendRTSoutPC möchte Daten senden
8clear to sendCTSinMikrocontroller bereit zum Daten empfangen
9ring indicateRIinEingehender Anruf (bei Modems)

Datenflusskontrolle

Die Datenflusskontrolle wird dann benötigt, wenn die Möglichkeit besteht, dass ein Gerät (z.B. der PC) die Daten schneller liefert, als dass sie das andere Gerät (Mikrocontroller) verarbeiten kann. In diesem Fall muss der Mikrocontroller dem PC signalisieren, dass er keine weitere Daten empfangen kann. Dies kann entweder über die Hardware- oder Softwaredatenflusskontrolle geschehen:

Hardware-Datenflusskontrolle

Die (Empfangs-)bereitschaft des PCs wird über das Signal DTR angezeigt. Nun gibt es mehrere Möglichkeiten, um die Bereitschaft des Mikrocontrollers anzuzeigen:

Software-Datenflusskontrolle

Wie schon erwähnt findet die Datenflusskontrolle über zwei Steuerzeichen statt: Wenn z.B. der PC ein XOFF sendet, bedeutet dies für den Mikrocontroller, dass er keine Daten mehr an den PC senden darf.

Protokoll zur sicheren (Paket-)Datenübertragung über RS232

Dieses Protokoll zur Datenbetragung zwischen Mikrocontroller und PC wurde entwickelt, um folgenden Ansprchen gerecht zu werden: Folgende Tabelle gibt eine grobe Übersicht über das Datenprotokoll:
OSI-SchichtImplementierung
1 - physical layerRS 232 mit einseitiger Hardwareflusserkennung
2 - data link layerStartbyte, ESC-Sequenzen, Empfangs-Bestätigung
3 - network layerPaket-ID, CRC
4 - transport layernicht implementiert
5 - session layernicht implementiert
6 - presentationnicht implementiert
7 - application layerAnwendungsspezifisch

Physical Layer

Der komplette Datenfluss läuft über eine RS232-Schnittstelle, wobei auf der Mikrocontroller-Platine vorzugsweise ein weiblicher SUB-D-Stecker angebracht wird, so dass sich Platine und PC mit einem normalen Modem-(nicht Nullmodem!)Kabel verbinden lassen. Dabei wird auf PC-Seite das oben beschriebene Verfahren der Hardwareflusskontrolle verwendet. Mit "PC-Seite" ist gemeint, dass im PC die Hardwareflusskontrolle eingeschaltet sein muss, beim Mikrocontroller nicht. Damit wartet der PC immer auf das Freigabesignal des Mikrocontrollers, bis er Daten sendet (der Mikrocontroller ist langsam und könnte ja mit dem Empfangen berfordert sein) - der Mikrocontroller hingegen kann immer Daten senden und muss nicht auf die Freigabe des PCs warten. Diese einseitige Hardwareflusskontrolle ist so durchführbar, da erstens der PC einen relativ großen Empfangsbuffer hat, zweitens der PC so schnell ist, dass er die Daten des Mikrocontrollers ohne Probleme verarbeiten kann und drittens der Mikrocontroller meistens nur Daten sendet, wenn sie der PC angefordert hat. Ein Vorteil dieses Konzeptes ist, das ein Eingang des Mikrocontrollers weniger belegt ist und dass man im Mikrocontrollerprogramm nie überprfen muss, ob der PC bereit ist.

Schaltplan RS232-Treiber
Der Schaltplan zeigt den Anschluss eines Mikrocontrollers (hier der Atmel ATMega128) an den RS232-Treiber MAX232. Dabei sollte man beachten, dass die Sendeleitung des Mikrocontrollers (TXD) der Empfangsleitung der RS232-Schnittstelle (RS232_RXD) des PCs entspricht! Wird ein Nullmodemkabel mit einem männlichen SUB-D-Stecker auf der Mikrocontroller-Platine benutzt, muss der TxD-Pin des Mikrocontrollers mit dem TxD-Pin (Pin 3) des SUB-D-Steckers verbunden werden.

Data Link Layer

Der Start eines Paketes wird mit einem eindeutigen Startbyte (UART_START) gekennzeichnet. Dadurch kann ein während einer Paket-Übertragung eingeschalteter Empfänger das nächste Paket erkennen und erst dann mit dem Empfang starten. Damit ein im Datenstrom zufällig auftauchendes Startbyte nicht als solches falsch verstanden wird, mssen folgende Ersetzungen vorgenommen werden: mit
#define UART_START 	0x7e
#define UART_ESC 	0x70
#define UART_ESC_ESC 	0x71
#define UART_ESC_START 	0x72

Dieser Mechanismus ist aus dem SLIP-Protkoll (siehe EN RFC 1055) entnommen.

Jeder Empfang eines Paketes wird durch den Empfänger mit einem Byte quittiert: 0xFF wenn der Empfang fehlerfrei war oder 0x00 bei Fehlern. Da bei diesem Byte ebenfalls Fehler auftreten können, wurde bewusst 0xFF (Binär 0b11111111) und 0x00 (Binär 0b00000000) gewählt. Der Sender des Datenpaketes kann nun anhand der Anzahl von '1' im binären Muster erkennen, ob ein Fehler (Anzahl < 4) auftrat oder ob der Empfang der Daten bei der Gegenstelle erfolgreich (Anzahl > 4) war. Die Wahrscheinlichkeit, dass in diesem Byte mehr als vier Bitfehler auf einmal auftreten und die Quittierung somit falsch interpretiert wird, ist extrem gering.
Wird nun ein Paket mit 0x00 quittiert, so wird es solange wiederholt, bis es mit 0xFF quittiert wird. Sollte einmal die Antwort ausbleiben (Timeout), so wird es bis zu drei mal wiederholt. Theoretisches Hintergrundwissen gibt's dazu bei der DE Vorlesung Rechnernetze Uni Mannheim.

Network-Layer

Ein Datenpaket ist wie folgt aufgebaut:
Paket-IDDatenlängeDaten....CRC (16-bit)
AbschnittBytesBeschreibung
Paket-ID2Dient zur eindeutigen Identifizierung des Paket-Inhaltes
Datenlänge1Anzahl der nun folgenden Datenbytes
Daten0..255Benutzerspezifische Daten
CRC2CRC-CCITT mit Generatorpolynom 0x11021

Detaillierte Erläuterungen zur CRC-Berechnung gibt es bei DE http://www.iti.fh-flensburg.de/lang/algorithmen/code/crc/crc.htm und im EN Appnote 730 von EN Microchip.

Soll nun ein bestimmtes Paket beim Kommunikationspartner angefordert werden, so wird ein Paket mit der ensprechenden ID und einer Datenlänge von null gesendet.

Application Layer

Nun muss für jede Anwendung definiert werden, in welchem Paket (erkennbar an der ID) welche Daten bertragen werden.

Download

C-Routinen (Inline-Assember) zur CRC-Berechnung für Atmel Mikrocontroller (8-bit)

Haben Sie auf der Seite einen Fehler entdeckt? Ich würde mich freuen, wenn Sie ihn mir über das Formular mitteilen würden! Vielen Dank!
Letzte Änderung von EMail Oliver Saal am 27.02.2007. Beachten Sie auch die rechtlichen Hinweise.

Valid HTML 4.01!     Valid CSS!