porting_usbip.rst 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. USB IP 差别说明
  2. ==============================
  3. 本节主要对已经支持的 USB IP 在不同厂家上的一些差别说明并进行校对。欢迎补充。
  4. FSDEV
  5. --------------------------
  6. FSDEV 仅支持从机。这个 ip 不同厂家基本都是基于标准的 usb 寄存器,所以用户使用时,仅需要修改 `USBD_IRQHandler` 、 `USB_BASE` 、 `USB_NUM_BIDIR_ENDPOINTS` 即可。有些芯片可能还需要配置 `PMA_ACCESS` 的值,默认为2。下表为具体芯片相关宏的修改值:
  7. .. list-table::
  8. :widths: 30 20 30 30 30
  9. :header-rows: 1
  10. * - 芯片
  11. - USBD_IRQHandler
  12. - USB_BASE
  13. - USB_NUM_BIDIR_ENDPOINTS
  14. - PMA_ACCESS
  15. * - STM32F0
  16. - USB_IRQHandler
  17. - 0x40005C00
  18. - 8
  19. - 2
  20. * - STM32F1
  21. - USB_LP_CAN1_RX0_IRQHandler
  22. - 同上
  23. - 同上
  24. - 同上
  25. * - STM32F3
  26. - USB_LP_CAN_RX0_IRQHandler
  27. - 同上
  28. - 同上
  29. - 同上
  30. * - STM32L0
  31. - USB_IRQHandler
  32. - 同上
  33. - 同上
  34. - 同上
  35. * - STM32L1
  36. - USB_LP_IRQHandler
  37. - 同上
  38. - 同上
  39. - 同上
  40. * - STM32L4
  41. - USB_IRQHandler
  42. - 同上
  43. - 同上
  44. - 同上
  45. MUSB
  46. --------------------------
  47. MUSB IP 支持主从,并且由 **mentor** 定义了一套标准的寄存器偏移,所以如果是走的标准,则从机仅需要修改 `USBD_IRQHandler` 、 `USB_BASE` 、 `USB_NUM_BIDIR_ENDPOINTS` ,主机仅需要修改 `USBH_IRQHandler` 、 `USB_BASE` 以及 `CONIFG_USB_MUSB_EP_NUM` 即可。如果非标准,则需要实现以下宏的偏移,以标准为例:
  48. .. code-block:: C
  49. #define MUSB_FADDR_OFFSET 0x00
  50. #define MUSB_POWER_OFFSET 0x01
  51. #define MUSB_TXIS_OFFSET 0x02
  52. #define MUSB_RXIS_OFFSET 0x04
  53. #define MUSB_TXIE_OFFSET 0x06
  54. #define MUSB_RXIE_OFFSET 0x08
  55. #define MUSB_IS_OFFSET 0x0A
  56. #define MUSB_IE_OFFSET 0x0B
  57. #define MUSB_EPIDX_OFFSET 0x0E
  58. #define MUSB_IND_TXMAP_OFFSET 0x10
  59. #define MUSB_IND_TXCSRL_OFFSET 0x12
  60. #define MUSB_IND_TXCSRH_OFFSET 0x13
  61. #define MUSB_IND_RXMAP_OFFSET 0x14
  62. #define MUSB_IND_RXCSRL_OFFSET 0x16
  63. #define MUSB_IND_RXCSRH_OFFSET 0x17
  64. #define MUSB_IND_RXCOUNT_OFFSET 0x18
  65. #define MUSB_IND_TXTYPE_OFFSET 0x1A
  66. #define MUSB_IND_TXINTERVAL_OFFSET 0x1B
  67. #define MUSB_IND_RXTYPE_OFFSET 0x1C
  68. #define MUSB_IND_RXINTERVAL_OFFSET 0x1D
  69. #define MUSB_FIFO_OFFSET 0x20
  70. #define MUSB_DEVCTL_OFFSET 0x60
  71. #define MUSB_TXFIFOSZ_OFFSET 0x62
  72. #define MUSB_RXFIFOSZ_OFFSET 0x63
  73. #define MUSB_TXFIFOADD_OFFSET 0x64
  74. #define MUSB_RXFIFOADD_OFFSET 0x66
  75. #define MUSB_TXFUNCADDR0_OFFSET 0x80
  76. #define MUSB_TXHUBADDR0_OFFSET 0x82
  77. #define MUSB_TXHUBPORT0_OFFSET 0x83
  78. #define MUSB_TXFUNCADDRx_OFFSET 0x88
  79. #define MUSB_TXHUBADDRx_OFFSET 0x8A
  80. #define MUSB_TXHUBPORTx_OFFSET 0x8B
  81. #define MUSB_RXFUNCADDRx_OFFSET 0x8C
  82. #define MUSB_RXHUBADDRx_OFFSET 0x8E
  83. #define MUSB_RXHUBPORTx_OFFSET 0x8F
  84. #define USB_TXADDR_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx)
  85. #define USB_TXHUBADDR_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 2)
  86. #define USB_TXHUBPORT_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 3)
  87. #define USB_RXADDR_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 4)
  88. #define USB_RXHUBADDR_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 6)
  89. #define USB_RXHUBPORT_BASE(ep_idx) (USB_BASE + MUSB_TXFUNCADDR0_OFFSET + 0x8 * ep_idx + 7)
  90. 下表为具体芯片从机相关宏的修改值:
  91. .. list-table::
  92. :widths: 30 30 30 30
  93. :header-rows: 1
  94. * - 芯片
  95. - USBD_IRQHandler
  96. - USB_BASE
  97. - USB_NUM_BIDIR_ENDPOINTS
  98. * - ES32F3xx
  99. - USB_INT_Handler
  100. - 0x40086400
  101. - 5
  102. * - MSP432Ex
  103. - 同上
  104. - 0x40050000
  105. - 同上
  106. * - F1C100S
  107. - USB_INT_Handler
  108. - 0x01c13000
  109. - 4
  110. 下表为具体芯片主机相关宏的修改值:
  111. .. list-table::
  112. :widths: 30 30 30 30
  113. :header-rows: 1
  114. * - 芯片
  115. - USBH_IRQHandler
  116. - USB_BASE
  117. - CONIFG_USB_MUSB_EP_NUM
  118. * - ES32F3xx
  119. - USB_INT_Handler
  120. - 0x40086400
  121. - 5
  122. * - MSP432Ex
  123. - 同上
  124. - 0x40050000
  125. - 同上
  126. * - F1C100S
  127. - USB_INT_Handler
  128. - 0x01c13000
  129. - 4
  130. SYNOPSYS
  131. --------------------------
  132. - STM32 芯片中,H7 的 FS 控制器(使用 PA11/PA12)基地址(**0x40080000UL**)与其他芯片 FS 控制器基地址(**0x50000000UL**)不一样, HS 基地址都是一样的。其次是关于 **VBUS_SENSE** 的控制,虽然寄存器相同,但是个别芯片对该 bit 操作 0 和操作 1 是相反的(估计是硬件设计问题),此问题会影响枚举,所以需要根据芯片控制是否使能 **CONFIG_USB_SYNOPSYS_NOVBUSSEN**。
  133. 不可靠的统计是新款 F4、F7、H7、L4 都是需要使能的。
  134. .. code-block:: C
  135. /* Deactivate VBUS Sensing B */
  136. USBx->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
  137. USBx->GCCFG |= USB_OTG_GCCFG_NOVBUSSENS;
  138. 两者都是关闭作用,并且其中 USB_OTG_GCCFG_NOVBUSSENS 和 USB_OTG_GCCFG_VBDEN 都是 21 bit