USB零包机制

USB驱动的Class层负责决定数据接收完成的标志,不同设备Class对数据有不同要求。当数据无自然0结尾或等于包大小整数倍时,需通过发送Zero-lengthpackage(zlp)补0。开发中,0包逻辑应在Class层的Function逻辑层处理,底层仅需支持0数据发送。
摘要由CSDN通过智能技术生成

把“USB驱动”拆开理解。底层负责硬件的部分只管收发,确实不要求0包。但是Host确认数据接收完成并不是底层的动作,而是由Host驱动的Class部分决定的。不同的Class,对于USB数据有不同的要求,需要不同的“完成”标志。好多设备Class要求取到“0”为一个命令的结束。USB传输4字节对齐,不能被4整除的数据天然的后面就带“0”。而未满整包的受到长度制约,也可以读完。但如果收到的数据如果恰好等于包大小(USB2.0为512)的整数倍时,数据就正好没有“0”作为结尾。有点类似于C语言里找不到字符串结尾‘\0’的情况。这时就需要Device端通过发0字节包(Zero-length package,zlp)的形式为发送完成的数据补‘0’。

所以在Device端开发的时候,不能把0包的逻辑加到底层,而应该在Class层相对的Function逻辑层进行判断并发送0包,底层只要支持0数据的发送就可以了。

当然底层驱动自己发0也没错,因为大多数设备收到单独的0跟没收一样。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值