AHB-Lite总线协议

       这是我的第一篇文章分享,以后我有时间就会做一些项目来分享,我希望这是一个菜鸟走上高手的征程。

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的系统:

AHB-Lite总线协议_第1张图片

内部逻辑生成了一个地址解码器和多路选择器。

接下来分别从master和slave来讨论对应的信号接口:

MASTER:

AHB-Lite总线协议_第2张图片

SLAVE:

AHB-Lite总线协议_第3张图片

传输:

传输共有三种模式:

单一传输

递增爆发,地址边界不回环传输

回环Burst传输,在特殊的地址边界回环

传输方式为,一个周期传输地址,一个周期传输数据。

包含两个相位:

Address:保持一个HCLK周期,除非被前一个总线传输进行了扩展。

DATE: 或许需要若干个HCLK周期。使用HREADY信号(拉低)来控制完成传输所需要的周期。

最简单的传输包含一个地址周期和一个数据周期。

单一传输:

最简单的读传输如图:

AHB-Lite总线协议_第4张图片

 写传输:AHB-Lite总线协议_第5张图片

这是一个简单传输,没有等待状态。在第一个HCLK时,Master驱动地址和控制信号到总线上,在第二个周期Slave采集到了对应的信号,便开始驱动HREADY做出响应,Master将在第三个HCLK上升沿采集到该响应。

Slave可以插入等待状态到任何传输中,图示为两个等待状态的读传输:

AHB-Lite总线协议_第6张图片

 

下图为具有一个等待状态的写传输:

AHB-Lite总线协议_第7张图片

可以看到,在写操作中,Master必须在整个扩展周期中保持数据稳定。

在读操作中,Slave在传输快要结束时提供有效数据。

传输类型:

HTRANS【1:0】控制传输类型,共有四种方式。

IDLE:表示无数据传输。

BUSY:表示Master处于忙碌状态,用于在burst中插入发送的等待延时。

NONSEQ:表示一个单个的传输或者是burst传输中的第一拍数据,NONSEQ地址与之前的传输没有关系,表示一笔新的传输。

SEQ:表示处于burst传输状态中,发送的地址与之前的地址是有关系的。

AHB-Lite总线协议_第8张图片

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。

图示:

AHB-Lite总线协议_第9张图片

传输大小:

HSIZE【1:0】定义了传输数据的大小:

AHB-Lite总线协议_第10张图片AHB-Lite总线协议_第11张图片AHB-Lite总线协议_第12张图片

传输大小必须小于或等于数据总线宽度。

Burst操作:

Burst传输有两种:递增Burst访问连续位置,每个传输地址都是前一个地址的递增。回环Burst当地址到达边界时回卷。

HBURST【2:0】控制着传输类型:

单笔传输SIGNAL,回环传输WRAP,不定长传输INCR,定长的递增传输INCR。

AHB-Lite总线协议_第13张图片

Burst大小表示拍数。而不是传输的字节数。

BURST举例:

四拍回环传输:WRAP4

AHB-Lite总线协议_第14张图片

因为该Burst是一个4拍Burst,所以在地址16byte的边界回环,0x3c接下来是0x30。

四拍递增:INCR4

AHB-Lite总线协议_第15张图片

这种情况下,地址不回环。

八拍递增:INCR

AHB-Lite总线协议_第16张图片

注意,这个是半字传输,所以地址递增为2.

在传输等待期间改变传输类型:

AHB-Lite总线协议_第17张图片

图示为在等待传输期间(HREADY拉低),改变传输类型,要注意当Slave等待状态时,Master不能改变传输状态,除非是IDLE传输、BUSY传输。

上图所示是SINGLE Burst的一个等待传输,传输类型由IDLE改变为NONOSEQ。

保护控制:

保护控制信号HPROT[3:0],提供总线访问的额外信息,主要用作某些级别的保护。

该信号可以针对不同的传输类型进行控制。Hprot[1],[0],表示数据指令传输以及相关的优先级顺序。Hprot[2]用来指示是否为缓冲器传输。

AHB-Lite总线协议_第18张图片

总线互连:

地址解码:

AHB-Lite总线协议_第19张图片

多路转换器:

Master驱动地址和控制信号到所有的Slave,由解码器选择对应的Slave。任何来自Slave的响应,都通过数据多路转换器发送到Master。

AHB-Lite总线协议_第20张图片

SLAVE响应:

Slave传输响应:

Slave必须提供一个响应来表示传输状态。由HRESP来完成。

AHB-Lite总线协议_第21张图片

那么HRESP和HREADY的关系是什么呢?见下图:

AHB-Lite总线协议_第22张图片

那么Slave有三种方式完成传输:

立即完成传输

插入等待状态提供额外时间完成传输

发送错误响应来指示传输失败

传输完毕:

当HREADY置高并且HRESP为OKAY时,表示传输完毕。

ERROR响应:

OKAY响应耗用一个周期,但是ERROR响应需要两个周期。

要开始一个ERROR响应,SLAVE驱动HRESP为高,然后驱动HREADY为低获得额外的一个周期,在下一个周期,HREADY驱动为高来结束传输,HRESP仍旧保持高来表示ERROR。

之所以需要两个周期是考虑到总线的流水线结构。使得Master在下一次传输开始前有时间取消下一次访问,并驱动HTRANS为IDLE。

具体情形如下图:

AHB-Lite总线协议_第23张图片

T1-T2周期插入一个等待状态(HREADY为低),并提供一个OKAY响应,在T2-T3,Slave发出ERROR响应这是第一个响应,因为HREADY为低,T3-T4,SLAVE发出一个ERROR响应,这是第二个响应,紧接着MASTER将传输类型转换为IDLE,这将取消对B的传输,同时T4-T5周期,SLAVE发出OKAY响应。

你可能感兴趣的:(stm32,物联网)