diff --git a/docs/source/api/api_device.rst b/docs/source/api/api_device.rst index 71e10514..64dfe598 100644 --- a/docs/source/api/api_device.rst +++ b/docs/source/api/api_device.rst @@ -478,18 +478,6 @@ usbd_video_mjpeg_payload_fill - **out_len** 输出实际要发送的长度大小 - **return** 返回 usb 按照 ``dwMaxPayloadTransferSize`` 大小要发多少帧 -usbd_video_mjpeg_payload_header_toggle -"""""""""""""""""""""""""""""""""""""""""""""""""""""""" - -``usbd_video_mjpeg_payload_header_toggle`` 用来对每一帧图像数据要发送时进行翻转,并保持到一帧图像数据发送完成。 - -.. code-block:: C - - void usbd_video_mjpeg_payload_header_toggle(uint8_t *output, uint32_t packets); - -- **output** 要翻转的 usb 缓冲区,该缓冲区是 ``usbd_video_mjpeg_payload_fill`` 中的 ``output`` -- **packets** USB 发送的帧个数 - DFU ----------------- diff --git a/docs/source/quick_start/bl702.rst b/docs/source/quick_start/bl702.rst index a459efe5..8d83e55a 100644 --- a/docs/source/quick_start/bl702.rst +++ b/docs/source/quick_start/bl702.rst @@ -1,2 +1,6 @@ 基于 BL702 开发指南 ========================= + +BL702 USB 的开发主要使用 bl_mcu_sdk,关于 bl_mcu_sdk 的环境搭建,参考 `bl_mcu_sdk 环境搭建 `_。 + +USB 的相关应用位于 `examples/usb` 目录下,环境搭建完成后,即可编译使用。 \ No newline at end of file diff --git a/docs/source/usb/img/24.png b/docs/source/usb/img/24.png new file mode 100644 index 00000000..fec98d49 Binary files /dev/null and b/docs/source/usb/img/24.png differ diff --git a/docs/source/usb/img/25.png b/docs/source/usb/img/25.png new file mode 100644 index 00000000..9bcaf151 Binary files /dev/null and b/docs/source/usb/img/25.png differ diff --git a/docs/source/usb/img/26.png b/docs/source/usb/img/26.png new file mode 100644 index 00000000..d439b7c4 Binary files /dev/null and b/docs/source/usb/img/26.png differ diff --git a/docs/source/usb/img/27.png b/docs/source/usb/img/27.png new file mode 100644 index 00000000..1047da1b Binary files /dev/null and b/docs/source/usb/img/27.png differ diff --git a/docs/source/usb/img/28.png b/docs/source/usb/img/28.png new file mode 100644 index 00000000..95b760c5 Binary files /dev/null and b/docs/source/usb/img/28.png differ diff --git a/docs/source/usb/img/29.png b/docs/source/usb/img/29.png new file mode 100644 index 00000000..09538d16 Binary files /dev/null and b/docs/source/usb/img/29.png differ diff --git a/docs/source/usb/img/30.png b/docs/source/usb/img/30.png new file mode 100644 index 00000000..d3014f95 Binary files /dev/null and b/docs/source/usb/img/30.png differ diff --git a/docs/source/usb/img/9.png b/docs/source/usb/img/9.png index bb57645e..a8b5b2a3 100644 Binary files a/docs/source/usb/img/9.png and b/docs/source/usb/img/9.png differ diff --git a/docs/source/usb/usb_basic.rst b/docs/source/usb/usb_basic.rst index 052b4a3d..a4c391cb 100644 --- a/docs/source/usb/usb_basic.rst +++ b/docs/source/usb/usb_basic.rst @@ -183,22 +183,77 @@ PID 由一个四位数据包类型字段和一个四位校验字段组成,占 数据字段 ^^^^^^^^^^^^^^^^^^^^^^^^ +根据传输类型不同,数据字段中的数据长度也是不定的,从 0-1024不等。 + +.. figure:: img/24.png + CRC 字段 ^^^^^^^^^^^^^^^^^^^^^^^^ +循环冗余校验(CRC)用于保护令牌和数据包中的所有非PID字段。PID不包含在包含CRC的分组的CRC校验中。 在执行比特填充之前,在发送器中的各个字段上生成所有CRC。 类似地,在去除填充位之后,在接收器中对CRC进行解码。令牌和数据包CRC为所有单比特和双比特错误提供100%的覆盖。 CRC失败被认为表示一个或多个受保护字段已损坏并导致接收器忽略这些字段,并且在大多数情况下,忽略整个数据包。 + +.. figure:: img/24.png + +- 令牌CRC +为令牌提供五位CRC字段,并覆盖IN,SETUP和OUT令牌的ADDR和ENDP字段或SOF令牌的时间戳字段。 PING和SPLIT特殊令牌还包括一个五位CRC字段。 + +生成多项式为: G(X)= X^5 + X^2 + 1 +表示该多项式的二进制位模式是00101B。 如果接收到所有令牌位而没有错误,则接收器处的五位校验和将为01100B。 + +- 数据CRC +数据CRC是应用于数据分组的数据字段的16位多项式。 + +生成多项式是:G(X)= X^16 + X^15 + X^2 + 1 +表示该多项式的二进制位模式是1000000000000101B。 如果没有错误地接收到所有数据和CRC位,则16位校验和将为1000000000001101B。 + USB 包 --------------------- +包由字段组成,根据 PID 类型,包分为四大类:令牌包、数据包、握手包、特殊包。此节内容见官方 8.4.1。 + +.. figure:: img/25.png + +算上 SOP,则如图,组成一个完整的包。 + +.. figure:: img/26.png + 令牌包 ^^^^^^^^^^^^^^^^^^^^^^^^ +令牌包分为:SETUP、IN、OUT、SOF,其中 SETUP、IN、OUT的字段组成一样,如图: + +.. figure:: img/27.png + +- PID 字段:定义了数据传输方向为USB主机到USB设备。 +- ADDR 字段:指明了USB设备地址。 +- ENDP 字段:指明了接收数据的端点号。 +- CRC 字段:用于ADDR字段和ENDP字段进行循环冗余校验。 + +SOF 包的字段组成,如图: + +.. figure:: img/28.png + +- PID 字段:定义了数据传输方向为USB主机到USB设备。 +- 帧号 字段:指明了USB传输的帧号,其11位。 +- CRC 字段:用于ADDR字段和ENDP字段进行循环冗余校验。 + 数据包 ^^^^^^^^^^^^^^^^^^^^^^^^ +.. figure:: img/29.png + +- PID 字段:用于指明不同的数据包类型。支持 4 种数据包,分别为: DATAO 、 DATA1 、DATA2 和MDATA。 +- 数据 字段:其中包含了传输的数据。其数据的大小根据数据传输类吧和川户需要而定。根据 USB 协议的规定,对于低速 USB 数据传输, 最大长度为8字节对于全速SB 数据传输,其最大长度为 1023 字节;对于高速 USB 数据传输,数据最大长度为 1024 。 +- CRC 字段:这里使用 16 位的循环冗余校验来对数据字段进行保护。 + 握手包 ^^^^^^^^^^^^^^^^^^^^^^^^ -特殊数据包 +握手包由8位的PID构成,用于数据传输的末位报告本次数据传输的状成。握手包之后使是整个事务处理的结束信号EOP. + +.. figure:: img/30.png + +特殊包 ^^^^^^^^^^^^^^^^^^^^^^^^ USB 事务 diff --git a/docs/source/usb/usb_desc.rst b/docs/source/usb/usb_desc.rst index 25e4b08e..b954cefc 100644 --- a/docs/source/usb/usb_desc.rst +++ b/docs/source/usb/usb_desc.rst @@ -1,2 +1,26 @@ USB 描述符 -=========================== \ No newline at end of file +=========================== + +设备描述符 +--------------------- + +配置描述符 +--------------------- + +接口描述符 +--------------------- + +端点描述符 +--------------------- + +字符串描述符 +--------------------- + +接口关联描述符 +--------------------- + +设备限定描述符 +--------------------- + +其他速度描述符 +---------------------