Słomkowski's technical musings

Playing with software, hardware and touching the sky with a paraglider.

Replacing VGA and PS/2 with HDMI and USB in a Belkin rackmount KVM console


I modified the 17

I often browse local classified ads for used equipment. Recently I found a good bargain for as little as 15 Euro - a Belkin OmniView 1U Rack-Mount Console F1DC100R (manual). I promptly bought it since I wanted something like that for a server cabinet I maintain. Some time ago I had set up a long-lasting UPS for this cabinet. KVM console would make a nice addition!

The console itself is quite dated, probably from 2006 and has a VGA port for video input and PS/2 ports for keyboard and mouse respectively. Enterprise gear seems to still use these legacy interfaces. However, my servers had been built using consumer-grade hardware and had none of these interfaces, but HDMI and USB instead. I could have used PS/2 to USB and HDMI to VGA converters, which are quite cheap nowadays, but I decided to modify the console to accept HDMI and USB directly.

Attaching HDMI to LCD panel driver

The console has a 17” LCD panel of type LM170E01 controlled by driver board KC88A, shown in the photo below. On the right side, the uppermost connector is for VGA, the lowermost one is 12 V power; the third one is seemingly unused. Looking closely, we see that many of the PCB tracks go into the IC RTD2523B which, according to the datasheet, is a flat panel display controller with DVI support. So the dangling connector must be for DVI port, which is electrically compatible with HDMI!

For reference, the LCD panel has the following markings:

LM170E01 (TL) (AR)

The LCD panel driver:

01C20101A
KC88A
REV: 1.1

The standard HDMI plug has 19 pins, which we can divide into the following groups:

HDMI connector pinout.

The LCD driver’s connector itself has 13 pins since it doesn’t duplicate the ground lines. Using a multimeter and a IC’s datasheet, we can quickly identify eight pins for the TMDS signals. We of course need to connect the ground to the board too - any pair’s shield cable will probably do. To test the setup, we also need to connect the Hot Plug Detect pin to +5 V.

At least on my Thinkpad T480, which has integrated graphics Intel Corporation UHD Graphics 620, we can get away without connecting DDC pins. We just need to short the Hot Plug Detect pin to +5 V.

Without DDC, the graphics card doesn’t detect any displays on any of the HDMI outputs, as shown by Linux’s xrandr -q command output:

Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 310mm x 170mm
   1920x1080     60.02*+  59.93    48.00  
   1680x1050     59.88  
   1400x1050     59.98  
   1600x900      60.00    59.95    59.82  
   1280x1024     60.02  
   1400x900      59.96    59.88  
   1280x960      60.00  
   1368x768      60.00    59.88    59.85  
   1280x800      59.81    59.91  
   1280x720      59.86    60.00    59.74  
   1024x768      60.00  
   1024x576      60.00    59.90    59.82  
   960x540       60.00    59.63    59.82  
   800x600       60.32    56.25  
   864x486       60.00    59.92    59.57  
   640x480       59.94  
   720x405       59.51    60.00    58.99  
   640x360       59.84    59.32    60.00  
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

To force the card to generate the video signal despite the apparent lack of a display:

xrandr --addmode HDMI2 800x600
xrandr --output HDMI2 --mode 800x600 --right-of eDP1

There should be a picture on the screen now. If not, check the order of the differential pairs. xrandr now shows that the output is in the mode 800x600 60.32 despite disconnected state:

Screen 0: minimum 8 x 8, current 2720 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 310mm x 170mm
   1920x1080     60.02*+  59.93    48.00  
   1680x1050     59.88  
   1400x1050     59.98  
   1600x900      60.00    59.95    59.82  
   1280x1024     60.02  
   1400x900      59.96    59.88  
   1280x960      60.00  
   1368x768      60.00    59.88    59.85  
   1280x800      59.81    59.91  
   1280x720      59.86    60.00    59.74  
   1024x768      60.00  
   1024x576      60.00    59.90    59.82  
   960x540       60.00    59.63    59.82  
   800x600       60.32    56.25  
   864x486       60.00    59.92    59.57  
   640x480       59.94  
   720x405       59.51    60.00    58.99  
   640x360       59.84    59.32    60.00  
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected 800x600+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
   800x600       60.32* 
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

We’re left with four more pins to identify: SDA, SCL, +5 V, and Hot Plug Detect. On the driver’s board, we see an EEPROM Atmel 24C08. First, I thought it might be connected directly to the output pins, but that wasn’t the case. The EEPROM is in fact connected to the PLCC-packaged microcontroller with a sticker LF/88.

I decided to use the Bus Pirate, the universal logic analyzer. I followed the guide about Bus Pirate I²C macros to scan the I²C address space. I set the speed to 50 kHz, enabled the pull-up and started scanning with the macro named (1). By each scan, I tried different pin combination. When I found the right one, I got the following result:

I2C>(1)
Searching I2C address space. Found devices at:
0x6A(0x35 W) 0x6B(0x35 R) 0xA0(0x50 W) 0xA1(0x50 R) 

We see that we have two devices on the bus:

The last remaining pins are +5 V and Hot Plug Detect. With a multimeter, I determined that they are connected with each other on a board with a 10 kΩ resistor, so it probably doesn’t matter which one is connected to +5 V and which one to Hot Plug Detect. I tried both configurations and both worked.

Complete pinout for reference:

Pin number Function
1 RXCN
2 RXCP
3 RX0N
4 RX0P
5 RX1N
6 RX1P
7 RX2N
8 RX2P
9 Ground
10 +5 V ?
11 SDA
12 SCL
13 Hot Plug Detect ?

Originally on the backside of the console’s chassis there was a PCB with a VGA and PS/2 sockets, which I removed. I used the existing holes in the enclosure to pass the HDMI and USB cables through.

Keyboard-touchpad combo - replacing PS/2 with USB

The keyboard/touchpad PCB has three connectors. The microcontroller on the board is CY7C63413C. According to the datasheet, it has a USB controller. We don’t have to look far, there’s an unused connector with familiar markings: D+ and D-. I didn’t bother replacing the cable, just repurposed one of the PS/2 cables.

Markings on the board:

DKKT106-SUN-UNIX
VER: 2.0
03/31/2005

Pinout:

Pin: Function:
G ground
D+ USB D+
D- USB D-
V +5 V
S Shield. It should be connected to the USB cable’s shield. It is also connected to the metal chassis.