PCI Express (Peripheral Component Interconnect Express), also known as PCIe, is a high-speed serial bus standard that is better known in IT circles for use with personal computers and servers, but PCIe is used in embedded systems, as well.
As the line between high-performance computing and embedded systems blurs, embedded systems require operating systems as complexity increases. We see high-performance computing in the embedded space for applications that require handling massive amounts of data (for example, image processing). PCIe is a standard that has migrated into the embedded world and is constantly improving as the PCI-SIG standards body adds functionality to keep PCIe continually relevant.
For embedded hardware, PCIe delivers high-speed, low-latency throughput and peer-to-peer communications that allow multiple simultaneous data transfers between endpoints; all in a small form factor. It’s no wonder that embedded hardware is looking to PCIe to meet challenges encountered with the increasing use of GPUs, FPGAs, I/O, and connection points within cloud ecosystems as embedded systems embrace IoT.
The embedded world can take a page from high-performance computing; servers use PCIe to alleviate communication bottlenecks. PCIe can maximize performance in embedded systems to offload processors, too. Embedded devices can often find their needs met in a standard device profile, otherwise custom drivers may be necessary if they are not provided by a device vendor.Maximizing overall system performance requires fast, point-to-point data paths. PCIe can off-load processors such that these large data flows bypass processors. PCIe is a high-speed communications bus that most think of as an interconnect for onboard peripherals. Indeed, PCIe can provide the fastest path for data between the processor and devices or another processor. PCIe is known for lower latency, lowering power consumption, and increased throughput as compared to Ethernet or other interfaces. The more recent versions of PCIe can be used for peer-to-peer data transfer.
|Bandwidth / Throughput||Link Width|
|0.25 GB/s||0.5 GB/s||1 GB/s||2 GB/s||4 GB/s|
|0.5 GB/s||1 GB/s||2 GB/s||4 GB/s||8 GB/s|
|1 GB/s||2 GB/s||4 GB/s||8 GB/s||16 GB/s|
|2 GB/s||4 GB/s||8 GB/s||16 GB/s||32 GB/s|
|4 GB/s||8 GB/s||16 GB/s||32 GB/s||64 GB/s|
Table 1: The generations of PCIe demonstrate increased throughput. GT/s means “Giga transfers per second” raw transfer rate (Source: PCI Express® Basics & Background, Richard Solomon).
PCIe is used to communicate between embedded systems. The PCIe bus supports dual simplex, serial point-to-point connections on up to 32 lanes between any two devices in the PCIe network. A lane consists of two pairs of differential signaling wires (for a total of 4 wires per lane) and the number of lanes is negotiated when a device is connected. The link width is negotiated on device initialization (as to how many lanes will be negotiated) and link width determines the highest data throughput rate possible. PCIe slots and connections are possible for several link widths so that ×1, ×4, ×8, ×12, ×16 and ×32 lanes can be supported. The flexibility in lane use allows for mixed-use systems with variable data rates, as PCIe can dynamically configure links to use additional – or fewer – lanes as needed.
PCIe is traditionally known in server systems and the enterprise space, but the line between the embedded application space and other computing services is blurring. For embedded, PCIe is an option for solving challenges related to moving massive amounts of data around a system. Don’t be surprised if you see an embedded dev kit or a single board computer (SBC) with a PCIe connector as high-performance processor prices come down. Some examples of development boards/kits with PCIe slots include the Intel® Galileo Gen 2, Intel Joule™ Module development kits, and the Texas Instruments TMDSEVM572X development board for the TI AM571x Sitara ARM Applications Processors.
Can a board be integrated into a computer using PCIe, then? Put an Arduino inside your computer with the PCIeDuino, an Arduino board with a mini-PCIe card form factor that is hardware compatible with all computers that have a full-size mini-PCIe connector. The maker, Gergely Imreh, finds PCIe a better option as it’s “screwed in” versus plugged in as is USB. Why have an Arduino inside a computer on a mini-PCIe slot? Digital I/O and analog inputs are easier to interface, you could use it as a co-processing module, a controller for keyboard/mouse, or anything you can think of that marries the Arduino with the computer through the interface. Imreh states in his blog on his prototyping efforts, “The PCIeDuino is still very much a prototype project, more suitable probably for advanced users who are not put off when not every path is well worn out.”[ii] Nevertheless, PCIe is coming into embedded via the open source Arduino, which is pretty cool.