APB Series — APB-04: Read Transfers — VLSI Trainers
APB Series · APB-04

Read Transfers

How APB read transfers work — the Setup and Access phases for reads, how PRDATA timing differs from PWDATA, read with no wait states, read with wait states, and a precise comparison of what changes between read and write transfers.

📋 Read vs Write — What Changes

A read transfer follows the same two-phase structure as a write transfer. The Setup and Access phases, the PREADY extension mechanism, and the signal stability rules are all identical. Only three things change between a read and a write:

Write Transfer

  • PWRITE = 1 (HIGH)
  • Requester drives PWDATA with data to write
  • PSTRB indicates which byte lanes are valid
  • Completer does not drive PRDATA
  • Data flows Requester → Completer

Read Transfer

  • PWRITE = 0 (LOW)
  • Completer drives PRDATA with register contents
  • PSTRB must be driven all-zero by Requester
  • PWDATA is not required to be valid
  • Data flows Completer → Requester

Everything else is the same: PSELx, PENABLE, PADDR, PPROT, PAUSER all behave identically in both read and write transfers. PREADY is still driven by the Completer to control the number of cycles. PSLVERR is still valid only at transfer completion.

PWRITE must be stable for the entire transfer duration. You cannot change the direction mid-transfer. A transfer is either fully a read or fully a write — there is no partial read/write in APB.

Read with No Wait States

The simplest APB read: the Completer provides PRDATA before the end of the Access phase and asserts PREADY in the first Access cycle. Total transfer time: two clock cycles.

T0 T1 T2 T3 T4 SETUP ACCESS PCLK PADDR PWRITE PSELx PENABLE PRDATA PREADY Addr 1 LOW = Read Data 1 Setup: PSEL↑ PWRITE=0 Access: PENABLE↑ PREADY=1 Requester captures PRDATA Must be valid here
Figure 1 — Read transfer with no wait states. PWRITE is LOW throughout. The Completer drives PRDATA stable during the Access phase. PRDATA must be valid by T3 (the rising edge where PSEL+PENABLE+PREADY are all HIGH). The Requester captures PRDATA at T3.

Step by step:

Read with Wait States

When the Completer needs extra time to retrieve the register value — for example, if the read requires a slow memory access or a calculation — it drives PREADY LOW during the Access phase to insert wait states.

T0 T1 T2 T3 T4 T5 T6 SETUP ACCESS + wait states PCLK PADDR PWRITE PSELx PENABLE PRDATA PREADY Addr 1 LOW = Read Data 1 PRDATA undefined during wait states PREADY=0 — wait states — bus frozen
Figure 2 — Read transfer with two wait states. PRDATA is undefined (hatched region) during the wait state cycles T2–T4 — the Completer is still computing or fetching the value. At T5 PREADY is asserted and PRDATA must be valid. The Requester samples PRDATA on the T5 rising edge.

The key difference from a write with wait states: PRDATA is only required to be valid at the cycle when PREADY is asserted. During wait state cycles the Completer is preparing the data — PRDATA can be anything (though it should not be actively driven to misleading values). The Requester must not sample PRDATA until the completion cycle.

PRDATA is undefined during wait states — the Requester must wait for PREADY. A common bug in APB bridge implementations is sampling PRDATA on the first Access cycle instead of on the PREADY=1 cycle. For zero-wait-state peripherals these happen to be the same cycle so the bug goes undetected until a slow peripheral is connected.

📋 PRDATA Timing Requirements

PRDATA has stricter timing requirements than PWDATA because it flows from Completer to Requester (the direction opposite to all other data). Understanding the timing window is critical for both peripheral designers and bridge designers.

PRDATA Validity Window T2 ↑PCLK PENABLE rises T3..T(n-1) ↑PCLK Wait state cycles PREADY=0 Tn ↑PCLK (completion) PREADY=1 Requester samples PRDATA PRDATA must be valid here Setup time before Tn ↑PCLK PRDATA undefined — Completer is preparing value
Figure 3 — PRDATA validity window. The Completer must ensure PRDATA is valid (meets setup time) before the rising clock edge at which PREADY is asserted. Before that edge, during wait states, PRDATA may be undefined.

What the Completer must do

What the Requester (bridge) must do

