RS-232 est une norme standardisant une voie de communication de type série sur trois fils minimum. Disponible sur presque tous les PC depuis 1981 jusqu’au milieu des années 2000, il est communément appelé le « port série ».
Sur les systèmes d’exploitation MS-DOS et Windows, les ports RS-232 sont désignés par les noms COM1, COM2, etc. Cela leur a valu le surnom de « ports COM », encore utilisé de nos jours.
On utilise maintenant des adaptateurs USB/RS-232 car les PC ne disposent plus d’interfaces physiques RS-232. Cela revient à exploiter logiciellement un port série virtuel. Ces périphériques utilisent en réalité une transmission série avec un convertisseur USB <–> RS-232 (les circuits les plus répandus sont pl2303, FTDI FT232, …). Certains adaptateurs ajoutent un circuit MAX232 pour mettre en forme des signaux conformes au standard RS-232. La prise en charge du périphérique est assurée par le système d’exploitation via un pilote de périphérique (driver).
Pour établir une communication effective via un port série physique (RS-232) ou virtuel, il est nécessaire de définir le protocole utilisé : notamment, le débit de la transmission (en bits/s), le codage utilisé, le découpage en trame, etc. La norme RS-232 (couche Physique) laisse ces points libres, mais en pratique on utilise souvent des trames d’un caractère ainsi constituées :
Remarque : De nombreux périphériques séries expriment encore leur vistesse de transmission en bauds. Le baud est l’unité de mesure du nombre de symboles transmissibles par seconde. Dans le cas d’un signal modulé utilisé dans le domaine des télécommunications, le baud est l’unité de mesure de la rapidité de modulation. Le terme “baud” provient du patronyme d’Émile Baudot, l’inventeur du code Baudot utilisé en télégraphie. Il ne faut donc pas confondre le baud avec le bit par seconde (bit/s) car il est souvent possible de transmettre plusieurs bits par symbole. Si on transmet un bit par symbole alors le baud et le bit par seconde (bit/s) sont équivalents.
Exemple : calcul du temps de transmission d’une trame de requête de 8 octets en considérant les paramètres suivants de la liaison série :
Taille de la trame (en bits) pour transmettre un octet : 1 (START) + 8 (DATA) + 1 (PARITÉ) + 1 (STOP) = 11 bits
Taille de la trame (en bits) pour transmettre une requête : 8 octets x 11 bits = 88 bits
Temps de transmission d’un octet : (1 x 11) / 9600 = 0,00114583 s = 1,14583 ms
Temps de transmission d’une requête : (8 x 11) / 9600 = 0,00917 s = 9,167 ms
Lire le cours sur la transmission série.
Un port série virtuel est une solution logicielle qui émule un port série standard.
Cela permet généralement :
De nombreux périphériques USB sont “vus” comme des ports séries virtuels par le système (XBee, Bluetooh, GPS, …).
Pour gérer un port série sous Linux, il y a plusieurs possibilités :
directement à partir de l’API System Calls avec les fonctions suivantes :
open()
pour ouvrir le porttcsetattr()
pour configurer le port [man termios]write()
pour écrire sur le portred()
pour lire sur le portclose()
pour fermer le portExemples d’utilisation de ces fonctions :
Pour développer, on pourra utiliser les outils de développement GNU GCC.
avec un framework comme Qt qui fournit des classes prêtes à l’emploi
Exemples d’utilisation de l’API Qt : Mise en oeuvre d’un port série sous Qt
Pour développer avec Qt, on pourra utiliser l’environnement de développement QtCreator.
Pour gérer un port série sous Windows, il y a plusieurs possibilités :
directement à partir de l’API Windows avec les fonctions suivantes :
CreateFile()
pour ouvrir le port [CreateFile function MSDN]SetCommState()
pour configurer le portWriteFile()
pour écrire sur le port [WriteFile function MSDN]ReadFile()
pour lire sur le port [ReadFile function MSDN]CloseHandle()
pour fermer le portExemples d’utilisation de ces fonctions :
Pour développer, on pourra utiliser l’environnement de développement Dev-C++.
avec un framework comme Qt ou .NET qui fournit des classes prêtes à l’emploi
Exemples d’utilisation de l’API Qt : Mise en oeuvre d’un port série sous Qt
Pour développer avec Qt, on pourra utiliser l’environnement de développement QtCreator.
Exemple détaillé : Serial Comms in Csharp for Beginners.
Pour développer en C#, on pourra utiliser l’environnement de développement SharpDevelop.