NCM传输头-NTH32
2025-07-07
0
0
以下是 NTH32 的完整技术规范解析,采用结构化表格呈现,并与 NTH16 对比关键差异:
NTH32 结构定义(总长度:16字节)
偏移量 | 字段名 | 大小 | 值/格式 | 说明 | 与NTH16差异 |
---|---|---|---|---|---|
0 | dwSignature |
4字节 | 0x686D636E (小端序:ncmh ) |
NTB32标识签名: - 固定魔数,标识NTB-32结构。 - 小端序传输为 0x6E,0x63,0x6D,0x68 (ASCII “ncmh”)。 |
签名不同(ncmh vs NCMH ) |
4 | wHeaderLength |
2字节 | 0x0010 (小端序) |
NTH32头部长度: - 固定为16字节(0x10),比NTH16多4字节。 |
长度增加(0x0C → 0x10) |
6 | wSequence |
2字节 | 递增数字(小端序) | 序列号: - 功能与NTH16完全相同: - 复位后从0开始递增。 - 主要用于调试,接收端可选校验。 |
无变化 |
8 | dwBlockLength |
4字节 | NTB总字节数(小端序) | NTB块总长度: - 扩展为32位,支持最大4 GiB传输(NTH16仅支持64 KiB)。 - 其他规则与NTH16一致: - 必须 ≤ dwNtbInMaxSize /dwNtbOutMaxSize 。- 0x00000000 表示短包终止(需谨慎使用)。- 对齐要求相同(不发送冗余ZLP)。 |
16位 → 32位(容量提升) |
12 | dwNdpIndex |
4字节 | NDP32偏移量(小端序) | 第一个NDP32的偏移量: - 扩展为32位,支持更大NTB寻址。 - 约束: - 必须 ≥ 0x0010 (跳过16字节的NTH32头部)。- 必须4字节对齐。 |
16位 → 32位(偏移量扩展) |
关键差异对比(NTH32 vs NTH16)
特性 | NTH32 | NTH16 |
---|---|---|
签名 | 0x686D636E (“ncmh”) |
0x484D434E (“NCMH”) |
头部长度 | 16字节 (0x0010 ) |
12字节 (0x000C ) |
块长度字段 | 32位 (dwBlockLength ) |
16位 (wBlockLength ) |
NDP偏移字段 | 32位 (dwNdpIndex ) |
16位 (wNdpIndex ) |
最大NTB容量 | 4 GiB | 64 KiB |
适用场景 | USB 3.0 SuperSpeed及以上 | USB 2.0 High Speed |
注意事项
短包终止(
dwBlockLength = 0x00000000
)- 与NTH16相同,需谨慎使用以避免主机与设备状态不同步。
- 典型场景:动态调整传输块大小以降低延迟。
对齐要求
dwNdpIndex
必须4字节对齐(如0x10, 0x14, 0x18…)。- NDP32结构需按32位对齐(参见NDP32规范)。
调试支持
wSequence
字段虽非强制,但建议在开发阶段启用,尤其对于高速大块传输(更易出现乱序)。
示例数据流(小端序)
假设一个NTB-32的NTH32头部如下(十六进制):
6E 63 6D 68 10 00 02 00 00 00 01 00 10 00 00 00
- 解析:
dwSignature
=0x6E636D68
(“ncmh”)wHeaderLength
=0x0010
(16字节)wSequence
=0x0002
(序列号2)dwBlockLength
=0x00010000
(NTB总长65,536字节)dwNdpIndex
=0x00000010
(第一个NDP32紧接NTH32之后)
关联设计要点
- NDP32结构:需配合32位偏移量(
dwDatagramIndex
)定位以太网帧。 - 性能优化:
- 大块传输(4 GiB)减少USB协议开销,适合高速设备(如5G调制解调器)。
- 零拷贝接收:通过NDP32直接访问帧数据,无需内存重组。
- 兼容性:主机根据设备能力动态选择NTB-16或NTB-32格式。
此设计确保了NCM在USB 3.0及更高版本下的高效数据传输,同时保持向后兼容性。