PRDATA from multiple peripherals shares the same bus wires. The APB bridge only drives PSELx for one peripheral at a time. All other peripherals must drive their PRDATA to zero (or leave it tri-state if wired-OR is used) when their PSELx is deasserted. The recommended behaviour is to drive PRDATA=0 when PSELx=0. This prevents bus contention and makes logic analyser traces easier to read.

📋 Signal Stability During Reads

The signal stability rules for reads are almost identical to writes. The Requester-driven signals follow the same rules — they must be stable from Setup through completion. Only PRDATA (the Completer-driven read data) has different requirements.

SignalDirectionMust be stable fromUntilRead-specific notes
PADDRReq → CompStart of SetupTransfer completesSame as write — must not change during wait states
PWRITEReq → CompStart of SetupTransfer completesMust be LOW (0) for entire read transfer
PSELxReq → CompStart of SetupTransfer completesSame as write
PENABLEReq → CompStart of AccessTransfer completesSame as write
PSTRBReq → CompStart of SetupTransfer completesMust be all-zero for reads. PSTRB has no meaning on a read but must be driven low.
PPROTReq → CompStart of SetupTransfer completesSame as write — applies to reads too for secure/non-secure access control
PRDATAComp → ReqBefore completion edge (setup time)After completion edge (hold time)Only valid at completion. Undefined during wait states.
PWDATAReq → CompN/AN/ANot required to be valid during reads — but spec recommends driving to zero.

📋 Back-to-Back Read Transfers

Back-to-back reads work identically to back-to-back writes. PSELx stays asserted, PENABLE is deasserted for exactly one cycle (the Setup phase of the next read), then reasserted for the next Access phase.

T0 T1 T2 T3 T4 T5 SETUP 1 ACCESS 1 SETUP 2 ACCESS 2 PCLK PADDR PENABLE PRDATA Addr 1 Addr 2 Data 1 Data 2
Figure 4 — Back-to-back reads. PRDATA carries Data 1 at T2 (sampled by Requester). During Setup 2 (T3) PRDATA is undefined — the peripheral is fetching Data 2. At T4 (Access 2) PRDATA carries Data 2 and is sampled again.

📋 Mixed Read/Write Transfers

APB does not support concurrent reads and writes, but the bridge can perform reads and writes in any order — each one a separate sequential transfer. The direction (PWRITE) can change between transfers but never during a transfer.

Read-Modify-Write sequences are common. A typical peripheral access pattern is: (1) read a control register, (2) modify some bits in the bridge’s holding register, (3) write the modified value back. APB handles this as two sequential transfers — one read and one write — with an IDLE cycle between them unless back-to-back to the same peripheral.
ScenarioPWRITE valuePWDATA required?PRDATA required?
Write transfer1 (HIGH)Yes — must be valid from Setup through completionNo — Completer does not drive PRDATA
Read transfer0 (LOW)No — spec recommends driving to 0Yes — Completer drives valid data at completion
Idle (no transfer)Don’t careDon’t careCompleter should drive 0 when PSELx=0

📋 Quick Reference

ItemRule
PWRITE value for read0 (LOW) — must be stable throughout transfer
PSTRB during readMust be all-zero — no byte-lane enable concept on reads
PWDATA during readNot required to be valid — recommended to drive zero
PRDATA must be validAt the rising PCLK edge where PSELx=1, PENABLE=1, PREADY=1, PWRITE=0
PRDATA during wait statesUndefined — Completer is preparing the value
PRDATA when PSELx=0Should be driven to zero (recommended, not required)
Requester samples PRDATA atRising PCLK edge where PSEL+PENABLE+PREADY=1 and PWRITE=0
Minimum read duration2 cycles — one Setup + one Access with PREADY=1
PRDATA bus contentionOnly one peripheral drives PRDATA at a time — selected by PSELx. Others drive 0.
Difference from writePWRITE=0, PRDATA driven by Completer instead of PWDATA, PSTRB must be 0
Back-to-back readsPSELx stays HIGH, PENABLE deasserted for 1 cycle (new Setup), PRDATA undefined during that cycle
Read-Modify-WriteTwo sequential transfers: read then write. IDLE between unless same peripheral.
Scroll to Top