ZHCU950I October 2014 – November 2023 DLPC900
USB 1.1 HID 协议具有图 1-4 中所示的结构。主机必须构建字节流,它由报告 ID、标头和有效载荷组成。以下是对这三个部分的描述。
报告 ID:报告 ID 始终设置为 0x0,并且始终是所有传输的前导字节。
标头:标头包含四个字节。
1) 标记字节:图 1-4 展示了这些字节,并且节 1.2.2和节 1.2.3中的读取和写入示例描述了这些字节。
2) 序列字节:序列字节可以是回滚计数器,主要在主机需要 DLPC900 给予响应时使用。 DLPC900 使用主机发送的相同序列字节进行响应。然后,主机可以将由它发送的命令中的序列字节与 DLPC900 响应中的序列字节相匹配。
3) 长度:长度为两个字节,这仅表示有效载荷中的数据字节数。
有效载荷字节:有效载荷字节由 USB 命令后跟与该命令相关联的数据组成。
在写入操作期间,主机将整个事务序列传输到 DLPC900,DLPC900 执行与写入命令相关联的操作。在读取操作期间,主机将整个事务序列传输到 DLPC900,DLPC900 执行与读取命令相关联的操作。因此,写入和读取事务均被视为写入到 DLPC900,其中主机对 HID 驱动程序执行 API 级别 Writefile。不同之处在于,在 DLPC900 执行读取操作时,DLPC900 将响应放入其内部缓冲区,并等待主机向 HID 驱动程序执行 API 级别 Readfile,然后 DLPC900 才会将响应数据传输回主机。
DLPC900 内部命令缓冲区最大为 512 个字节,这些字节由写入和读取操作共享;因此,每当主机执行读取操作时,必须接着向 HID 驱动程序发送 Readfile,以便获取响应,否则响应数据会被下一个写入或读取操作覆盖。
HID 协议限制为双向 64 字节传输。因此,大于 64 个字节的命令需要多次传输。每当使用此类命令时,只有第一次传输需要标头和 USB 命令。报告 ID 始终是所有传输的前导字节。图 1-5 展示了包含 76 个字节并需要两次传输的写入命令示例。请注意,第一次传输包含 65 个字节,这是正确的。主机硬件级别 HID 驱动程序在通过 USB 总线传输或接收数据之前提取报告 ID。