docs: update rst

This commit is contained in:
sakumisu
2024-09-11 22:21:44 +08:00
parent 7ec7891fe4
commit 0371bb921c
5 changed files with 68 additions and 6 deletions

View File

@@ -11,6 +11,11 @@ USB 知识点拓展
对于软件分包来说,一次发送的长度即使是 16K **内部也是通过软件分包的,在这种情况下,发送长度的多少不会对速度有任何提升**
对于硬件分包来说,发送的长度会影响速度,因为硬件分包是通过 DMA 来进行的, **一次发送的长度越大DMA 的效率就越高,速度也就越快**。(当然,其他协议栈虽然使用了 dma但是部分代码实现还是按照一个包进行等于没用这也是速度低的一个原因
什么是短包
----------------
在上面我们讲了分包之后,短包就是分包的最后一个包(并且长度小于 EP MPS.比如发送 129 字节的数据,那么 USB 会按照 64 + 64 + 1 的形式传输最后一个包是1个字节这1个字节就是短包。
什么是 ZLP
-------------
@@ -20,5 +25,8 @@ ZLP顾名思义零长度数据包是 USB 设备在数据传输结束时
.. caution:: ZLP 功能仅限于 CONTROL 和 BULK 传输
比如 cdc acm本身是没有协议的所以我们发送需要 ZLP接收也需要 ZLP但是又由于 PC 的 USB 主机驱动默认 **接收不开 ZLP**, 因此,我们 **接收的长度必须设置为 EP MPS**,通常为 64 或者 512
而如果接收的数据不设置成 EP MPS ,就会带来数据接收不完成的问题,比如设置成 2048,如果主机发送的是 512/1025/1536则 USB IP 不会进入完成状态,因为完成的条件是数据等于 2048 或者最后一个包是短包。
再比如 MSC MSC 的逻辑是 CMD + DATA + STATUS 的流程CMD 阶段包含了要接收或者发送的数据长度,所以不需要 ZLP 功能。
而如果接收的数据不设置成 EP MPS ,就会带来数据接收不完成的问题,比如设置成 2048,如果主机发送的是 512/1024/1536则 USB IP 不会进入完成状态,因为完成的条件是数据等于 2048 或者最后一个包是短包。
再比如 MSC MSC 的逻辑是 CMD + DATA + STATUS 的流程CMD 阶段包含了要接收或者发送的数据长度,所以不需要 ZLP 功能。
什么是帧与微帧
----------------