USB网络控制通讯NCM
+ -

NCM 数据报内存对齐机制详解

2025-07-07 0 0

以下是关于 NCM 规范中数据报内存对齐要求的系统化解析,涵盖对齐原理、参数配置及典型应用场景:


1. 对齐机制的核心设计

NCM 允许设备通过 NTB Parameter Structure(表6-3) 声明其对数据报载荷(Payload)的内存对齐需求,主机需按此约束构造NTB。

  • 对齐目标:优化嵌入式设备的网络协议栈性能(如减少内存拷贝、提升缓存命中率)。
  • 控制对象:以太网帧头 之后 的载荷部分(即IP包起始位置)。
  • 数学表达: 数据报在NTB中的偏移量(Offset)需满足:
    Offset % wNdpXxDivisor == wNdpXxPayloadRemainder
    
    • XxIn(设备→主机)或 Out(主机→设备)方向。
    • 通过填充(Padding)调整偏移量以满足等式。

2. 对齐参数定义(NTB Parameter Structure)

设备通过以下字段向主机声明对齐要求:

参数名 方向 说明
wNdpInDivisor IN 设备发送数据时,载荷偏移量需满足的除数(如缓存行大小)。
wNdpInPayloadRemainder IN 设备发送数据时,载荷偏移量除以除数的余数(通常为0)。
wNdpOutDivisor OUT 主机发送数据时,载荷偏移量需满足的除数(如固定缓冲区大小)。
wNdpOutPayloadRemainder OUT 主机发送数据时,载荷偏移量除以除数的余数(如缓冲区内的子偏移)。

3. 典型应用场景

场景1:IP包对齐缓存行(Cache Line)
  • 目标:避免缓存行分裂(Cache Line Split),提升读取效率。
  • 参数配置
    • wNdpXxDivisor = 缓存行大小(如64字节)。
    • wNdpXxPayloadRemainder = 0(从缓存行起始处对齐)。
  • 实现方式
    • 在以太网帧头(14字节)后插入填充,使IP包起始地址满足 Offset % 64 == 0
    • 示例(见图3-3):
      • 若以太网帧头位于NTB偏移 0x100,则需填充 64 - (0x100 % 64) = 50 字节,使IP包从 0x100 + 14 + 50 = 0x140(64的倍数)开始。
        15402096386
场景2:IP包放入固定大小缓冲区
  • 目标:预分配固定大小缓冲区,简化内存管理(如DMA传输)。
  • 参数配置
    • wNdpXxDivisor = 缓冲区大小(如2048字节)。
    • wNdpXxPayloadRemainder = 预期偏移(如16字节,保留头部空间)。
  • 实现方式
    • 主机在构造NTB时,确保每个数据报的载荷起始位置满足 Offset % 2048 == 16
    • 示例(见图3-4):
      • 第一个数据报:IP包从缓冲区 0x0010(16字节)开始。
      • 第二个数据报:IP包从缓冲区 0x0810(2048+16=2064字节)开始。

154030372492

4. 对齐实现规则

  1. 填充位置
    • 仅允许在 以太网帧头与载荷之间 插入填充(不影响帧头和CRC-32)。
  2. 主机责任
    • 主机必须严格遵守设备的对齐要求(尤其OUT方向)。
  3. 设备灵活性
    • 设备可对不同方向(IN/OUT)设置独立的对齐策略。

5. 对齐对NTB结构的影响

  • NTH/NDP字段
    • wBlockLength(NTB总长度)需包含填充字节。
    • wDatagramIndex 指向填充后的实际数据报起始位置。
  • 数据报长度
    • wDatagramLength 包含以太网头、填充、载荷及可选CRC-32。

6. 性能与兼容性权衡

  • 优点
    • 减少嵌入式设备的内存操作开销(如零拷贝、缓存优化)。
    • 支持预分配缓冲区,提升DMA效率。
  • 代价
    • 填充字节增加少量带宽开销(通常<5%)。
    • 主机需动态计算填充量,增加构造NTB的复杂度。

总结

NCM的对齐机制通过 除数-余数模型 实现了灵活的内存布局控制,覆盖两种典型场景:

  1. 缓存行对齐:提升协议栈处理效率(Divisor=缓存行大小)。
  2. 固定缓冲区布局:简化设备内存管理(Divisor=缓冲区大小)。

开发者需在设备描述符中正确配置对齐参数,主机驱动则需按规范生成满足约束的NTB。此设计体现了NCM对嵌入式场景的深度优化,平衡了性能与通用性。

0 篇笔记 写笔记

关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB网络控制通讯NCM
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

    打开支付宝扫一扫,即可进行扫码打赏哦

    您的支持,是我们前进的动力!