STM32 之六 USB IP(USB模塊)、官方驅動版本 詳解

模塊分類
  在 STM32 衆多系列的 MCU 中,USB模塊並不是相同的,官方稱呼爲USB IP 不同。總的來說可以分文兩大類:USB IP、OTG IP。這兩種 IP又可以進行更進一步的細分,如下圖:

上圖中羅列的芯片並不是很全面,某些新系列的芯片可能與上圖有出入。各IP的主要區別如下:

USB IP:
僅可作爲全速或低速的USB設備;
符合USB2.0中的全速規範
可用資源:8個雙向可配置端點
512字節 的專用數據包緩衝存儲器SRAM
CRC(循環冗餘校驗)生成/校驗,反向不歸零(NRZI)編碼/解碼和位填充
支持四種傳輸類型:對於bulk和同步傳輸,還支持double buffer模式;使得一個buffer用於USB硬件和PC
交換數據的同時,另外一個buffer可被MCU使用
支持USB設備的掛起和喚醒操作(寫控制寄存器),從而停止設備時鐘,以進入低功耗模式

F102/103中的USB和CAN共享512字節的專用SRAM來進行數據收發操作,因此兩個IP不能同時使用
USB+ IP: 是針對USB IP的擴展版本,同樣僅可作爲全速或低速的USB設備,但是ST針對這部分的USB模塊進行了擴展,例如添加了USB低功耗管理等。除了以上USB IP特性外,還有如下:
1024字節 的專用數據包緩衝存儲器SRAM
同步傳輸支持
USB 2.0 Link電源管理支持
電池充電規範修訂版1.2支持
USB連接/斷開功能(USB_DP線上可控嵌入式上拉電阻)

FS OTG IP: 可作爲全速和低速USB主機;可作爲全速USB設備

HS OTG IP: 可作爲高速、全速和低速USB主機;可作爲高速和全速USB設備

無論以上哪種 IP,其全部符合USB 2.0規範。
Packet buffer的使用
  Packet buffer存在於USB IP和USB+ IP中(在 OTG IP中稱爲FIFO),其用法是一致的。每個雙向端點對應兩個packet buffer,分別用於發送和接收。軟件通過packet buffer interface來訪問它們。
  這些packet buffer的位置和大小都可配置,由***buffer描述表***指定 ,Buffer描述表本身也在這塊memory裏,它自己的地址是由USB_BTABLE寄存器指定的。Table裏每個entry由4個半字組成(分別表示雙向EP的接收packet和發送packet的位置和大小) 因此***該table的位置本身必須以8字節對齊***,即USB_BTABLE的低三位全部爲0。
  USB外設硬件不會把本EP的數據溢出到與其相鄰的其他packet 如果收到的數據多於buffer的長度,則只把前length個數據放到該EP對應的Packet buffer中。

在ST給出的驅動中,各端點的初始化情況如下:

硬件發送緩衝區
在初始化時設定各個EP硬件發送緩衝區的起始地址 @ADDRn_TX@硬件緩衝描述表
在準備好要發送的數據後,設置發送長度@COUNTn_TX@硬件緩衝描述表
硬件接收緩衝區
在初始化時設定各個EP硬件接收緩衝區的起始地址 @ADDRn_RX@硬件緩衝描述表
在初始化時設定各個EP硬件接收緩衝區的長度 @COUNTn_RX的高位@硬件緩衝描述表,以允許接收緩衝區的溢出檢測;一般都是接收EP的最大包長
在收到數據併產生ISR中,從硬件接收緩存讀取數據之前先要看收到了多少數據(實際收到的數據不一定填滿接收緩存的)
FIFO的使用
  存在於 OTG IP中。使用相對來說要複雜不少。

驅動程序
  在實際使用中,發現USB驅動有許多bug,需要特殊注意!關於這部分請參考針對USB部分的獨立博文。無論是標準外設庫版還是HAL庫版,ST官方有針對各BUG的獨立說明文檔,這個在做具體移植時需要特殊注意。

