Odi's astoundingly incomplete notes

New entries | Code

PCMCIA vs Express Card

This week I learned about new expansion cards for laptops the hard way. I have a laptop with one of these slots. And I wanted a second network port. The lspci command shows the driver is already installed, so should be fine:
46:06.4 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev bb)
        Subsystem: Hewlett-Packard Company Device 1521
        Kernel driver in use: yenta_cardbus
So I thought I'll just order a PCMCIA/Cardbus card (D-Link DGE-660TD for Cardbus, Realtek Chip inside). Done.

After trying to get it to work for a whole day I had to give up. I turned to a collleague and, to my horror, he discovered that the pins on the interior of the slot didn't quite look like to connector of the card! So that PC Card fits into the slot but doesn't actually connect. No wonder there was no way to get it to work. So what is this slot then?

By looking at the laptop's data sheet I finally found that this is called an Express Card. First time I ever heard of this. I still wonder why it uses the same form factor as PCMCIA. So I ordered another card: Exsys EX-6087 Express Card also with a Realtek Chip inside.

Funny enough it has a bit of a different form factor: it's only half as wide as a PCMCIA card, although the slot is full-width. It comes with a funky adapter, which is nothing more than a piece of plastic clipped to the side of the card, to fill in the remaining space.

I put the card in. This time it seemed to really connect. But nothing in the kernel log. And lspcmcia still doesn't display anything. After googling for an hour or so, I found the missing piece of information: Express Cards have nothing to do with PCMCIA whatsoever! Express Cards are basically directly connected to a PCI Express lane. There is no intermediate bridge! All you need is the PCIe Hotplug driver (HOTPLUG_PCI_PCIE).

If that driver is present (and the driver for the actual hardware on the card) it will show up on the PCIe bus directly:
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd.
 RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)
        Subsystem: Realtek Semiconductor Co., Ltd. RTL8111/8168B
 PCI Express Gigabit Ethernet controller
It still eludes me why the two types of cards use a slot that looks identical. It's a trap.

Express Card on the left, PCMCIA/Cardbus on the right

posted on 2011-10-03 15:04 UTC in Code | 0 comments | permalink