(Une grande partie de cette section devrait finalement se trouver dans le Serial-HOWTO.) Les terminaux texte sur les systèmes de type Unix (et sur les PC) sont connectés en général sur un port série asynchrone 232 d'un ordinateur. C'est en général un port RS-232-C, EIA-232-D ou EIA-232-E. Ces trois ports sont à peu près identiques. Le préfixe originel RS est devenu EIA (Electronics Industries Association) et plus tard EIA/TIA après que EIA se soit alliée avec TIA (Telecommunications Industries Association). La spécification EIA-232 décrit aussi les communications synchrones mais le matériel qui supporte les communications synchrones manque quasiment toujours sur les PC. La désignation RS est obsolète mais est toujours utilisée. On utilisera EIA dans cet article.
Le port série représente plus qu'un simple connecteur physique au dos d'un ordinateur ou d'un terminal. Il comprend l'électronique associée qui doit produire des signaux conformes à la spécification EIA-232. Le connecteur standard possède 25 broches, dont la plupart sont inutilisées. Un connecteur différent ne possède que neuf broches. Une broche est utilisée pour envoyer des octets de données et une autre pour en recevoir. Une autre broche est la masse commune du signal. Les autres broches "utiles" sont principalement utilisées à des fins de signalisation avec une tension négative régulière voulant dire "éteint" et une tension positive régulière voulant dire "allumé".
La puce UART (émetteur-récepteur asynchrone universel) fait la plus grande partie du travail. Aujourd'hui, les possibilités de cette puce sont en général incluses dans une autre puce.
Sur le port série EIA-232, les tensions sont bi-polaires (positives ou négatives par rapport à la masse) et devraient être de l'ordre de 12 volts en amplitude (certaines font 5 ou 10 volts). Sur les broches d'émission et de réception +12 volts représente le bit 0 (parfois appelé "espace") et -12 volts est le bit 1 (parfois appelé "marque"). On appelle cela la logique inversée puisque normalement le bit 0 est à la fois faux et négatif alors que le 1 est normalement vrai et positif. Bien que les broches de transmission et réception soient en logique inversée, d'autres broches (les lignes de contrôle du modem) sont en logique normale avec une tension positive étant vraie et une tension négative étant fausse. La tension zéro n'a aucune signification (sauf qu'elle veut dire en général que l'unité est éteinte).
Une étendue de tensions est permise. Les spécifications disent que l'amplitude d'un signal transmis devrait être entre 5 et 15 volts mais ne doit jamais dépasser 25 volts. Toute tension reçue en dessous de 3 volts est indéfinie (mais certains terminaux considèreront qu'une tension plus basse est valide). On voit parfois des affirmations erronnées selon lesquelles la tension est communément 5 volts (ou même 3 volts) mais c'est en général 11-12 volts. Si vous utilisez un port EIA-422 sur un ordinateur Macintosh comme un EIA-232 (cela demande un câble spécial) ou un EIA-423 alors la tension sera vraiment 5 volts. La discussion ici suppose que c'est 12 volts. Il y a beaucoup de confusion à propos des tensions sur Internet.
Notez que la logique d'ordinateur normale n'est que de quelques volts (à une époque, la norme était 5 volts), et que si vous essayez d'utiliser un équipement de test fait pour tester une logique d'ordinateur en 3-5 volts (TTL) sur les 12 volts d'un port série, cela peut endommager l'équipement de test.
La broche de transmission (TxD) est maintenue à -12 V (marque) comme inactive quand rien n'est envoyé. Pour commencer un octet elle passe à +12 V (espace) pour le bit de départ et reste à +12 V pendant la durée (période) du bit de départ. Après vient le bit de bas niveau de l'octet de données. Si c'est un bit 0 rien ne change et la ligne reste à +12 V pendant une autre période de bit. Après vient le bit suivant, etc. Finalement, un bit de parité peut être envoyé et ensuite un bit de stop de -12 V (marque). La ligne reste à -12 V (inactive) jusqu'au prochain bit de départ. Notez qu'il n'y a pas de retour à 0 volts et il n'y a donc pas de moyen simple (sauf avec un signal de synchronisation) pour dire où finit un bit et où commence le bit suivant dans le cas où deux bits consécutifs ont la même polarité (tous les deux zéro ou tous les deux un).
Un deuxième bit de stop serait aussi à -12 V, identique au premier bit de stop. Puisqu'il n'y a pas de signal pour marquer la frontière entre ces deux bits, le seul effet du deuxième bit de stop est que la ligne doit rester inactive à -12 V deux fois plus longtemps. Le récepteur n'a aucun moyen de faire la différence entre un deuxième bit de stop et un temps d'inactivité plus long entre les octets. Ainsi les communications fonctionnent bien si une extrémité utilise un bit de stop et l'autre extrémité utilise deux bits de stop, mais n'utiliser qu'un bit de stop est visiblement plus rapide. Dans de rares cas, un bit de stop et demi est utilisé. Ceci veut dire que la ligne est gardée à -12 V pendant une période de temps et demie (comme un bit de stop 50 % plus long que la normale).
Les caractères sont normalement transmis sur 7 ou 8 bits (de données). Une parité supplémentaire peut (ou peut ne pas) y être ajoutée, ce qui donne un octet de longueur 7, 8 ou 9 bits. Certains émulateurs de terminaux et terminaux anciens n'autorisent pas 9 bits. Certains interdisent 9 bits si on utilise deux bits de stop (puisque cela ferait beaucoup trop de bits : 12 bits au total).
On peut mettre une parité impaire, paire, ou pas de parité (les parités marque et espace peuvent être des options sur certains terminaux). Avec une parité impaire, le bit de parité est sélectionné de telle sorte que le nombre de bit 1 dans un octet, en comprenant le bit de parité, soit impair. Si un tel octet se détériore par l'inversion d'un bit, le résultat est un octet illégal de parité paire. Cette erreur sera détectée et si c'est un octet arrivant au terminal, un symbole caractère d'erreur apparaîtra à l'écran. La parité paire fonctionne de manière similaire avec tous les octets légaux (comprenant le bit de parité) ayant un nombre de bit 1 pair. Pendant la configuration, le nombre de bits par caractère signifie en général le nombre de bits de données par octet (7 pour de l'ASCII pur et 8 pour les divers codes de caractères ISO).
Une "marque" est un bit 1 (ou un 1 logique) et un "espace" est un bit 0 (ou un 0 logique). Pour la parité marque, le bit de parité est toujours un bit 1. Pour la parité espace c'est toujours un bit 0. La parité marque ou espace ne fait que gâcher de la bande passante et devrait être évitée autant que possible. "Pas de parité" veut dire qu'aucun bit de parité n'est ajouté. Pour les terminaux qui n'autorisent pas les octets de 9 bits, il faut sélectionner "pas de parité" pour utiliser des codes de caractères sur 8 bits puisqu'il n'y a pas de place pour le bit de parité.
Dans la transmission en série des octets par les ports EIA-232, le bit de bas niveau est toujours envoyé en premier. Les ports série sur les PC utilisent des communications asynchrones quand il y a un bit de départ et un bit de stop pour marquer le début et la fin d'un octet. On appelle cela l'encadrement et l'octet encadré s'appelle parfois un cadre. Au final, 9, 10 ou 11 bits sont envoyés par octet, 10 étant le nombre le plus courant. 8-N-1 veut dire 8 bits de données, pas de parité, 1 bit de stop. Ceci fait en tout 10 bits si on compte le bit de départ. Un bit de stop est utilisé quasiment partout. À 110 bits/seconde (et parfois à 300 bits/seconde) deux bits de stop étaient autrefois utilisés mais maintenant le deuxième bit de stop n'est utilisé que dans des situations très inhabituelles (ou par erreur puisqu'il semble encore fonctionner correctement de cette manière).
Le port série EIA-232 traditionnel est à basse vitesse de manière inhérente, et est sérieusement limité en taille (distance). Les publicités disent souvent "grande vitesse" mais cela ne peut fonctionner à grande vitesse que sur de très courtes distances comme pour un modem situé juste à côté de l'ordinateur. Tous les fils utilisent un retour de masse commun et donc la technologie en paire torsadée (nécessaire à de grandes vitesses) ne peut être utilisée sans matériel supplémentaire. Cependant certains ordinateurs possèdent des interfaces plus modernes. Voyez successeurs de EIA-232.
Il est parfois décevant que la norme RS-232 de 1969 n'ait pas utilisé la technologie en paire torsadée qui aurait pu fonctionner à peu près 100 fois plus rapidement. Les paires torsadées sont utilisées dans les câbles téléphoniques depuis la fin du 19ème siècle. En 1888 (il y a plus de 100 ans) la "conférence sur le câble" a rapporté son attachement à la paire torsadée (pour les systèmes téléphoniques) et a avancé ses avantages. Mais plus de 80 ans après cette approbation par la "conférence du câble", RS-232 n'a pas réussi à l'utiliser. Puisque RS-232 était au départ faite pour connecter un terminal à un modem basse vitesse situé tout près, le besoin de grande vitesse et d'une longueur de transmission plus élevée n'a apparemment pas été perçu.
Un certain nombre de normes EIA ont été établies pour des vitesses plus élevées et des distances plus grandes en utilisant la technologie en paire torsadée (équilibrée). Une transmission équilibrée peut parfois être une centaire de fois plus rapide que EIA-232 non équilibrée. Pour une vitesse donnée, la distance (longueur maximale du câble) peut être beaucoup de fois plus grande avec de la paire torsadée. Mais les PC continuent d'être fabriqués avec l'EIA-232 "obsolète" puisque que cela fonctionne correctement avec les modems reliés aux lignes téléphoniques lentes, et cela fonctionne correctement avec les souris.
Une exception reste l'ordinateur Macintosh d'Apple avec son GeoPort EIA-232/EIA-422 qui fournit de la paire torsadée (équilibrée) pour la transmission et la réception. Il utilise un petit connecteur rond "mini-DIN". Il fournit aussi du EIA-232 traditionnel mais seulement à 5 volts (ce qui reste du EIA-232 légal). Cependant, à cause du fait que les Mac coûtent plus cher que les PC, on les utilise rarement comme ordinateur hôte pour des terminaux. Certains terminaux récents utilisent l'EIA-423 mais cela reste comme de l'EIA-232 non équilibré et on peut les relier à un port EIA-232. Cet EIA-423 ne fait que 5 volts, mais les spécifications donnent des vitesses plus élevées que pour EIA-232 (qui ne sera d'aucune aide sur une grande distance où c'est le non-équilibrage qu cause les interférences).
L'EIA-530-A (équilibré mais peut aussi être non équilibré) à 2 Mbits/s (équilibré) était fait pour remplacer EIA-232 mais on en a peu installé. Elle utilise le même connecteur à 25 broches que EIA-232. L'interface série à grande vitesse (HSSI = EIA-612/613, High Speed Serial Interface) utilise un connecteur à 50 broches et monte à peu près à 50 Mbits/s mais la distance est limitée à seulement quelques mètres. Le Bus Série Universel (USB, Universal Serial Bus) est construit dans des puces PCI. Il fait 12 Mbits/s sur une paire torsadée avec un connecteur à 4 broches (2 câbles fournissent le courant) mais il est aussi limité à des distances courtes d'au plus 5 mètres (cela dépend de la configuration).
Pour un terminal texte, les vitesses de EIA-232 sont suffisamment rapides mais la longueur de câble utilisable est souvent trop courte. La technologie équilibrée pourrait résoudre ce problème. La méthode courante pour obtenir une communication équilibrée avec un terminal texte est d'installer deux pilotes de ligne dans la liaison série pour convertir du non équilibré en équilibré (et vice-versa). Ce sont des appareils spécialisés et ils sont chers si on les achète neufs.
Dans EIA-232 il n'y a que deux états sur le fil de transmission (ou de réception) : marque (-12 V) ou espace (+12 V). Il n'y a pas d'état à 0 V. Ainsi une séquence de bits à 1 est tranmise avec uniquement du -12 V stable sans marqueur d'aucune sorte entre les bits. Pour que le récepteur détecte les bits individuels il doit toujours disposer d'un signal d'horloge qui est synchronisé avec l'horloge de l'émetteur. De telles horloges génèrent un "top" synchronisé avec chaque bit transmis (ou reçu).
En transmission asynchrone, la synchronisation est faite en encadrant chaque octet d'un bit de départ et d'un bit de stop (fait par le matériel). Le récepteur attend sur la ligne un bit de départ et quand il en détecte un il lance son top d'horloge. Il utilise ce top d'horloge pour mesurer le temps de lecture des 7, 8 ou 9 prochains bits. (C'est en fait un petit peu plus compliqué que cela puisqu'on prend en général plusieurs mesures pour un bit, ce qui demande des tops supplémentaires.) Ensuite le bit de stop est lu, l'horloge s'arrête et le récepteur attend le bit de départ suivant. Ainsi l'asynchrone est en fait synchronisé pendant la réception d'un seul octet mais il n'y a pas de synchronisation entre un octet et l'octet suivant.
L'asynchrone signifie "non synchrone". En pratique, un signal asynchrone représente ce que le port série asynchrone envoie et reçoit qui est un flux d'octets, chacun d'entre eux étant délimité par un bit de départ et un bit de stop. Le synchrone est à peu près tout le reste. Mais ceci n'explique pas les concepts de base.
En théorie, synchrone veut dire que les octets sont envoyés à vitesse constante l'un après l'autre (en accord sur un top d'horloge). Les octets asynchrones peuvent être envoyés n'importe quand avec des intervalles de temps variés entre les octets (comme quelqu'un qui tape des caractères sur un clavier).
Il y a des situations limites qu'on doit classer comme synchrones ou asynchrones. Le port série asynchrone envoie souvent des octets dans un flux constant qui en ferait un cas synchrone mais comme il y aura encore les bits de départ et de stop (ce qui permet de les envoyer de manière indéterminée) on l'appelle asynchrone. Un autre cas est quand les octets de données (sans auncun bit de départ ou de stop) forment des paquets avec un espacement erratique entre un paquet et le suivant. On l'appelle synchrone puisque les octets à l'intérieur de chaque paquet doit être transmis de manière synchrone.
Ne vous-êtes vous jamais demandé ce qu'on faisait de toutes les broches inutilisées sur un connecteur 25 broches pour le port série ? La plupart d'entre eux sont utilisés dans une communication synchrone qu'on implémente rarement sur les PC. Il y a des broches pour les signaux de temporisation de synchronisation ainsi que pour un canal inverse synchronisé. La spécification EIA-232 est donnée à la fois pour les communications synchrones et asynchrones mais les PC utilisent une puce UART (Émetteur Récepteur Asynchrone Universel) comme un 16450, un 16550A ou un 16550 et ne peuvent faire de la synchronisation. Pour faire du synchrone on a besoin d'une puce USART ou équivalente où le "S" veut dire synchrone. Puisque le synchrone est un marché de niche, un port série synchrone est sûrement assez cher.
À côté de la partie synchrone de EIA-232, il y a plusieurs autres normes EIA synchrones. Pour EIA-232, trois broches sur le connecteur sont réservées pour les signaux d'horloge (de temporisation). Parfois c'est le rôl du modem de générer certains signaux de temporisation rendant l'utilisation de communications synchrones impossibles sans un modem synchrone (ou sans appareil qu'on appelle "éliminateur de modem synchrone" qui fournit les signaux de temporisation).
Bien que peu de ports série soient synchrones, la communication synchrone prend souvent place sur les lignes téléphoniques en utilisant des modems qui utilisent la correction d'erreurs V.42. Ceci enlève les bits de départ et de stop et place les octets de données dans des paquets ce qui donne une opération synchrone sur la ligne téléphonique.
Le mode par blocs est rarement utilisé sous Linux. En mode par blocs, quand quelqu'un tape sur un terminal, le résultat est sauvé dans la mémoire du terminal et n'est pas envoyé immédiatement à l'ordinateur hôte. De tels terminaux possèdent souvent des possibilités d'édition intégrées. Quand l'utilisateur appuie sur certaines touches (comme la touche envoi), ce qui a été sauvegardé dans la mémoire du terminal est envoyé à l'ordinateur hôte. Cependant les éditeurs vi et emacs sous Linux réagissent instantanément à l'appui de certaines touches, mais, dans la situation ci-dessus, si on appuie sur de telles touches, rien ne se passera puisque rien n'est envoyé quand on appuie sur une touche. Ainsi l'utilisation d'un terminal en mode par blocs ne permettra pas l'utilisation de tels programmes interactifs. La vieille interface vers les minis IBM utilise le mode par blocs (voyez terminaux IBM) et donc beaucoup de terminaux IBM ne fonctionnent qu'en mode par blocs et sont aussi synchrones (voyez la section synchronisation et synchrone).
Le mode par blocs peut lui-même avoir divers sous-modes comme "page" (une page à la fois) et "ligne" (une ligne à la fois). Certains terminaux possèdent à la fois les modes de transmissions par blocs et les modes traditionnels par caractères, et on peut passer d'un mode à l'autre. Les terminaux asynchrones possédant des modes par blocs sont parmi les HP2622A, VT130, VT131, VT330, VT340 et Visual500. Beaucoup de modèles de terminaux plus récents peuvent émuler le mode par blocs. Les modes par blocs peuvent comprendre une possibilité de formulaires où l'ordinateur hôte envoie un formulaire au terminal. L'utilisateur le remplit alors et envoie la touche envoi qui ne renvoie que les données du formulaire à l'ordinateur hôte. Le formulaire lui-même (pas les données) est affiché à l'écran dans des champs protégés qui ne sont pas transmis à l'hôte.
Les modes par blocs enlèvent une bonne partie de la charge sur l'ordinateur hôte, surtout si le matériel de l'ordinateur hôte est fait pour les modes par blocs (comme c'est/c'était le cas sur les minis IBM). En mode caractère, chaque caractère tapé est envoyé immédiatement sur le port série et en général génère une interruption sur l'ordinateur hôte. L'hôte qui reçoit l'octet doit arrêter tout ce qu'il fait et va chercher ce caractère depuis le matériel du port. Même avec des UART qui possèdent des tampons matériels FIFO, le délai matériel ne représente normalement que le temps de transmission de 3 octets, donc une interruption est générée à chaque caractère tapé.
En vrai mode par blocs, un bloc de caractères long est reçu en n'utilisant qu'une interruption. Si on utilise le mode par blocs avec des ports série FIFO asynchrones, une interruption n'est nécessaire que tous les 14 octets puisqu'ils ont des tampons matériels de 16 octets. Ainsi la plus grande partie de la charge et du coût de la gestion des interruptions est éliminée et l'ordinateur a plus de temps à consacrer à d'autres tâches quand on utilise le mode par blocs.
On fait des économies significatives en mode par blocs si le terminal est relié à son hôte par l'intermédiaire d'un réseau. Sans le mode par blocs, chaque caractère (octet) tapé est envoyé dans son propre paquet avec tous les octets d'enveloppe (40 dans un paquet TCP/IP comme ceux utilisés sur l'Internet). En mode par blocs, un grand nombre de caractères est envoyé dans un seul paquet.
(Note : le premier couvre bien plus que EIA-232 uniquement.)
Voyez logiciels série pour les logiciels Linux sur les ports série avec getty et les moniteurs de ports.