標準外設庫版(官方培訓文檔稱爲 Legacy library )
  針對不同的芯片有不同的獨立版本驅動(主要是USB IP是有區別的)。目前有如下幾個:

STSW-STM32046: 主要是針對STM32F105/7, STM32F2 and STM32F4 USB on-the-go Host and device library,對應的說明文檔爲UM1021。下載地址爲 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32046.html ,該版本的驅動 最新版本爲 2.2.1 。
  實現的設備例程:AUDIO、DFU、HID、MSC、VCP、Dual Core(FS IP和HS IP同時工作,分別實現MSC和HID設備)
  實現的主機例程:MSC、HID、Dual Core(FS IP和HS IP同時工作,分別實現MSC和HID主機功能)
  實現的雙角色例程:DRD(根據插入電纜的不同,分別作MSC主機和MSC設備功能)
STSW-STM32121: 主要是針對STM32F10x, STM32L1xx and STM32F3xx USB full speed device library,對應的說明文檔爲UM0424。
下載地址爲 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32121.html ,該版本的驅動 最新版本爲 4.1.0 。
  實現的例程(只能是Device):Audio_Speaker、DFU、MSC、Joystick、Custom_HID、VCP、MSC+HID 複合設備
STSW-STM32092: 主要是針對STM32F0x2xx USB FS device library,對應的說明爲UM1717。下載地址爲 https://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32092.html, 該版本驅動的 最新版本爲 1.0.0 。這裏需要注意,該驅動是針對STM32F0x2xx的,但是可以非常方便的移植到STM32F0xx系列得MCU中。 需要根據具體芯片的時鐘,修改驅動的usb_conf.h和usb_bsp.c。關於具體的移植可參考網友的該文章USB庫STM32F0x2移植到STM32F070筆記
  實現的例程(只能是Device):Audio_Speaker、CCID、MSC、Custom_HID、HID、HID_LPM_test、DFU、Virtual_COM_Port、CDC+HID複合設備、MSC+HID複合設備

  該版本的驅動不但可以非常方便的與之前的標準外設庫一同使用,而且可以非常方便的與 HAL 庫一起使用。 博文STM32之標準外設版USB驅動+MSC(Host)+Fatfs移植 就是使用的HAL外設庫+標準外設庫版的USB驅動的移植。使用標準外設庫版版USB庫的主要原因是,該版本的USB庫經過多年驗證,相對穩定!而在使用HAL版USB庫時,發現了許多BUG。
  以上這些驅動在ST官網一次次改版之後,已經非常難找到!我記得在之前都不需要登陸就可以下載,現在還必須登陸纔可以下載!

HAL庫版(官方培訓文檔稱爲 Cube library )
  從目前的情況來看,ST已經徹底放棄了之前用了很久的標準外設庫,全面轉投 STM32CubeTM。在驅動程序方面,標準外設庫也基本不再維護更新!
  STM32CubeTM系列的驅動相比較標準外設庫來說更將全面,同樣USB驅動也比標準外設庫更加全面。這部分驅動一般很少手動來移植處理,直接使用STM32CubeMX工具來處理。
  不同芯片的USB驅動均包含在針對各芯片的獨立Cube驅動包中。其中的USB驅動或多好少回有點區別,也可能沒有區別。具體可直接查看Cube驅動包的驅動說明。總結一下:

上圖由於比較早,其中部分芯片沒有列出。

配套工具
  ST爲開發者提供了一些常用的工具,具體如下:

PC端VCP驅動(STSW-STM32102): http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF257938
DFU PC端程序(STSW-STM32080): http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF257916
HID PC端程序(STSW-STM32084): http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1533/PF257920
參考
  ST 的各種培訓資料
————————————————
版權聲明:本文爲CSDN博主「ZCShouEXP」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zcshoucsdn/article/details/81257314

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章