README.rst 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. USB Stack
  2. =======================
  3. USB Stack 是一个跨平台的、用于嵌入式 MCU 的 USB 协议栈。其中 DEVICE 协议栈对标准设备请求、CLASS 请求、VENDOR 请求规范了一套统一的函数框架,从而对复合设备或者使用自定义设备类时,能够在极短的时间内进行添加和移植。同时提供了一套标准的 dcd porting 接口,供给不同的 MCU 使用,因此,通用性也非常高。此外在代码优美方面,以及内存占用方面也是相当出色。USB DEVICE 协议栈当前具有以下功能:
  4. - 支持 USB2.0 全速和高速设备
  5. - 支持端点中断注册功能,porting 给用户自己处理中断里的数据
  6. - 支持复合设备
  7. - 支持 Communication Class (CDC)
  8. - 支持 Human Interface Device (HID)
  9. - 支持 Custom human Interface Device (HID)
  10. - 支持 Mass Storage Class (MSC)
  11. - 支持 USB VIDEO CLASS (UVC)
  12. - 支持 USB AUDIO CLASS (UAC)
  13. - 支持 vendor 类 class
  14. - 支持 WINUSB1.0、WINUSB2.0
  15. 当前支持的芯片(当然,是个 有 USB 的 mcu 都支持)以及 USB IP如下:
  16. - STM32
  17. - MicroChip
  18. - Kinetis
  19. - Synopsys USB IP
  20. - faraday USB IP
  21. - 开源 USB IP `<https://github.com/www-asics-ws/usb2_dev>`_
  22. .. note:: USB DEVICE 协议栈的代码实现过程参考 `<https://www.bilibili.com/video/BV1Ef4y1t73d>`_
  23. USB DEVICE 协议栈 porting 接口
  24. -------------------------------
  25. USB DEVICE 协议栈 porting 接口在 ``usb_stack/common/usb_dc.h`` 文件中声明,用户根据自己的 MCU 实现以下接口
  26. - ``usbd_set_address`` 调用 :ref:`usb_dc_set_address`
  27. - ``usbd_ep_open`` 调用 :ref:`usb_dc_ep_open`
  28. - ``usbd_ep_close`` 调用 :ref:`usb_dc_ep_close`
  29. - ``usbd_ep_set_stall`` 调用 :ref:`usb_dc_ep_set_stall`
  30. - ``usbd_ep_clear_stall`` 调用 :ref:`usb_dc_ep_clear_stall`
  31. - ``usbd_ep_is_stalled`` 调用 :ref:`usb_dc_ep_is_stalled`
  32. - ``usbd_ep_write`` 调用 :ref:`usb_dc_ep_write`
  33. - ``usbd_ep_read`` 调用 :ref:`usb_dc_ep_read`
  34. USB DEVICE 控制器接口
  35. -------------------------------
  36. **usb_dc_init**
  37. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  38. ``usb_dc_init`` 用来注册 USB 设备和初始化 USB 硬件相关寄存器,注册 usb 中断回调函数。在注册之前需要打开对应 USB 设备的宏定义,例如定义宏 ``BSP_USING_USB`` 方可使用 USB 设备。
  39. .. code-block:: C
  40. struct device *usb_dc_init(void)
  41. {
  42. usb_dc_register(USB_INDEX, "usb", DEVICE_OFLAG_RDWR);
  43. usb = device_find("usb");
  44. device_set_callback(usb, usb_dc_event_callback);
  45. device_open(usb, 0);
  46. return usb;
  47. }
  48. - device 返回 USB 设备句柄
  49. .. note::中断处理函数则是调用 ``usbd_event_notify_handler``
  50. USB DEVICE 应用层接口
  51. ------------------------
  52. USB DEVICE 通用接口
  53. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  54. **usbd_desc_register**
  55. """"""""""""""""""""""""""""""""""""
  56. **usbd_msosv1_desc_register**
  57. """"""""""""""""""""""""""""""""""""
  58. **usbd_class_add_interface**
  59. """"""""""""""""""""""""""""""""""""
  60. **usbd_interface_add_endpoint**
  61. """"""""""""""""""""""""""""""""""""
  62. **usb_device_is_configured**
  63. """"""""""""""""""""""""""""""""""""
  64. USB Device CDC 类接口
  65. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  66. USB Device MSC 类接口
  67. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  68. USB Device HID 类接口
  69. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  70. USB Device AUDIO 类接口
  71. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  72. USB Device VIDEO 类接口
  73. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^