Cette section n'est absolument pas nécessaire à la compréhension des ports série sous Linux, mais peut néanmoins vous apporter quelques éclaircissements sur Unix et le monde des télécommunications.
Un fichier verrou est simplement un fichier qui indique qu'un
périphérique particulier est en cours d'utilisation. Ils sont
regroupés dans /usr/spool/uucp
ou /var/lock
.
Sous Linux, ils se nomment LCK..
nom où nom est
soit un nom de périphérique, soit un nom de site UUCP. Certains
processus créent de tels fichiers pour s'assurer l'accès
exclusif aux périphériques. Par exemple, si vous appelez avec
votre modem, un fichier verrou va être créé pour avertir les
autres processus que le modem est déjà en cours d'utilisation.
Les verrous contiennent principalement le PID du processus qui
s'est attribué le périphérique. La plupart des programmes
regardent dans un premier temps si un fichier verrou existe,
puis s'il est toujours valide en recherchant dans la table des
processus le programme qui a verrouillé le périphérique. Si le
fichier verrou est toujours valide, alors le nouveau programme
doit s'arrêter. Dans le cas contraire, certains programmes
suppriment le fichier verrou périmé, et utilisent le
périphérique en créant leur propre verrou à l'intérieur du
processus. D'autres programmes s'arrêtent tout simplement et
préviennent l'utilisateur que le périphérique est déjà utilisé.
``baud'' et ``bps'' font certainement partie des termes les plus mal utilisés dans le monde de l'informatique et des télécommunications. Ils sont souvent considérés à tort comme équivalents, alors qu'ils ne le sont pas !
Le baud représente la fréquence de (dé)modulation d'un signal, par exemple celui envoyé ou reçu par un modem (modulateur-démodulateur), c'est-à-dire le nombre de fois où il change par seconde. Par exemple, 1200 bauds implique que le signal change d'état toutes les 833 microsecondes. Les fréquences de (dé)modulation les plus courantes pour un modem sont 50, 75, 110, 300, 600, 1200, et 2400 bauds. La plupart des modems hautes vitesses fonctionnent à 2400 bauds. Les fréquences plus élevées sont plus difficiles à atteindre. Cette limitation est principalement due aux basses performances des lignes téléphoniques dédiées essentiellement au transport de la voix. Plusieurs bits sont alors encodés par baud, ce qui permet d'obtenir des taux de transfert en bits plus élevés qu'en bauds. L'étymologie du mot ``baud'' vient de l'inventeur de l'imprimante télégraphique asynchrone, Émile Baudot.
Le taux de transfert en bps représente le nombre de bits transmis en une seconde. Les vitesses en bps les plus courantes sont 50, 75, 110, 300, 1200, 2400, 9600, ... 115200. Les modems avec compression V.42bis (rapport maximal de 4 à 1) activée sont capables théroriquement d'atteindre des vitesses de 115200 bps. C'est l'usage mauvais le plus courant du terme ``baud''.
Donc, si les modems hautes vitesses fonctionnent à 2400 bauds, comment peuvent-ils émettre à 14400 bps ? En fait, les modems atteignent des taux de transfert en bps supérieurs à la fréquence de modulation, en codant plusieurs bits dans un seul changement d'amplitude ou de phase du signal. Ainsi, quand 2 bits ou plus sont codés par baud, la vitesse en bps dépasse la fréquence en bauds. Quand votre modem se connecte à 14400 bps, il envoie effectivement 6 bits à chaque changement de phase, à 2400 bauds.
Cette confusion entre bauds et bps date du temps où les taux de transfert étaient faibles, et où la vitesse en bps égalait la fréquence de modulation en bauds. Par exemple, un modem à 300 bps fonctionne à une fréquence de 300 bauds. Les deux valeurs ont commencé à diverger avec l'apparition des modems hautes vitesses.
Les UART (Universal Asyncronous Receiver Transmitter - Émetteur Récepteur Universel Asynchrone) sont des circuits électroniques équipant les cartes série des PC. Ils servent à transformer les données en bits, à les envoyer sur la ligne série, puis à reconstruire ces données à l'autre bout. Ils travaillent sur des octets, qui correspondent justement à la taille des caractères ASCII.
Supposons qu'un terminal est connecté à votre PC. Quand vous tapez un caractère, le terminal l'envoie à un émetteur (qui est aussi un UART). L'émetteur envoie alors cet octet sur la ligne série, bit par bit, et à une vitesse spécifique. Du côté PC, l'UART réceptionne ces bits, reconstruit l'octet, et enfin le place dans une zone mémoire.
Il existe essentiellement deux types d'UART : les simples (8250 et 16450), et ceux dotés de FIFO (16550A). Pour comprendre les différences qui existent entre ces circuits, il faut examiner ce qui se passe quand un UART envoie ou reçoit un octet.
L'UART lui-même ne fait rien avec les données ; il s'occupe juste de les émettre ou les réceptionner. Le CPU reçoit une interruption du périphérique série chaque fois qu'un octet part ou arrive. Le CPU déplace alors l'octet reçu du périphérique série vers une zone mémoire, ou alors il redonne à l'UART un nouvel octet à transmettre. Les UART 8250 et 16450 ne possèdent qu'une zone tampon d'un octet, ce qui signifie que le CPU est interrompu à chaque caractère. Ça fonctionne aux vitesses faibles, mais 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 (overrun error).
Les UART 16550 sont alors utiles car ils sont équipés de tampons FIFO de 16 octets, c'est-à-dire qu'ils peuvent émettre ou recevoir jusqu'à 16 octets avant d'interrompre le CPU. Bien que ce seuil d'interruption soit rarement fixé à 16, ça représente quand même un avantage significatif par rapport aux UART dotés d'un tampon d'un seul octet. Le CPU est alors interrompu moins souvent et peut consacrer plus de temps aux autres tâches. Les données ne sont donc plus perdues. (Il existe également un UART 16550, considéré comme un 16450 car il est défectueux.)
En général, les 8250 et 16450 peuvent suffire pour des vitesses n'excédant pas 38400 bps. À des vitesses supérieures, vous pouvez voir apparaître des pertes de caractères. D'autres systèmes d'exploitation pour PC, comme DOS (définition approximative dans ce cas), qui ne sont pas multitâches, peuvent à la rigueur mieux se débrouiller avec des 8250 ou des 16450. C'est pour cela que certaines personnes ne constatent aucune perte de données, jusqu'au moment où elles passent à Linux.
Les cartes multiports intelligentes utilisent des DSP (Digital Signal Processors - processeurs de signaux digitaux) pour assurer des fonctions supplémentaires de contrôle et de mises en mémoire tampon, ce qui permet de décharger encore plus le CPU. Par exemple, les cartes Cyclades Cyclom et Stallion EasyIO possèdent un UART RISC Cirrus Logic CD1400. La plupart des autres cartes sont dotées de CPU 80186, voire de CPU RISC spécifiques, pour assurer les entrées/sorties série.
Gardez à l'esprit que ces UART ne sont pas mauvais, mais qu'ils ne suffisent pas pour des vitesses élevées. Vous ne devriez pas rencontrer de problème en connectant un terminal ou une souris sur de tels UART. Par contre, les 16550A sont définitivement un must pour les modems hautes vitesses.
Les cartes à base d'UART 16550A sont à peine plus chères que celles à base de 16450. De même, il est possible de remplacer les UART 16450 existants sur une carte par des 16550A. Ces circuits sont compatibles broche à broche. Certaines cartes sont même équipées à cet effet d'UART montés sur support. Sinon, il faudra souder. Remarquez que vous vous éviterez sûrement pas mal de soucis en achetant directement une nouvelle carte.