1. APB协议基础认知
第一次接触APB(Advanced Peripheral Bus)总线时,我误以为这不过是另一种普通串行协议。直到在嵌入式项目中实际调试外设通信故障,才真正理解ARM这套总线设计的精妙之处。APB作为AMBA协议家族中的"轻量级选手",专门为低带宽外设通信优化,其同步、非流水线的特性让它成为芯片内部低速外设连接的理想选择。
与AXI的高速复杂不同,APB协议的精髓在于极简——每个传输至少需要两个时钟周期(Setup+Access),通过PCLK同步所有信号。这种设计虽然牺牲了理论带宽,但换来了极高的时序确定性和实现简易度。实际项目中,我常用APB连接UART、GPIO、定时器等对实时性要求不高但需要稳定通信的外设。
2. 信号时序深度解析
2.1 关键信号线功能
APB2.0规范的信号集精简到极致:
- PCLK:所有信号同步的时钟源,频率通常为系统主频的1/2或1/4
- PRESETn:低有效复位信号(注意n后缀表示低电平有效)
- PADDR[31:0]:32位地址总线,实际宽度可裁剪
- PPROT[2:0]:AXI4引入的保护信号,用于安全域控制
- PSELx:选择信号(x表示外设编号),相当于片选
- PENABLE:使能信号,标志访问阶段开始
- PWRITE:1写0读的方向控制
- PWDATA/PRDATA:32位写/读数据总线
- PREADY:外设准备的握手信号
- PSLVERR:错误状态指示
调试经验:PSELx的生成逻辑是常见故障点,需确保地址解码器输出稳定无毛刺
2.2 典型读写时序
读操作波形示例(假设外设始终PREADY=1):
- T1周期(Setup Phase):
- PSELx=1, PADDR=目标地址
- PWRITE=0, PENABLE=0
- T2周期(Access Phase):
- 保持PSELx=1
- PENABLE=1
- 外设在T2结束时输出PRDATA
写操作增加PWDATA在T1周期有效,其余时序类似。实际项目中,我常用Saleae逻辑分析仪捕获这类波形,特别注意PREADY拉低时主设备会插入等待周期。
3. 实战中的协议实现
3.1 FPGA端APB从机设计
以Ver
