这是我的第一篇文章分享,以后我有时间就会做一些项目来分享,我希望这是一个菜鸟走上高手的征程。
AHB-Lite总线协议
AHB特性:Burst传输、单边操作、非三态、宽数据位。其是为高性能、高频率系统而设计,对于低带宽外围器件可以连接到APB总线。(通过桥接)。
对于多个Mster和Slave的AHB总线结构由四个部分组成:Mster设备、Slave设备、地址译码器、仲裁器。但是,目前AHB总线多用于一个MASTER对多个Slave,此时仲裁器替换为多路选择器。下将详解一个MASTER和多个SLAVE的传输过程。
信号描述:
全局信号:
HCLK:总线时钟
HRESETN:总线复位信号,低电平有效。
Mster信号:
HADDR:32位系统地址总线。
HBURST[2:0]: 传输类型指示,支持固定长度4、8、16拍。总数据量等于拍数×每一拍数据大小。
HMASTLOCK:为高时表示当前传输是锁定序列的一部分。与地址和控制信号具有相同时序。
HPROT:保护控制信号提供额外的关于总线访问的信号,主要用在一些需要调用某种级别保护的Slave模块。
HSIZE:传输大小。
HTRANS:传输类型,可以有四种方式。
HWDATA:写数据。
HWRITE:表示传输方向,高为写传输,低为读传输。
Slave信号:
HRDATA:读数据信号。
HREADYOUT:为高时,表示传输在总线上结束。该信号可以通过拉低来对传输进行延迟扩展。
HRESP::传输响应。为低表示传输状态正常;为高表示传输状态错误。
译码器信号:
HSEL:每个Slave都拥有对应的HSEL信号,当Slave被选中,就会将对应的HSEL信号拉高表示被选中。
多路转换器信号:
HRADATA:读数据传输。
HREADY:为高时,提示Mster和所有的Slave,先前的传输完成。
HRESP:传输响应,由译码器选择。
系统解释:
图示是一个MASTER和三个SLAVE的系统:
内部逻辑生成了一个地址解码器和多路选择器。
接下来分别从master和slave来讨论对应的信号接口:
MASTER:
SLAVE:
传输:
传输共有三种模式:
单一传输
递增爆发,地址边界不回环传输
回环Burst传输,在特殊的地址边界回环
传输方式为,一个周期传输地址,一个周期传输数据。
包含两个相位:
Address:保持一个HCLK周期,除非被前一个总线传输进行了扩展。
DATE: 或许需要若干个HCLK周期。使用HREADY信号(拉低)来控制完成传输所需要的周期。
最简单的传输包含一个地址周期和一个数据周期。
单一传输:
最简单的读传输如图:
这是一个简单传输,没有等待状态。在第一个HCLK时,Master驱动地址和控制信号到总线上,在第二个周期Slave采集到了对应的信号,便开始驱动HREADY做出响应,Master将在第三个HCLK上升沿采集到该响应。
Slave可以插入等待状态到任何传输中,图示为两个等待状态的读传输:
下图为具有一个等待状态的写传输:
可以看到,在写操作中,Master必须在整个扩展周期中保持数据稳定。
在读操作中,Slave在传输快要结束时提供有效数据。
传输类型:
HTRANS【1:0】控制传输类型,共有四种方式。
IDLE:表示无数据传输。
BUSY:表示Master处于忙碌状态,用于在burst中插入发送的等待延时。
NONSEQ:表示一个单个的传输或者是burst传输中的第一拍数据,NONSEQ地址与之前的传输没有关系,表示一笔新的传输。
SEQ:表示处于burst传输状态中,发送的地址与之前的地址是有关系的。
T0-T1开始进行使用一个NONSEQ传输的4拍(HBURST)读取操作。
T1-T2:Master无法执行第二拍,因此插入一个BUSY来延迟第二拍的开始,Slave为第一拍提供数据。
T2-T3:Master现在准备开始第二拍,一个SEQ传输被定义,同时Master将忽略Slave传输的任何数据。
T3-T4:Master执行第三拍传输,Slave为第二拍提供读取数据。
T4-T5:Master现在准备执行最后一拍,Slave无法结束传输,通过HREADY拉低插入一个等待状态。
T5-T6:Slave为第三拍提供读取数据。
T6-T7:Slave为最后一排提供读取数据。
锁定传输:
HMASTLOCK信号拉高可以锁定访问。该信号告知其他的Slave当前的传输序列不允许被打断。
大部分Slave不需要HMASTLOCK,但是当处于多个Master系统中,一个Slave可能被多个Master访问,就必须调用HMASTLOCK。
图示:
传输大小:
HSIZE【1:0】定义了传输数据的大小:
传输大小必须小于或等于数据总线宽度。
Burst操作:
Burst传输有两种:递增Burst访问连续位置,每个传输地址都是前一个地址的递增。回环Burst当地址到达边界时回卷。
HBURST【2:0】控制着传输类型:
单笔传输SIGNAL,回环传输WRAP,不定长传输INCR,定长的递增传输INCR。
Burst大小表示拍数。而不是传输的字节数。
BURST举例:
四拍回环传输:WRAP4
因为该Burst是一个4拍Burst,所以在地址16byte的边界回环,0x3c接下来是0x30。
四拍递增:INCR4
这种情况下,地址不回环。
八拍递增:INCR
注意,这个是半字传输,所以地址递增为2.
在传输等待期间改变传输类型:
图示为在等待传输期间(HREADY拉低),改变传输类型,要注意当Slave等待状态时,Master不能改变传输状态,除非是IDLE传输、BUSY传输。
上图所示是SINGLE Burst的一个等待传输,传输类型由IDLE改变为NONOSEQ。
保护控制:
保护控制信号HPROT[3:0],提供总线访问的额外信息,主要用作某些级别的保护。
该信号可以针对不同的传输类型进行控制。Hprot[1],[0],表示数据指令传输以及相关的优先级顺序。Hprot[2]用来指示是否为缓冲器传输。
总线互连:
地址解码:
多路转换器:
Master驱动地址和控制信号到所有的Slave,由解码器选择对应的Slave。任何来自Slave的响应,都通过数据多路转换器发送到Master。
SLAVE响应:
Slave传输响应:
Slave必须提供一个响应来表示传输状态。由HRESP来完成。
那么HRESP和HREADY的关系是什么呢?见下图:
那么Slave有三种方式完成传输:
立即完成传输
插入等待状态提供额外时间完成传输
发送错误响应来指示传输失败
传输完毕:
当HREADY置高并且HRESP为OKAY时,表示传输完毕。
ERROR响应:
OKAY响应耗用一个周期,但是ERROR响应需要两个周期。
要开始一个ERROR响应,SLAVE驱动HRESP为高,然后驱动HREADY为低获得额外的一个周期,在下一个周期,HREADY驱动为高来结束传输,HRESP仍旧保持高来表示ERROR。
之所以需要两个周期是考虑到总线的流水线结构。使得Master在下一次传输开始前有时间取消下一次访问,并驱动HTRANS为IDLE。
具体情形如下图:
T1-T2周期插入一个等待状态(HREADY为低),并提供一个OKAY响应,在T2-T3,Slave发出ERROR响应这是第一个响应,因为HREADY为低,T3-T4,SLAVE发出一个ERROR响应,这是第二个响应,紧接着MASTER将传输类型转换为IDLE,这将取消对B的传输,同时T4-T5周期,SLAVE发出OKAY响应。