2_ Ports série |
| Par Frédéric Heissler |
L'interface série est une interface asynchrone, ce qui signifie que le signal de cette interface n'est pas synchronisé avec celui d'un bus quelconque. C'est à dire que les bits des données sont envoyés les uns après les autres. Un caractère est composé d'un ensemble de bit. C'est généralement une matrice de 8x8 bits codé par une valeur. Cette valeur est comprise entre 0 et 255 et elle est stokée sur 1 octect c'est à dire 8 bits. Chaque caractère est délimité par un signal de début qui est un bit à 0 et par signal de fin standard qui peut correspondre à un ou deux bits de fin, cela permet d'indiquer que le caractère a été envoyé. L'interface asynchrone est orienté caractère, c'est à dire que l'on doit utiliser les signaux de début et de fin pour indentifier un caractère. L'inconvénient de ce processus c'est qu'il augmente la duré des transferts de presque 25 %. En effet pour chaque ligne de 8 bits il faut au minimum 2 bits.
Le terme "série" viens juste du fait que les bits sont envoyés les uns après les autres sur un seul fil pour l'émission et un autre fil pour la reception, comme pour le téléphone. Il existe de nombreuse carte d'extension permettant d'avoir plusieurs ports séries ou port parallèle.
| Broche | Signal | Description | E/S |
| 1 | CD | Détection de porteuse | Entrée |
| 2 | RD | Réception de données | Entrée |
| 3 | TD | Emission de données | Sortie |
| 4 | DTR | Terminal de données prêt | Sortie |
| 5 | SG | Masse de signal | |
| 6 | DSR | Données prêtes | Entrée |
| 7 | RTS | Requête d'émission | Sortie |
| 8 | CTS | Prêt pour l'émission | Entrée |
| 9 | RI | Indicateur d'appel | Entrée |
| Broche | Signal | Description | E/S |
| 1 | GND | Masse de châssis | |
| 2 | TD | Emission de données | Sortie |
| 3 | RD | Réception de données | Entrée |
| 4 | RTS | Requête d'émission | Sortie |
| 5 | CTS | Prêt pour l'émission | Entrée |
| 6 | DSR | Données prêtes | Entrée |
| 7 | SG | Masse de signal | |
| 8 | CD | Détection de porteuse | Entrée |
| 9 | Réservé | + Retour de boucle de courant de transmission | Sortie |
| 11 | Non Assigné | - Données de boucle de courant de transmission | Sortie |
| 18 | Non Assigné | + Données de boucle de courant de transmission | Entrée |
| 20 | DTR | Terminal de données prêt | Sortie |
| 22 | RI | Indicateur d'appel | Entrée |
| 25 | Non Assigné | + Retour de boucle de courant de transmission | Entrée |
Le port série permet de connecter un grand nombre de périphériques tel qu'un modem, une dispositif de pointage (Souris, TrakBall, GlissPad...), une imprimante, un autre ordinateur, un lecteur de codes barres, un circuit de contrôle d'appareil ... La plupart des périphériques nécessitant une connexion bilatérale pour communiquer avec un PC utilisent un port série standard RS-232c.
| Broches DB9 | Broches DB25 | Signal | Description |
| 1 | 8 | CD | Détection de porteuse |
| 2 | 3 | RD | Réception de données |
| 3 | 2 | TD | Emission de données |
| 4 | 20 | DTR | Terminal de données prêt |
| 5 | 7 | SG | Masse de signal |
| 6 | 6 | DSR | Données prêtes |
| 7 | 4 | RTS | Requête d'émission |
| 8 | 5 | CTS | Prêt pour l'émission |
| 9 | 22 | RI | Indicateur d'appel |
L'UART ( Universal Asynchronous Receiver Transmitter ) est une puce permettant de contrôler tout port série en émission/reception. C'est cette puce qui gère la conversion des données, nativement parallèles de l'ordinateur en format série, puis la conversion des données série en format parallèle.

