HTRANS、HSIZE和HBURST共同决定下一次数据传输的地址。
HTRANS[1:0]定义传输类型
HTRANS[1:0] | 主机传输状态 | 描述 |
---|---|---|
00 | IDLE空闲 | 表示没有进行数据传输,默认状态。 主设备虽然可能已经占用了总线,但是还没有开始传输数据。 从设备需要返回OKAY响应 |
01 | BUSY忙 | 主设备正在进行传输,因此没法立即开始新一轮传输。 (可以理解为主设备申请延时)从设备需要返回OKAY响应 |
10 | NONSEQ非连续 | 表示单次传输,或者是突发传输(Burst Transfer)中的第一拍数据。 在非连序模式下,每次传输都是独立的,后续的传输并不依赖于前一次传输的地址。 |
11 | SEQ连续 | 突发中剩下的传输是连续传输。控制信息会与前一次传输相同,但地址等于前一次传输地址加上HSIZE对应的字节数 |
Note:BUSY传输类型让主设备有能力在突发传输的中间暂停,插入等待周期,即使它仍占有总线并且计划继续当前的突发传输。在BUSY状态下,尽管当前传输暂停,但主设备仍需保持下一次传输所需的正确地址和控制信号,以便在条件允许时能够无缝继续数据传输。
- 突发传输的第一拍传输类型应该是NONSEQ。
- 主设备没办法立刻开始突发的第二拍传输,因此主设备使用BUSY来延迟。
- 主开始进行突发的第三拍传输,但这一次从设备没准备好,通过拉低HREADY来插入单个等待状态。
HSIZE[2:0]定义传输大小
最小是1字节,最大是1024bit。
HBURST[2:0]定义突发类型/传输拍数
HBURST信号是一个重要的控制信号,用于指示数据传输是否为突发传输(Burst Transfer)以及如果是,它指定的是哪种类型的突发模式。
突发传输是一种高效的传输模式,允许连续的数据传输而无需在每次传输之间重新设置地址和控制信号,从而显著提高数据吞吐量和总线效率。
incrementing(递增):每次传输的地址会在上一次地址基础上递增。
wraping(回环):地址在到达边界后自动循环回到起始地址。
例如,一个包含四个拍(beat)的回环突发,每个拍是一个字(4Byte)访问,将会在16字节的边界处循环。因此,如果传输的起始地址是0x34,那么它将包含到地址0x34、0x38、0x3C和再次回到0x30的四次传输。
HBURST[2:0] | 突发传输类型 | 描述 | 拍数 |
---|---|---|---|
000 | SINGLE | 单次传输 | 1beat |
001 | INCR | 不定长的递增突发 | |
010 | WRAP4 | 4拍的回环突发 | 4beat |
011 | INCR4 | 4拍的递增突发 | 4beat |
100 | WRAP8 | 8拍的回环突发 | 8beat |
101 | INCR8 | 8拍的递增突发 | 8beat |
110 | WRAP16 | 16拍的回环突发 | 16beat |
111 | INCR16 | 16拍的递增突发 | 16beat |
Note:选择INCR时,每一拍都可以改变HSIZE的值;如果选择的是WRAP4~INCR16,那只有在突发结束后才能改变HSIZE的值。
传输数据总量计算
一次突发中传输的数据总量=拍数(HBURST)*每拍的数据大小(HSIZE)。
1K边界
“1K边界”是指一种地址对齐和传输限制,它规定了突发传输(Burst Transfers)不能跨越1KB(1024字节)的地址边界/低10bit的地址。这一限制主要应用于AHB总线的突发传输模式中,以防止数据访问跨越从设备(slave)的地址空间边界,从而避免数据错误和冲突。
在AHB中,从设备通常被配置有特定的地址范围,通常是1KB对齐的,这意味着从设备的地址空间从某个1KB的边界开始,持续1KB,然后是下一个从设备的地址空间,以此类推。这种设计简化了地址解码逻辑,使得多个从设备可以在同一总线上并行存在,而不会互相干扰。
当主设备(master)想要进行突发传输时,如果这次传输会跨越1KB的边界,那么它必须被分割成两部分或更多部分,以确保每次突发传输都在同一个1KB的地址范围内。例如,如果一个突发传输开始于地址0x3F00,那么在达到地址0x3FFF之后,突发传输必须停止,随后从0x4000地址重新开始,以确保不跨越1KB的边界。
为了遵守1KB边界的限制,AHB总线协议要求主设备在设计时考虑这一约束,确保在必要的时候能够将大的突发传输分解为符合边界限制的小突发传输。