Changing the mode on a OXPCIe952 card with no jumpers

The Oxford Semiconductor OXPCIe952 has multiple modes which are selected by providing the correct voltages to the mode select pins. Some PCIe cards which use this chip allow the mode to be configured using jumpers which can connect each mode select pin to either 0V or 3.3V, however, other cards have the mode fixed at the factory using SMD resistors. Please refer to the OXPCIe952 datasheet which describes the possible modes and the device IDs for each function of a mode.

OXPCIe952 dual serial

I obtained a PCIe dual serial card fitted with a OXPCIe952 and marked PI40952-3X2B on the back. I intended to use this with FreeDOS but, unfortunately, the mode of my card was set to 5 which configured the serial ports as "Native" UARTs instead of "Legacy" UARTs with device IDs of 0xC158 & 0xC159. "Native" UARTs are mapped into memory space whereas "Legacy" UARTs are mapped into I/O space. Modern CPUs and operating systems can access memory space many times faster than I/O space so there is a performance advantage for "Native" mode. DOS programs expect serial ports to be accessible using I/O instructions and so the mode of the OXPCIe952 needed to be changed to 4 with device IDs of 0xC140 & 0xC141.

A quick search for similar cards on the internet found someone with a parallel card using the same pcb as mine and sold as a StarTech PEX1P. They had posted a picture of their card and by comparing components I could determine which resistors selected the mode and what needed to be changed.

Mode bits Logic "0" Logic "1"   Enable bits Logic "0" Logic "1"
M2 R3 R13   UART_EN R22 R12
M1 R2 R15   GPIO_EN R5 R9
M0 R1 R14        

The mode bits and enable bits are set by either fitting a 10K pull-down resistor to 0V or a 10K pull-up resistor to 3.3V, M2 is the MSB and M0 the LSB of the mode value. The dual serial card as supplied had resistors R13, R2 & R14 fitted so that the mode, in binary was 101 which is 5 in decimal. It also had R5 & R12 fitted which enable the UARTs and disable the GPIO function. To set the mode to 4, 100 in binary, would need resistors R13, R2 & R1 fitted so I needed to desolder R14 and solder it in position R1, the UART and GPIO enable resistors could be left as they were.

This is the card as supplied in mode 5 and after modification in mode 4

OXPCIe952 mode configure

My soldering for R1 could have been better but at the time I was more interested in testing the card.

Driver support

The Windows drivers used when configured as "Legacy" UARTs are different to those used when configured as "Native" UARTs. The official Oxford Semiconductor/PLX drivers for Windows has a folder named "Serial Port Driver" containing the "Legacy" driver and multiple folders for Windows versions containing the "Native" driver which I have made available here.

The Linux drivers for both "Legacy" and "Native" UARTs are built into the Linux kernel.

Important note

My card does not have the optional EEPROM U2 fitted. If it were fitted it is very likely that the PCI vendor ID would be changed from that of 0x1415 for Oxford Semiconductor to the card manufacturer's ID and their own drivers would be required. In this case, I do not advise making the modification because the card manufacturer's driver may not support "Legacy" UARTs with Windows or Linux.

home contact