热度 4| ||
0 写在前面:
AMBA(Advanced Microcontroller Bus Architecture)高级处理器总线架构;
APB(Advanced Peripheral Bus)高级外围总线;
APB总线协议中唯一的master—APB Bridge模块结构:
APB中slave模块结构:
信号及其来源:
Signal | Source | Description |
---|---|---|
PCLK | 时钟源 | 系统时钟,传输发生在上升沿 |
PRESETn | 复位源 | 复位信号,低使能 |
PADDR[31:0] | APB桥 | 地址信号,最高可达32位 |
PSELx | APB桥 | 由APB bridge产生的信号,针对每一个Peripheral Bus Slave片选信号,表示x从机是否被选中 |
PENABLE | APB桥 | 使能信号,标记传输使能 |
PWRITE | APB桥 | 读/写控制信号,高位写,低为读 |
PWDATA | APB桥 | 写数据 |
PREADY | 从机 | 标记从机是否已将数据发送到总线,高为ready(给出的slave没有,但是官方slave代码会有的,常设定为assign PREADY = 1) |
PRDATA | 从机 | 读数据 |
PSLVERR | 从机 | 故障信号,为高时发生故障(给出的slave没有,但是官方slave代码会有的,常设定为assign PSLVERR = 0) |
附上ARM官方文档的APB信号端口,供大家欣赏:
官方文档的状态机:
状态 | 功能 |
---|---|
IDLE | 默认状态(我的理解是一种待机状态) |
SETUP | 总线的传输状态来到SETUP状态,slave的PSELx被选中(拉为1),但只保持一个时钟周期。之后就要在下一个时钟上升沿时候,来到ENABLE状态 |
ENABLE | 在ENABLE状态,PENABLE被拉高。在SETUP和ENABLE状态,地址、写信号、选择信号都要保持稳定。在ENABLE状态也只持续一个时钟周期,如果没有后续传输,总线又将回到IDLE状态。如果有后续传输,总线将回到SETUP状态。 |
从状态机来看,APB对每一笔数据的传输,都需要两个周期(省略掉IDLE),因此APB数据不适合流水线架构的模块设计中。
(注意:在ENABLE回到SETUP状态时,对于地址信号、写信号、选择信号的要求并不高,可以出一点小错误,因为简单外设接受数据的速度还可以,后期出一些小问题影响不大)
先放出写传输时序图:
分析(注意,我理解的这个时序图是从master的角度进行分析的,要结合master和slave的共有信号去理解时序图):
[T1,T2)对应IDLE状态 (这里采用闭区间、开区间的表达方式,用作表示T1上升沿起作用,但T2上升沿还未起作用,下同);
[T2,T3) 对应SETUP状态。此时,由于T2上升沿的有效,电路状态开始发生改变,在这个时钟周期内,PADDR、PWRITE(拉为1)、PSEL(选中哪个slave)、PWDATA等信息开始加载到数据线上,注意此时PENABLE还没有起效果,只起到一种预加载的效果。
[T3,T4)对应ENABLE状态。此时,由于T3上升沿有效,PENABLE开始有效,在这个时钟周期内,上个状态选中的slave开始接受PADDR、PWRITE、PSEL、PWDATA等信息。
[T4,T5)阶段,由于T4时刻上升沿开始触发,导致PENABLE和PSEL信号恢复默认值,等待下一次指令进行
5.2 读传输:
放出写传输时序图:
分析(注意,我理解的这个时序图是也从master的角度进行分析的,要结合master和slave的共有信号去理解时序图):
[T1,T2)对应IDLE状态;
[T2,T3) 对应SETUP状态。此时,由于T2上升沿的有效,电路状态开始发生改变,在这个时钟周期内,PADDR、PWRITE(拉为0)、PSEL(选中哪个slave)等信息开始加载到数据线上,注意此时PENABLE还没有起效果,只起到一种预加载的效果。(注意此时没有PRDATA数据线上没有有效信息)
[T3,T4)对应ENABLE状态。此时,由于T3上升沿有效,PENABLE开始有效,在这个时钟周期内,上个状态选中的slave开始接受PADDR、PWRITE、PSEL等信息,并传输PRDATA信号给master。
4. [T4,T5)阶段,由于T4时刻上升沿开始触发,导致PENABLE和PSEL信号恢复默认值,等待下一次指令进行何种操作。
在对比写操作和读操作的过程中,发现读操作在SETUP时钟周期里没有有效数据,个人理解是因为低速外设准备数据的速度太慢了,如果在SETUP时钟周期就要求有效数据,很有可能传输不了正确的数据,索性降低要求,让其在ENABLE时钟周期才有效。
而APB Bridge准备数据的速度很快,因此可以在SETUP状态就可以准备好数据,方便在ENABLE状态给外设数据。
(待续)
官方文档给出的一些应用:
关于APB的东西还有很多,比如PREADY,多次数据连续传输等等,等空闲的时候再补充吧。
本文也存在许多不足之处,欢迎大家批评指正。