USB网络控制通讯NCM
+ -

NCM数据报文指针-NDP16

2025-07-07 0 0

NCM数据报指针(NDP)描述了嵌入在NDP中的以太网数据报。与NTH结构一样,定义了两种形式。一种形式(NDP16)用于16位NTB;一种用于32位NTB。这些形式在架构上是等效的,但不同之处在于,许多字段在NDP16中是16位宽,但在NDP32中是32位宽。

1. NDP16 核心结构

NDP16 由三部分组成,总长度至少为 16字节(且为4的倍数):

  1. 8字节头部:包含签名、长度和保留字段。
  2. 1个或多个数据报指针条目(每条目4字节):记录每个以太网帧的位置和长度。
  3. 终止条目(4字节全零):标记指针表的结束。

2. NDP16 字段定义(Table 3-3)

偏移量 字段名 大小 值/格式 说明
0 dwSignature 4字节 0x304D434E0x314D434E NDP16标识签名
- 小端序传输为 0x4E,0x43,0x4D,0x30(”NCM0”)或 0x4E,0x43,0x4D,0x31(”NCM1”)。
- 具体含义参考 Table 3-5(通常表示NDP版本或类型)。
4 wLength 2字节 总字节数(小端序,≥0x0010) NDP16总长度
- 必须是4的倍数(因每个条目占4字节)。
- 最小为16字节(8字节头部 + 2个条目 + 4字节终止符)。
6 wNextNdpIndex 2字节 保留(固定为0) 预留字段:当前规范未使用,必须设为0。
8 wDatagramIndex[0] 2字节 数据报偏移量(小端序) 第一个以太网帧的起始位置
- 从NTB起始字节0计算。
- 必须 ≥ NTH16的wHeaderLength(跳过NTH16头部)。
10 wDatagramLength[0] 2字节 数据报长度(小端序,≥14) 第一个以太网帧的长度
- 以太网帧最小为14字节(MAC头,无载荷)。
12 wDatagramIndex[1] 2字节 数据报偏移量或0(小端序) 第二个以太网帧的起始位置
- 若为0,表示无更多帧(提前终止)。
14 wDatagramLength[1] 2字节 数据报长度或0(小端序) 第二个以太网帧的长度
- 若为0,表示无更多帧(提前终止)。
wDatagramIndex[n] 2字节 0(终止条目) 强制终止条件
- 最后4字节必须为全零(wDatagramIndexwDatagramLength均为0)。
wDatagramLength[n] 2字节 0(终止条目)

3. 关键规则与约束

  1. 长度对齐

    • wLength 必须是4的倍数,且 ≥16(如16, 20, 24…)。
    • 计算条目数(wLength - 8) / 4 - 1(减去头部和终止条目)。
  2. 数据报定位

    • 每个 wDatagramIndex 必须指向有效的以太网帧起始位置,且不重叠。
    • 帧长度 wDatagramLength 必须 ≥14(最小以太网帧),且 ≤ NTB剩余空间。
  3. 终止条件

    • 遇到 wDatagramIndex=0wDatagramLength=0 时停止解析(允许提前终止)。
    • 最后4字节必须全零(强制规范)。
  4. 签名类型

    • NCM0NCM1 可能表示不同NDP版本(需结合Table 3-5),但规范未强制功能差异。

4. 工作流程示例

假设一个NTB-16包含2个以太网帧,其NDP16结构如下(十六进制小端序):

4E 43 4D 30  10 00  00 00  0C 00  00 10  10 00  00 20  00 00  00 00
  • 解析
    • dwSignature = 0x304D434E (“NCM0”)
    • wLength = 0x0010 (16字节)
    • wNextNdpIndex = 0x0000 (保留)
    • 帧1
      • wDatagramIndex[0] = 0x000C (偏移12字节)
      • wDatagramLength[0] = 0x1000 (长度4096字节)
    • 帧2
      • wDatagramIndex[1] = 0x0010 (偏移16字节)
      • wDatagramLength[1] = 0x2000 (长度8192字节)
    • 终止符0x0000 0000

5. 与NTH16的关联

  • NTH16的wNdpIndex 必须指向NDP16的起始位置(如0x000C)。
  • 数据帧存储:以太网帧通常紧接NDP16之后排列(见Figure 3-1)。

6. 设计优势

  • 紧凑高效:16位字段节省空间,适合USB 2.0的64 KiB限制。
  • 灵活扩展:通过动态条目数支持可变数量的以太网帧。
  • 强一致性:严格的长度和终止规则确保解析可靠性。

此结构是NCM在USB 2.0环境下实现多帧批量传输的核心机制。

0 篇笔记 写笔记

NCM数据报文指针-NDP16
NCM数据报指针(NDP)描述了嵌入在NDP中的以太网数据报。与NTH结构一样,定义了两种形式。一种形式(NDP16)用于16位NTB;一种用于32位NTB。这些形式在架构上是等效的,但不同之处在于,许多字段在NDP16中是16位宽,但在NDP32中是32位宽。1. NDP16 核心结构NDP16......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB网络控制通讯NCM
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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