USB网络控制通讯NCM
+ -

NCM数据报文指针-NDP32

2025-07-07 0 0

以下是 NDP32 的完整技术规范解析,重点说明其与 NDP16 的差异和设计意图:


1. NDP32 核心结构

NDP32 由三部分组成,总长度至少为 32字节(且为8的倍数):

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

2. NDP32 字段定义(Table 3-4)

偏移量 字段名 大小 值/格式 说明
0 dwSignature 4字节 0x306D636E0x316D636E NDP32标识签名
- 小端序传输为 0x6E,0x63,0x6D,0x30(”ncm0”)或 0x6E,0x63,0x6D,0x31(”ncm1”)。
- 含义参考 Table 3-5(通常表示NDP版本或类型)。
4 wLength 2字节 总字节数(小端序,≥0x0020) NDP32总长度
- 必须是8的倍数(因每个条目占8字节)。
- 最小为32字节(16字节头部 + 2个条目 + 8字节终止符)。
6 wReserved6 2字节 保留(固定为0) 预留字段:未来扩展用,必须设为0。
8 dwNextNdpIndex 4字节 保留(固定为0) 预留字段:规范未定义链式NDP32,当前必须为0。
12 dwReserved12 4字节 保留(固定为0) 预留字段:未来扩展用,必须设为0。
16 dwDatagramIndex[0] 4字节 数据报偏移量(小端序) 第一个以太网帧的起始位置
- 从NTB起始字节0计算。
- 必须 ≥ 0x0010(跳过16字节的NTH32头部)。
20 dwDatagramLength[0] 4字节 数据报长度(小端序,≥14) 第一个以太网帧的长度
- 以太网帧最小为14字节(MAC头,无载荷)。
- 最大不超过NTB剩余空间(≤4 GiB)。
24 dwDatagramIndex[1] 4字节 数据报偏移量或0(小端序) 第二个以太网帧的起始位置
- 若为0,表示无更多帧(提前终止)。
28 dwDatagramLength[1] 4字节 数据报长度或0(小端序) 第二个以太网帧的长度
- 若为0,表示无更多帧(提前终止)。
dwDatagramIndex[n] 4字节 0(终止条目) 强制终止条件
- 最后8字节必须为全零(dwDatagramIndexdwDatagramLength均为0)。
dwDatagramLength[n] 4字节 0(终止条目)

3. 关键规则与约束

  1. 长度对齐

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

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

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

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

4. 与NDP16的差异对比

特性 NDP32 NDP16
签名 0x306D636E/0x316D636E (“ncm0/1”) 0x304D434E/0x314D434E (“NCM0/1”)
头部长度 16字节 8字节
条目大小 8字节(32位偏移/长度) 4字节(16位偏移/长度)
最小总长度 32字节 16字节
最大帧寻址范围 4 GiB 64 KiB
保留字段 更多预留空间(未来扩展) wNextNdpIndex保留

5. 工作流程示例

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

6E 63 6D 30  20 00  00 00  00 00 00 00  00 00 00 00  10 00 00 00  00 10 00 00  20 00 00 00  00 20 00 00  00 00 00 00  00 00 00 00
  • 解析
    • dwSignature = 0x306D636E (“ncm0”)
    • wLength = 0x0020 (32字节)
    • 所有保留字段 = 0x00000000
    • 帧1
      • dwDatagramIndex[0] = 0x00000010 (偏移16字节)
      • dwDatagramLength[0] = 0x00001000 (长度4096字节)
    • 帧2
      • dwDatagramIndex[1] = 0x00000020 (偏移32字节)
      • dwDatagramLength[1] = 0x00002000 (长度8192字节)
    • 终止符0x00000000 00000000

6. 设计优势

  • 大容量支持:32位偏移和长度支持4 GiB单次传输,适配USB 3.0+高速场景。
  • 扩展性:更多保留字段为未来功能(如链式NDP、元数据扩展)预留空间。
  • 兼容性:与NDP16逻辑一致,仅升级字段宽度,降低解析复杂度。

此结构是NCM在USB 3.0及以上实现超大块数据传输的核心机制,兼顾性能与灵活性。

0 篇笔记 写笔记

NCM数据报文指针-NDP32
以下是 NDP32 的完整技术规范解析,重点说明其与 NDP16 的差异和设计意图:1. NDP32 核心结构NDP32 由三部分组成,总长度至少为 32字节(且为8的倍数):16字节头部:包含签名、长度和保留字段。 1个或多个数据报指针条目(每条目8字节):记录每个以太网帧的位置和长度(......
关注公众号
  • HID人机交互
  • Linux&USB
  • UAC音频
  • TYPE-C
  • USB规范
  • USB大容量存储
  • USB百科
  • USB网络控制通讯NCM
  • USB周边
  • UVC摄像头
  • Windows系统USB
  • 音视频博客
  • 取消
    感谢您的支持,我会继续努力的!
    扫码支持
    扫码打赏,你说多少就多少

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

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