uart1: serial@20080000 compatible = "nxp,16c950"; reg = <0x20080000 0x1000>; interrupts = <8>; clock-frequency = <1843200>; current-speed = <115200>; auto-flow-control; ;
modprobe 8250 echo "00:08.0" > /sys/bus/pci/drivers/8250-pci/bind On Windows, commercial solutions from vendors like Moxa or Advantech provide certified 16C95x drivers. Alternatively, a custom KMDF (Kernel Mode Driver Framework) driver can be developed, leveraging the Serial Controller Extension. RTOS (FreeRTOS, Zephyr, VxWorks) In Zephyr RTOS, the 16C95x is supported via the uart_ns16550.c driver with a HAS_UART_NS16550_16C95X Kconfig flag. It enables extended register mapping. Installation and Configuration Guide Step 1: Identify Your Hardware Run lspci -v (Linux) or check device manager (Windows) for a serial controller with PCI vendor ID 0x13F0 (Sundance) or 0x14CB (Exar). Look for “UART with 128-byte FIFO”. Step 2: Verify Driver Status cat /proc/tty/driver/serial Check if the tx / rx FIFO size reports 128. If it shows 16, the generic 8250 driver is active. Step 3: Force the 16C95x Driver # Unbind the generic driver echo -n "0000:01:00.0" > /sys/bus/pci/drivers/serial/unbind # Bind to the 16C95x-capable driver echo -n "0000:01:00.0" > /sys/bus/pci/drivers/8250-pci/bind Step 4: Set Custom Baud Rate Using Setserial The setserial utility can configure the UART type: 16c95x serial port driver
— End of Article —
Introduction In the world of embedded systems and industrial computing, serial communication remains a backbone technology. While UARTs (Universal Asynchronous Receiver-Transmitters) have evolved significantly, the 16C95x series stands out as a high-performance, feature-rich family of serial port controllers. However, to unlock their full potential—FIFO depths of up to 128 bytes, auto hardware flow control, and data rates exceeding 5 Mbps—you need a robust and well-tuned 16c95x serial port driver . It enables extended register mapping