HID通讯可以使用中断端点做IN/OUT,这种方式固件实现起来比较简单,清晰,没有太多的限制。
但如果用控制端点做IN/OUT,除了上一讲提到的注意packet的处理顺序外,还需要注意:
1、HID描述符中规定了每个transfer所能发送的最大长度,这个长度的设置需要综合考虑实际应用中所要传输的数据量。
1.1 如果这个长度过大(比如256),但每次实际需要传输的数据量又很小(比如8字节),那就相当于每次PC都需要向设备发送248(=256-8)个无用的数据,造成带宽的极大浪费。
1.2 如果这个长度过小(比如8),但每次实际需要传输的数据量又相对较大(比如128字节),需要16(=128/8)次transfer才能完成,而每次transfer都需要经历setup/data/status三个stage,也会造成带宽的浪费。
2、上述1.2情况下,可以通过数据级联的协议来组织数据。
3、使用控制传输实现的HID协议,难以在固件上实现对PC应用程序多进程(或多线程)的支持。如果再加上1.2情况下需要级联数据,那就是不可能支持了。在这种情况下,就需要在PC机上增加互锁机制来支持多进程(或多线程),否则就会造成设备执行错误的命令,应用程序收到混乱的数据。