Der ursprüngliche UART-Chip, der in IBM-PC-Designs verwendet wurde, war 8250. Es könnte nur ein empfangenes Byte speichern, während der Empfänger das nächste Byte empfangen würde. Dies stellt eine hohe Anforderung an die Reaktionsfähigkeit des Treibers für den seriellen Anschluß des Betriebssystems, der auf den Interrupt "Daten empfangen" reagiert. Es muss schnell genug sein, um dieses Byte zu lesen, bevor der Empfänger es überschreibt. Das nicht schnell genug verursacht einen Überlauffehler und einen unwiederbringlichen Datenverlust. Hohe Interrupt-Raten sind ebenfalls schädlich.
Dieses Design wurde von der 16550 UART chip verbessert. Es hat einen größeren Puffer, den FIFO, der dem OS mehr Zeit gibt, den Puffer zu leeren, bevor ein Überlauf auftreten könnte. Der Treiber für den seriellen Anschluss kann ihn so programmieren, dass ein Interrupt bei einem bestimmten Füllstand erzeugt wird, wodurch auch die Interrupt-Rate reduziert wird.
Aber Chips-Designs haben die gleiche Art von Problem, das Software hat, hatte die ursprüngliche 16550 einen Fehler in der FIFO-Implementierung. Fixed in der 16550A, Version 1.1 in der Software.
Problem war, konnte der Fahrer nicht sagen, ob die Maschine die Buggy-Version des 16550 oder eine gute hatte. Einfache Chips wie diese haben kein GetVersion() Äquivalent. So wurde eine Eigenschaftenseite bereitgestellt, auf der der Benutzer die FIFO-Unterstützung ausschalten und den Fehler umgehen kann.
Die Chancen, dass Sie heute die Buggy-Version haben, sind null. Das Ausschalten des FIFO ist nicht mehr notwendig.
Vielen Dank für so nette und detaillierte Antwort Professor :) – adi