What the Advanced Peripheral Bus is, why it exists in every SoC, how it fits into the AMBA bus hierarchy, the evolution from APB2 through APB5, and the Requester–Completer model that defines every transfer.
The Advanced Peripheral Bus (APB) is the simplest member of the ARM AMBA (Advanced Microcontroller Bus Architecture) family. It is a low-bandwidth, low-cost interface designed specifically for accessing the programmable control registers of peripheral devices — things like UARTs, timers, GPIO controllers, interrupt controllers, and SPI/I2C controllers.
APB is not designed for high-throughput data movement. It has no support for bursts, no pipelining, no out-of-order transactions, and no concurrent read/write capability. Every transfer takes at minimum two clock cycles. This simplicity is intentional — it makes peripherals cheap to implement, easy to verify, and power-efficient.
Every APB transfer is initiated by an APB bridge (the Requester) and answered by a peripheral (the Completer). The bridge sits between the high-performance system bus (AXI or AHB) and the collection of slow peripherals, translating fast complex transactions into simple APB register accesses.
In any SoC, the system bus (AXI or AHB) is wide, fast, and expensive to implement. Connecting every small peripheral directly to AXI would mean each peripheral needs a full AXI subordinate interface — complex handshaking, burst support, multiple outstanding transactions, and wide data buses. This is overkill for a UART that just needs a few 32-bit registers written once during initialisation.
APB solves this through the principle of appropriate interface complexity:
AMBA defines a family of bus protocols for different bandwidth and complexity requirements. APB sits at the bottom of this hierarchy — the lowest bandwidth, lowest complexity interface — serving as the final hop from the high-performance interconnect to individual peripheral registers.
| Protocol | Bandwidth | Features | Typical use |
|---|---|---|---|
| AXI5 | Very high | Pipelined, bursts, out-of-order, multiple outstanding, separate read/write channels | CPU–DDR, GPU–memory, DMA engines |
| AHB5 | High | Burst capable, pipelined address, single outstanding per manager | CPU instruction fetch, on-chip SRAM, DMA intermediate |
| APB5 | Low | Simple two-phase, no pipeline, no burst, single cycle address/data | Peripheral control registers — UART, GPIO, timers, SPI, IRQ |
The APB bridge (also called the Requester) is the central component of every APB system. It translates transactions from the system bus (AXI or AHB) into APB transfers targeting the correct peripheral. Every APB transfer must be initiated by the bridge — peripherals never initiate transactions.
The bridge performs several functions:
The APB5 specification standardised the terminology used to describe the two sides of every APB transfer. Earlier versions of the specification used the terms “master” and “slave” — these are deprecated in APB4/APB5 and replaced with:
The APB specification has evolved through five issues, each adding features for more complex SoC requirements. All versions are backward-compatible — an APB5 Requester can drive an APB2 Completer, though the new signals have no effect on the older peripheral.
| Version | Spec Issue | New Signals | Key Addition |
|---|---|---|---|
| APB2 | Issue A/B (2003–2004) | PCLK, PRESETn, PADDR, PSEL, PENABLE, PWRITE, PWDATA, PRDATA | Original APB — fixed two-cycle transfers, no wait states, no error reporting |
| APB3 | Issue B (2004) | PREADY, PSLVERR | Wait states via PREADY, error response via PSLVERR. Enables variable-latency peripherals. |
| APB4 | Issue C (2010) | PPROT[2:0], PSTRB | Transaction protection (secure/non-secure/privileged), sparse write strobe for byte-lane enables |
| APB5 | Issue D (2021) | PWAKEUP, PAUSER, PWUSER, PRUSER, PBUSER, parity check signals | Wake-up signalling for clock gating, user-defined sideband signals, interface parity protection for safety-critical applications |
| APB5 + RME | Issue E (2023) | PNSE | Realm Management Extension — adds Root and Realm physical address spaces alongside Secure and Non-secure |
The APB protocol has several fundamental properties that apply to every version:
All APB signals are sampled at the rising edge of PCLK. There are no asynchronous signals in the APB protocol (PWAKEUP must be glitch-free and synchronous to PCLK even though it is consumed in a different clock domain). This makes APB simple to implement and verify in synchronous digital design flows.
APB does not support pipelining. The address and control signals for the next transfer cannot be issued until the current transfer completes (PREADY asserted). This means APB cannot hide latency by overlapping address phases — every transfer adds its full latency to the total access time.
Every APB transfer takes at least two clock cycles: one Setup cycle (PSEL=1, PENABLE=0) followed by at least one Access cycle (PSEL=1, PENABLE=1). If PREADY is deasserted during the Access phase, additional cycles are added. There is no minimum or maximum on the number of additional wait state cycles.
Only one APB transfer can be in progress at any time. The bridge must complete (or abandon) the current transfer before initiating a new one. This eliminates the need for transaction IDs or out-of-order completion logic in peripherals.
The read data bus (PRDATA) and write data bus (PWDATA) are separate, but they cannot be used simultaneously because there is only one address bus and one direction signal (PWRITE). A read and a write cannot occur in the same clock cycle to the same or different peripherals.
| Item | Value / Rule |
|---|---|
| Full name | Advanced Peripheral Bus — part of AMBA (Advanced Microcontroller Bus Architecture) |
| Designed for | Peripheral control register access — UART, GPIO, timers, SPI/I2C, interrupt controllers |
| Minimum cycles per transfer | 2 (one Setup + one Access). More with PREADY wait states. |
| Pipelining | None — strictly non-pipelined |
| Burst support | None |
| Outstanding transactions | 1 — no overlapping transfers allowed |
| Concurrent read/write | Not possible — single shared address/direction bus |
| Clock | PCLK — all signals sampled on rising edge |
| Reset | PRESETn — active-LOW, synchronous to PCLK |
| Requester | APB bridge — initiates all transfers. Previously called “master”. |
| Completer | APB peripheral — responds to transfers. Previously called “slave”. |
| APB2 | Basic: PCLK, PRESETn, PADDR, PSELx, PENABLE, PWRITE, PWDATA, PRDATA. Fixed 2-cycle transfers, no error reporting. |
| APB3 adds | PREADY (wait states), PSLVERR (error response) |
| APB4 adds | PPROT[2:0] (protection), PSTRB (write strobes) |
| APB5 adds | PWAKEUP (clock gating), PAUSER/PWUSER/PRUSER/PBUSER (user signals), parity check signals |
| APB5 + RME adds | PNSE (Realm Management Extension — Root/Realm address spaces) |
| Version detection | No version register — inferred from which signals are present on the peripheral port |
| Spec document | ARM IHI 0024E — AMBA APB Protocol Specification |