USB主机向OUT批量管道发送ZLP的时机咨询:视频流与PPP模式
USB 2.0 FS批量管道PPP通信的ZLP使用规则
首先明确USB批量传输的核心规范要求:当单次USB传输事务的发送数据总长度恰好是maxPacketSize的整数倍时,必须追加一个零长度数据包(ZLP)——因为设备无法区分“装满的最后一包”和“还有后续数据的满包”,没有ZLP的话,设备会一直等待后续数据包,直到超时,导致数据交付延迟或丢帧。
对应到你和LTE调制解调器的PPP流式传输场景,分两种情况处理:
逐个发送PPP帧(单帧对应单次USB传输):
只要某个PPP帧的字节数刚好是maxPacketSize的整数倍,就必须在该帧的最后一包数据后发送ZLP。比如USB2.0 FS批量包最大是64字节,若某PPP帧正好是64字节,发完这64字节后必须补ZLP,确保调制解调器能识别这是完整的一帧并提交给PPP上层处理。多帧打包成单次USB传输:
如果你把多个连续的PPP帧拼接成一次USB传输事务发送,只需关注整个传输的总字节数:若总长度是maxPacketSize的整数倍,就在最后加ZLP即可,无需为单个长度达标PPP帧单独加ZLP。不过这种方式要注意,PPP本身依赖帧定界符(0x7E)解析边界,只要调制解调器的固件能正确处理跨USB包的PPP帧,就可以这么做。
另外,虽然部分LTE调制解调器可能对ZLP有容错处理,但严格遵循USB规范能避免兼容性问题,建议按规则执行。
内容的提问来源于stack exchange,提问作者user1842354
相关产品推荐
相关产品推荐

