docs: update rst
This commit is contained in:
@@ -19,14 +19,17 @@ USB 知识点拓展
|
||||
什么是 ZLP
|
||||
-------------
|
||||
|
||||
ZLP,顾名思义,零长度数据包,是 USB 设备在数据传输结束时,如果数据长度正好是最大包长度的整数倍,那么就会发送一个 ZLP 数据包,用来告诉主机数据传输结束。
|
||||
当我们发送或者接收的时候,如果没有相关的协议告诉我们接收或者发送的长度,这种情况下我们就需要 ZLP 功能。
|
||||
ZLP,顾名思义,零长度数据包,也就是数据长度为0 的短包。是 USB 设备在数据传输结束时,如果数据长度正好是最大包长度的整数倍,那么就需要发送一个 ZLP 数据包,用来告诉对方数据传输结束。
|
||||
|
||||
.. caution:: ZLP 功能仅限于 CONTROL 和 BULK 传输
|
||||
|
||||
比如 cdc acm,本身是没有协议的,所以我们发送需要 ZLP,接收也需要 ZLP,但是又由于 PC 的 USB 主机驱动默认 **接收不开 ZLP**, 因此,我们 **接收的长度必须设置为 EP MPS**,通常为 64 或者 512,
|
||||
而如果接收的数据不设置成 EP MPS ,就会带来数据接收不完成的问题,比如设置成 2048,如果主机发送的是 512/1024/1536,则 USB IP 不会进入完成状态,因为完成的条件是数据等于 2048 或者最后一个包是短包。
|
||||
再比如 MSC ,MSC 的逻辑是 CMD + DATA + STATUS 的流程,CMD 阶段包含了要接收或者发送的数据长度,所以不需要 ZLP 功能。
|
||||
什么时候算中断完成
|
||||
--------------------
|
||||
|
||||
什么是帧与微帧
|
||||
----------------
|
||||
从机接收:接收的长度与设置的长度相等;接收的最后一个包为短包。
|
||||
从机发送:发送的长度与设置的长度相等,如果发送的长度是 EP MPS 的整数倍,需要再发送一个 ZLP(仅限 control 和 bulk 传输)。
|
||||
|
||||
主机接收:同从机接收
|
||||
主机发送:发送的长度与设置的长度相等
|
||||
|
||||
.. note:: 对于从机接收,并且是 bulk 传输,接收长度通常设计为 EP MPS,以下三种情况可以修改为多个 EP MPS: 固定长度;自定义协议并携带长度(例如 MSC); 主机手动发送 ZLP 或者短包(例如 RNDIS)
|
||||
Reference in New Issue
Block a user