Adding PCI Express to the Raspberry Pi 4
Connecting external PCI Express devices to the new Raspberry Pi
When I sat down with Eben Upton ahead of the launch of the Raspberry Pi 4, Model B last month, the first question I asked when he told me that the new Raspberry Pi had PCI Express was, “…are you exposing the pins for that?”
The answer was of course, “No.”
Despite that, I went ahead and made a private bet with myself that someone, somewhere, would hack something together to get access to the PCI Express bus on the Raspberry Pi within the first month after the launch.
It looks like I was right, and that person was Tomasz Mloduchowski.
It’s not the first time that someone has hacked a single-board computer to expose the PCI Express bus, it’s been done to both the Atomic Pi and the Latte Panda Alpha, but it’s probably the most elegant attempt I’ve seen to date. He did this by lifting the VLI VL805 chip, which provides a USB 3.0 Hub, from the board to expose the PCI Express bus.
“The desoldering is pretty simple — except that the chip has a massive ground pad, which is connected straight to the ground plane of the Raspberry Pi — it required some work with the hot air gun to get it off the board, and I managed to ruin some of the surrounding components. The crocked oscillator above the VL805 serves as the clock for VL805 only — I did end up removing it entirely, but it’s not strictly necessary. If possible, I’d have wanted to retain the capacitors to the right of VL805.”
After cleaning the board Mloduchowski used a PCIe riser—popular inside the cryptocurrency community—to connect the exposed PCI Express lane via the, now rather obsolete USB 3.0 connectors on the Raspberry Pi 4 board.
After tracing the pins between the PCIe and USB sides of the exposed pads of the VL805 chip, as well as replacing the necessary capacitors he accidentally removed during hot air work to desolder the chip. Mloduchowski had to hunt for a controller compatible with the Raspbian driver for the onboard VL805.
He finally succeeded in booting the Raspberry Pi with an Adaptec SAS controller attached. Although bear in mind that this isn’t going to mean that you can attach external graphics card to your Raspberry Pi, as this hack only exposes a single lane of PCIe, rather than the ×16 lanes needed by most modern cards.
That said, with the increase in USB performance we see with the addition of USB 3.0 most of the reason for PCI Express support on the Raspberry Pi has, at least for me, gone away.
A full walkthrough of Mloduchowski’s technique can be found on his blog, and his work does make me wonder whether something could be done to expose the PCI Express bus more easily?
We saw this with the Raspberry Pi Zero, and the discovery of that the USB bus could be access from the exposed test pads on the underside of the board. However, the pitch of the VL805 is a lot finer than the test pads on the Raspberry Pi Zero, and using pogo-pin to attach daughter boards to the PCI Express bus on the Raspberry Pi 4 probably isn’t going to be as easy as it was with the Raspberry Pi Zero and the USB bus.