以 OHCI规范要求的端点描述符为例:端点描述符(ED)是一个16字节内存结构,必须16字节对齐,因此其内存地址的低4位必然为0


技术分析

1. 对齐要求与地址的关系

  • 16字节对齐意味着地址必须是16的倍数
  • 用二进制表示:地址值需满足 地址 % 16 == 0
  • 16 = 2⁴,因此地址的最低4位必须全为0(二进制:xxxx...xxxx0000

2. 从字段结构验证16字节大小

根据图表中的ED结构,各字段大小累计为:

  • FA(功能地址):1字节
  • EN(端点编号)+ D(方向):1字节
  • S(速度)+ K(跳过)+ F(格式):1字节
  • 保留位:1字节
  • MPS(最大包大小):2字节
  • TailP(队尾指针):4字节
  • HeadP(队首指针):4字节
  • NextED(下一个ED指针):4字节
  • H(暂停)+ C(数据翻转进位)等状态位:嵌入在指针字段中

总计:1+1+1+1+2+4+4+4 = 正好16字节

3. OHCI规范的设计意图

这种严格对齐要求有利于:

  • 硬件优化:主机控制器(HC)可直接用地址低4位作为内部索引
  • 性能提升:对齐访问减少内存总线周期
  • 数据结构对齐:确保TD队列指针的高效遍历

因此,当HCD分配ED内存时,必须使用memalign(16, sizeof(ED))或类似机制来保证地址低4位为0。