Il existe principalement 2 familles d'UART.
Les premier PC (des XT) utilisaient la puce UART 8250, qui est toujours utilisée par un grand nombre de cartes adaptateurs série du marché. Les PC/AT (et les autres ordinateurs équipés au minimum d'un 80286) utilisent une puce UART 16450. Ces deux puces ne sont pas toutes deux aussi bien adaptées aux communications à grande vitesse: la puce 16450 est en effet mieux adaptée que la puce 8250, mais la plupart des logiciels ne font aucune distinction entre les deux.
La puce UART 16650A permet d'avoir sur le port série des débit de 230,4 Kbps. Donc si on possède un modem à 33 Ko/s ou 56 Ko il est nécessaire de vérifier que l'on a bien le bon UART. Si ce n'est pas le cas, il est possible de remplacer les UART 16450 existants sur une carte par des 16550A. Ces circuits sont compatibles broche à broche. Si vous n'êtes pas sur du type de puce utilisé par votre ordinateur, vous pouvez utiliser le programme MSD de Microsoft livré sous MS-DOS 6.x et Windows.
Afin d'améliorer les performances de UART, des fabricants, comme National Semiconductor, on sortie des puces appellées Super Enhanced Serial Port (Super ESP). Ce sont des 16750 ou des 87309, 97317. Ce sont des port série qui peuvent atteindre un débit théorique maximun de 921 Kbps.
Ces ports permettent à un modem fonctionnant à 28 800 bps de communiquer avec un ordinateur à un débit pouvant atteindre 921 000 bps. La vitesse supplémentaire offerte pour ces ports est générée grâce à une augmentation de la taille de la zone tampon.
Ces ports reposent généralement sur un émulateur de puce UART 16550 ou UART 16550 AF utilisant deux zones tampons de 1 024 octets, et sur un circuit de contrôle de flux intégré à la carte; ils peuvent accroître sensiblement la vitesse des transferts lorsque l'ordinateur émetteur et l'ordinateur récepteur sont tous deux équipés d'un port de ce type. Si un seul ordinateur est équipé d'un port de ce type, ce port n'apportera aucune amélioration.La plupart des puces UART utilisées sur des ordinateurs compatibles PC sont soit fabriquées par National Semiconductor, soit copiées sur des puces fabriquées par National Semiconductor.
Il est possible de les identifier en cherchant la puce la plus importante du port série et en lisant sa référence. Ces puces sont généralement enfichées sur un support et il est en principe possible de ne remplacer que la puce.
Le Tableau ci dessous présente tous les types de puces UART susceptibles d'équiper un port série.
| Puce | Description |
| 8250 | Il s'agit de la première puce fabriqué par IBM pour gérer le port série du PC. Il s'agit d'un UART passif dans la mesure ou il ne dispose que d'un seul registre de 1 octect, en émission(THR) et réception(RBR), faisant office de buffer tampon. Le taux de transfert de cette puce ne dépasse pas les 9600 bauds. Cette puce a été remplacée par la puce 8250B qui corrige quelques erreurs dans le micro code. En effet une fausse interruption était générée par la puce 8250 au terme d'un accès. De plus, pour des vitesses élevées, le CPU est tellement occupé par l'UART, qu'il n'a plus assez de temps pour les autres tâches. Dans certains cas, le CPU ne peut pas répondre à l'interruption assez vite, et les caractères sont alors écrasés, c'est le fameux problème d'overrun error. |
| 8250 A | Cette nouvelle version de la puce 8250 corrige l'erreur concernant le registre d'activation d'interruption. Le problème c'est qu'entre tant les Bios des PC ont été modifiés pour compenser ce problème. Concéquence le Bios des "nouveaux" PC ne fonctionnaient toujours pas correctement à 9 600 bps car ils attendaient cette erreur pour la corriger. |
| 8250 B | Cette dernière version de la puce 8250 résout les erreurs des deux versions précédentes. En fait, sur cette version, ils ont rétabli l'erreur d'activation d'interruption. Ceci dit elle ne fonctionne toujours pas correctement à 9 600 bps. Débit théorique maximum = 19,2 Kbps |
| 16450 | C'est cette version qui a officiellement été intégré sur les PC AT. Les XT restant avec la 8250. L'erreur d'activation d'interruption a été corrigé. Débit théorique maximum = 38,4 Kbps |
| 16550A | La version 16550 avait une erreur dans le micro code du circuit FIFO qui ne lui permettait pas d'utiliser son buffer, il avait donc les mêmes performence qu'un 16450. Cette erreur a été corrigé dans la version 16550A. La note AN-493 de National Semiconductor explique exactement cette différence. Il s'agit du premier UART actif. Car contrairement aux version précédant, cette puce dispose d'un buffer de 16 octects. Cela permet d'augmenter sont débit maximum qui passe à 115,2 Kbps. Cette puce peut donc recevoir ou émettre 16 octets avant d'interrompre le CPU. Il existe des évolutions de cette puce, il s'agit de la 16552 ou 16554. |
| 16650 | Cette version dispose d'un buffer FIFO de 32 octects (+3 bits de contrôle) en émission(THR) et réception(RBR). Cela permet d'augmenter sont débit maximum qui passe 230,4 Kbps. Elle offre également un accès à de multiples canaux DMA. Il est conseillé d'installer une puce de ce type sur une carte de port série d'AT pour communiquer correctement avec d'autres ordinateurs à 9 600 bps, voire davantage. Lorsque le logiciel utilise le mode de zone tampon FIFO, ce qui est le cas de la plupart des logiciels actuels, cette puce peut accroître considérablement la vitesse des communications et éliminer les pertes de caractères et de données survenant à grande vitesse. |
| 16750 | Produit par Texas Instrument. Cette version dispose d'un buffer FIFO de 64 octects. Cela permet d'augmenter sont débit maximum qui passe 460,8 Kbps. |
On trouvera sur le site de http://www.national.com/ quelques DataSheet sur les UART.
Les 8250,8250A, 16450 comportent 10 registres classés en 3 catégories :
Le 16550 comporte 12 registres :
Le 16650 comporte 17 registres et une pile FIFO de 32 octets en émission(THR) et réception(RBR). Le décodage d'adresse correspondant à COM1 à COM4 est intégré. Un générateur de vitesse de transmission est intégré (MCR + BSR). Il offre la possibilité de mettre en œuvre automatiquement un contrôle de flot logiciel ou matériel. Les registres EFR et Xon-1, Xon-2, Xoff-1 et X-off2 sont ajoutés. Les registres MCR, IER, IIR et FCR sont modifiés.
Divers fabricants proposent aujourd'hui des modèles de puces 16550 A mais National Semiconductor a été le premier. La référence complète de sa puce à 40 broches est soit NS16550 AN soit NS16550 A. Si vous achetez une puce de ce type, vérifiez qu'il s'agit bien d'une puce 16650 A et non d'une puce 16550, plus ancienne.
II existe sur le marché un grand nombre de programmes, tels que Norton Utilities, permettant de tester et d'identifier le type de puce UART utilisé sur un ordinateur donné. C'est également le cas du Gestionnaire de périphériques de Windows 95 et de MSD (Microsoft Diagnostics), livré sous DOS 6.x et sous Windows 3.x, comme cela a été mentionné précédemment.
Les routines d'identification de MSD présentent malheureusement un bogue. Lorsqu'un ordinateur est équipé d'une puce 16450, MSD détecte en effet une puce 8250. MSD identifie en revanche correctement les puces 16550 A, qui sont de toute façon les plus recommandées.
A chaque fois qu'un caractère est reçu par un port série, il doit attirer l'attention de l'ordinateur en activant un canal de requête d'interruption. Les ordinateurs à bus ISA 8 bits comportent 8 canaux de ce type. Les ordinateurs à bus ISA 16 bits en comportent 16. C'est généralement la puce contrôleur d'interruption 8259 qui traite ces requêtes d'attention. Sur une configuration standard, le port série COM1 utilise l'IRQ4 et le port série COM2 utilise l'IRQ3.
Lorsqu'un port série est installé sur un ordinateur, il doit être configuré pour utiliser dés adresses d'E/S spécifiques (appelées "ports") et des interruptions (appelées IRQ); il est à cet égard préférable d'utiliser les standards existants. Pour configurer des ports série, utilisez les adresses et les interruptions présentées dans le Tableau suivant.
| Système | COMx | Port | IRQ |
| Tous | COM1 | 3F8h - 3FF | IRQ4 |
| Tous | COM2 | 2F8h - 2FF | IRQ3 |
| Bus ISA | COM3 | 3E8h - 3EF | IRQ4* |
| Bus ISA | COM4 | 2E8h - 2EF | IRQ3* |
| Bus ISA | COM5 | 3EOh | IRQ4* |
| Bus ISA | COM6 | 2EOh | IRQ3* |
| Bus ISA | COM7 | 338h | IRQ4* |
| Bus ISA | COM8 | 238h | IRQ3* |
| Bus MCA | COM3 | 3220h | IRQ3 |
| Bus MCA | COM4 | 3228h | IRQ3 |
| Bus MCA | COM5 | 4220h | IRQ3 |
| Bus MCA | COM6 | 4228h | IRQ3 |
| Bus MCA | COM7 | 5220h | IRQ3 |
| Bus MCA | COM8 | 5228h | IRQ3 |
*Beaucoup de ports série COM3, COM4, COM5, COM6, COM7 et COM8 peuvent être configurés pour partager les IRQ 3 et 4 avec les ports série COM1 et COM2, mais ce type de configuration est déconseillé. Chaque adresse utilise une plage de 8 octets d'où le 3F8 - 3 FF ce qui correspond à l'adresse décimale 1016 à 1023.
Si vous installez d'autres ports série que les ports standard COM1 et COM2, veillez à ce qu'ils utilisent des interruptions exclusives ne provoquant pas de conflits. Si vous achetez une carte adaptateur de port série en prévoyant de lui faire générer des ports situés au-delà des ports COM1 et COM2 standard, veillez à ce qu'elle soit capable d'utiliser des interruptions autres que les interruptions IRQ3 et IRQ4.
Il est généralement recommandé d'attribuer l'IRQ10 au port COM3 et l'IRQ 11 au port COM4.II peut se produire un problème lorsque le BIOS démarre depuis ces ports. Si le test POST ne détecte pas de port série mais 2F8, le port série sera, à tort, attribué à COM1. Le canal d'IRQ réservé à COM1 est l'IRQ4, mais le port série utilise l'adresse de COM2, ce qui signifie qu'il devrait utiliser l'IRQ3 et non l'IRQ4. Si l'ordinateur est utilisé pour travailler avec COM1 sous BASIC ou sous DOS, le port série ou le modem ne fonctionneront par conséquent pas.
Par ailleurs, IBM n'a jamais prévu de fonctions permettant d'utiliser les ports série COM3 et COM4 dans ses BIOS d'ordinateurs à bus ISA. La commande DOS MODE ne peut par conséquent pas fonctionner avec des ports série supérieurs à COM2 puisque les informations d'E/S dont DOS a besoin sont fournies à DOS par le BIOS, qui détecte pendant le test POST les éléments installés sur l'ordinateur et l'endroit où ils sont installés.
Sur les anciens modèles d'ordinateurs, le test POST ne vérifie que les deux premiers ports installés. Les PS/2 sont dotés d'une version de BIOS améliorée qui vérifie huit ports série, bien que DOS ne soit capable d'en faire fonctionner que quatre.
Pour contourner ce problème, la plupart des logiciels de communication et certains périphériques série (certaines souris, par exemple) font fonctionner des ports série supérieurs à COM2 en s'adressant directement à eux au lieu de passer par l'intermédiaire de DOS.
Ainsi le programme de communication PROCOMM permet-il, par exemple, de faire fonctionner des ports série supplémentaires même si le BIOS et DOS en sont incapables. Bien entendu, si l'ordinateur ou les logiciels ne sont pas capables de faire fonctionner ces ports supplémentaires ou s'il faut rediriger des données en utilisant la commande MODE, surviendront des problèmes.Cartes multiport avec Windows 95, le nombre de ports acceptés a été accru et porté à 128, ce qui correspond au nombre de ports que MS-DOS est désormais capable de faire fonctionner, et cela permet d'utiliser des cartes multiport sur les ordinateurs. Les cartes multiport permettent à l'ordinateur de recevoir des données de plusieurs périphériques ou de partager des données avec plusieurs périphériques tout en n'utilisant qu'un slot.Un Port Finder : certain nombre d'utilitaires permettent d'ajouter au BIOS des informations sur les ports COM et de les rendre accessibles à DOS. Le programme Port Finder, disponible dans la bibliothèque de données "General Hardware" du forum PCHW sur CompuServe, est l'un des plus performants.Port Finder active les ports supplémentaires en communiquant leur adresse au BIOS et en fournissant des utilitaires permettant d'échanger ces adresses entre les différents ports. Cet échange d'adresses permet aux programmes incapables de travailler avec les ports série COM3 et COM4 d'accéder à ces ports. Les logiciels capables de fonctionner directement avec ces ports supplémentaires ne sont généralement pas affectés.Ces ports supplémentaires doivent toutefois utiliser des interruptions distinctes. Si deux ports COM doivent fonctionner simultanément, il est impératif qu'ils utilisent des interruptions n'entraînant pas de conflits. Il est déconseillé de partager des interruptions, même si cette pratique était courante avant l'arrivée de systèmes d'exploitation multitâches tels que Windows 95 et OS/2.
Si vous utilisez plus de 2 ports série et que vous avez besoin de partager des interruptions parce que vos cartes adaptateurs ne sont pas suffisamment flexibles ou sont obsolètes, essayez l'une des combinaisons suivantes pour les faire fonctionner simultanément:
COM1 (IRQ4) et COM2 (IRQ3)
COM1 (IRQ4) et COM4 (IRQ3)
COM2 (IRQ3) et COM3 (IRQ4)
COM3 (IRQ4) et COM4 (IRQ3)
Répartissez vos entrées de ports COM en groupes de deux, en couplant des périphériques série qui ne seront pas utilisés simultanément avec des interruptions différentes et des périphériques qui seront utilisés simultanément avec des interruptions différentes. Il est à souligner, une fois encore, que l'architecture Micro Channel utilisée sur les PS/2 ne pose aucunement ce type de problème: son BIOS recherche les ports supplémentaires et le bus MCA est capable de partager des interruptions sans provoquer de conflits. Les ordinateurs à bus EISA sont également capables de partager des interruptions.
Si votre ordinateur utilise un bus ISA, VLB ou PCI, il est fortement déconseillé de partager des interruptions entre des ports série car ce partage provoque de nombreux problèmes de conflits, surtout dans les environnements multitâches tels que Windows 95 et OS/2. Si vous achetez une carte adaptateur de port COM, veillez à ce qu'elle permette d'utiliser les IRQ 9 à 15 de façon à pouvoir utiliser certaines des interruptions 16 bits libres sur votre ordinateur.Pour configurer des cartes série sur un ordinateur à bus ISA, vous devrez probablement positionner des cavaliers et des commutateurs. Chaque modèle de carte du marché étant différent des autres, vous devrez impérativement consulter le manuel d'utilisation de cette carte précise pour savoir comment elle peut ou doit être configurée.