首先我们要了解,APB协议有APB2,APB3,APB4这几种,APB2是最原始版本,APB3,APB4是在APB2的基础上增加了一些内容。
APB协议可以提供一种低成本接口,可以最大程度降低功耗并降低接口复杂性,他可以连接在任何低带宽且不需要流水线总线接口的高性能外围设备,以下是APB协议的特点:
1.低成本
2.低功耗
3.低带宽
4.无流水线
5.所有信号都是时钟上升沿有效
6.进行依次数据传输至少需要两个周期。
整体状态机运行有三个状态:
1.IDLE总线的默认状态
2.SETUP 当有传输要求时,总线转移到SETUP状态,此时PSELx拉高,总线仅仅在SETUP状态保持一个时钟周期并且在下一个时钟周期上升沿转移到ENABLE状态。
3.ENABLE 此时PENABLE拉高,从SETUP到ENABLE的过程中,地址,写入,选择,和写入数据信号必须保持稳定。从访问状态的退出是由从机的ready信号控制
接下来,我们来看一下写操作。
1.T0-T1:初始状态。
2.T1-T2:主机将PADDR和PWRITE放到总线上,通过PSEL选择一个从机,这样从机会知道主机要进行一次写操作。主机将需要写入从机的data也放到总线上。
3.T2:PENABLE为高,表明当前数据有效,并且主机将data写入从机。
4.T3:数据传输结束,在此回到初始状态。
我们需要注意的是,写传输从地址,写数据,选择信号都是在时钟上升沿后开始,传输的第一个时钟周期叫做SETUP状态,第一个周期PSEL为高,PENABLE为低,第一个周期为data的传输做准备。第二个周期叫做ENABLE状态,此时地址,数据和控制信号在整个访问阶段都保持有效,第二个周期PSEL为高,PENABLE为高,进行data的传输。
接下来我们看一下读操作:
T0-T1:IDLE状态。
T1: 主机向总线上发送地址,此地址是从机的地址(将此地址发送到总线上,就知道是哪个从机了),并且将WRITE拉低,PSEL拉高。
T2:PENABLE拉高。主机通知从机进行PADDR的传输。
APB数据的传输需要两个周期,第一个周期将PADDR,WRITE,PSEL发送到总线。第二个周期极性传输读的data(PENABLE拉高)。
APB3相比于APB2来说,增加了两个端口:PREADY和PSLVERR,前者是针对从机的准备信号,后者是一个错误反馈信号,表示当前传输的数据有误。
下面我们来看一下APB3的读操作无等待:
T1:SETUP周期,将PADDR,PWRITE,PSEL发送到总线
T2:ENABLE周期,拉高ENABLE,若PREADY为高的话,就进行数据传输,如果是低,就等待其变高。
APB3的写操作,有等待
我们 可以看到,当PSEL和PENAB都为高的时候,PREADY为低,因此等待,直到T5的时候,PSEL,PENABLE,PREADY都为高,此时采样的数据是我们想要的。
APB3中的读操作,有等待与上述相同,不在赘述。
而APB4相比于APB3来说,又多了两个端口:PPROT和PSTRB,前者是保护信号,后者是选通信号。这两个很少用到。