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的倍数):
- 8字节头部:包含签名、长度和保留字段。
- 1个或多个数据报指针条目(每条目4字节):记录每个以太网帧的位置和长度。
- 终止条目(4字节全零):标记指针表的结束。
2. NDP16 字段定义(Table 3-3)
偏移量 | 字段名 | 大小 | 值/格式 | 说明 |
---|---|---|---|---|
0 | dwSignature |
4字节 | 0x304D434E 或 0x314D434E |
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字节必须为全零( wDatagramIndex 和wDatagramLength 均为0)。 |
… | wDatagramLength[n] |
2字节 | 0(终止条目) |
3. 关键规则与约束
长度对齐
wLength
必须是4的倍数,且 ≥16(如16, 20, 24…)。- 计算条目数:
(wLength - 8) / 4 - 1
(减去头部和终止条目)。
数据报定位
- 每个
wDatagramIndex
必须指向有效的以太网帧起始位置,且不重叠。 - 帧长度
wDatagramLength
必须 ≥14(最小以太网帧),且 ≤ NTB剩余空间。
- 每个
终止条件
- 遇到
wDatagramIndex=0
或wDatagramLength=0
时停止解析(允许提前终止)。 - 最后4字节必须全零(强制规范)。
- 遇到
签名类型
NCM0
或NCM1
可能表示不同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环境下实现多帧批量传输的核心机制。