You are currently offline, waiting for your internet to reconnect

Windows Support of the 16550 UART

This article was previously published under Q119579
This article has been archived. It is offered "as is" and will no longer be updated.
3.00 3.00a 3.10 3.11
kbref kbhw kbdocerr
The universal asynchronous receiver-transmitter (UART) is an integratedcircuit that contains the software programming control of the PC serialport. The 8250 was the original UART to ship with the IBM personalcomputer. This UART and the improved 16450 version are limited to one inputregister that holds only one byte at a time. These UARTs are not usuallysuitable for modem speeds greater than 9600 bits per second (BPS) becauseof possible input data overruns that can occur if a character is left inthe input register when the next byte is received.

The newer 16550 UART allows reliable data transfer at high speeds with its16-byte first in, first out (FIFO) input register. The FIFO feature canbuffer up to 16 bytes at a time, which improves serial communications bypreventing data overruns in applications that are 16550 aware.

This article outlines the use and history of support for the 16550 inMicrosoft Windows.

Windows 3.0 and Earlier Versions

Windows 3.0 and earlier versions do not support the FIFO feature of the16550 UART. Instead, the UART remains in the 8250 UART compatibility mode,allowing one byte to be received at a time. If the incoming character isn'tread fast enough by the computer, the byte is lost. Lost or "dropped"characters are likely to occur at speeds faster than 9600 bits per second(BPS).

There are no UART-specific switches in the SYSTEM.INI file with Windows3.0.

NOTE: Third-party communications drivers (such as Turbocom by PacificCommware) are available to add support for the 16550 FIFO feature inWindows 3.0.

Windows 3.1, 3.11, and Windows for Workgroups 3.1

Windows 3.1 was the first version of Windows to support the FIFO feature ofthe 16550 UART for Windows-based applications. (MS-DOS-based applicationsrun under Windows 3.1, 3.11, or Windows for Workgroups 3.1 do not supportthe FIFO feature.) The receive buffer (RX) is set by the serialcommunications driver (COMM.DRV) to 14 bytes. The transmit buffer (TX) isnot enabled.

[386Enh] Section SYSTEM.INI Setting:
   COM1FIFO=0 | 1   COM2FIFO=0 | 1   COM3FIFO=0 | 1   COM4FIFO=0 | 1				
Default: Enable the FIFO if detected and the setting is not in theSYSTEM.INI file.

Purpose: Specifies whether the FIFO buffer of a communication (COM) port16550 UART should be enabled (1) or disabled (0). If a serial port does nothave a 16550 UART, this setting is ignored. If you place a numerical valueother than "1" or "0" (for example, COMxFIFO=2 ), the setting is ignored,and the FIFO is enabled if detected. Using TRUE, FALSE, or any other non-numerical value sets the switch to "0" and therefore disables the FIFO.Example:

The COMxFIFO= setting is not fully Boolean aware. To properly use theseswitches, use the following syntax
where <x> is the number of the COM port you want to set.

The SYSINI.WRI file from the Microsoft Windows Resource Kit for version 3.1incorrectly identifies TRUE and FALSE as functioning with this switch. Page196 of the Windows Resource Kit manual incorrectly identifies "On" and"Off" as functioning with this switch. Again, using any non-numerical valuesets the switch to "0" and therefore disables the FIFO.

These values are used by Windows for both standard and 386 enhanced modes.

NOTE: Third-party communications drivers (such as Turbocom by PacificCommware and KingComm by OTC Corporation) enable FIFO support for MS-DOS-based applications running under Windows.

Windows for Workgroups 3.11

Windows for Workgroups 3.11 is the first version of Windows to enable 16550FIFO support for MS-DOS-based applications running under Windows. Inaddition to Windows-based applications, your MS-DOS-based applications cannow use FIFO to prevent data overruns without using a third-partycommunications driver. The Windows for Workgroups communications driver(SERIAL.386) can also use the transmit buffer (TX) of the 16550 UART.Previous versions of the communications driver use the receive buffer (RX)only.

[386Enh] section SYSTEM.INI settings:In addition to the COMxFIFO setting outlined above, Windows for Workgroups3.11 introduces two new settings, RXTRIGGER and TXFIFO.

RXFIFO Setting:
   COM1RxTRIGGER=1 | 4 | 8 | 14   COM2RxTRIGGER=1 | 4 | 8 | 14   COM3RxTRIGGER=1 | 4 | 8 | 14   COM4RxTRIGGER=1 | 4 | 8 | 14				
Default: 8

Purpose: Sets the number of bytes to enable for the receive FIFO buffer(RX) on the 16550 UART.


where <x> is the number of the COM port you want to set.

NOTE: In general, you should not change the RXFIFO value. Increasing thevalue of RXFIFO to 14 causes fewer interrupts to be generated, but it alsodecreases the space in the remainder of the buffer to 2 characters. On abusy system, which may have an increase in interrupt latency (the time thatit takes for an interrupt to be serviced by the CPU), this may causecharacters to overrun the buffer. Likewise, decreasing the value for RXFIFOincreases the number of interrupts generated, which could lead to interruptsaturation, negating the usefulness of the FIFO on a multitasking system.TXFIFO Setting:
   COM1TXFIFO=0 | 1   COM2TXFIFO=0 | 1   COM3TXFIFO=0 | 1   COM4TXFIFO=0 | 1				
Default: 0

Purpose: Enables the transmit buffer (TX) on the 16550 UART. If enabled, 16bytes are sent to the UART with each empty transmit interrupt generated.

where <x> equals the number of the COM port you want to set.

NOTE: Enabling the transmit buffer (TX) may result in better systemperformance during a high-speed file upload. It does not affect downloads.
3.00 3.0 3.0a 3.1 3.11 3.10 50Z PS/2 modems

Article ID: 119579 - Last Review: 02/27/2014 10:15:46 - Revision: 2.1

Microsoft Windows 3.0 Standard Edition, Microsoft Windows 3.0a, Microsoft Windows 3.1 Standard Edition, Microsoft Windows 3.11 Standard Edition, Microsoft Windows for Workgroups 3.1, Microsoft Windows for Workgroups 3.11

  • kbnosurvey kbarchive KB119579