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:
- 4 differential pairs for TMDS signals: Clock, Channel 0, Channel 1 and Channel 2, all of which transmit video signal. Each pair consists of a positive and a negative line and also a shield, so three cables per pair.
- +5 V power pin, supplies the display’s electronics like the internal EEPROM, when the display itself is off.
- Hot Plug Detect pin, which should be connected to +5 V inside the monitor to signal its presence to the graphics card.
- CEC pin which is for relaying remote control signals between various devices like TV, DVD players, amplifiers etc. Not used in our case.
-
- DDC: SDA, SCL, DDC/CEC Ground, which all are used for communication with the display, reading its capabilities, and controlling it, like changing brightness/contrast.
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:
0x50
- an EEPROM which holds EDID data. In our case, the functionality of the EEPROM is emulated by aforementioned microcontroller in PLCC44 package.0x35
- unknown feature. It may be used for control of brightness/contrast, for example with ddcutil tool (unconfirmed).
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. |