STM32 USB學習筆記1--總共有9節

2021/1/4 還發現一些帖子:基於STM32的USB程序開發筆記   usb數據接收和發送分析  USB插入電腦的硬件檢測和枚舉流程

主機環境:Windows 7 SP1

開發環境:MDK5.14

目標板:STM32F103C8T6

開發庫:STM32F1Cube庫和STM32_USB_Device_Library

之前在STM32論壇裏領取過一塊STM32開發板,本來以爲是帶有USB模塊接口的,最後發現NUCLEO裏是沒有把USB模塊外接出來的,所以就自個兒掏錢買了一塊單板,如下圖所示:

單板很簡單,單純是爲了學習一下STM32的USB模塊,之所以選擇這個是因爲它便宜,而且ST官方有提供USB模塊庫方便開發。

USB開發博大精深,比之串口,SPI,I2C來說多了很多東西,一個很簡單的例子就是串口,SPI,I2C都可以使用通用IO口來模擬實現,但USB卻很少有人這麼做。學習USB模塊就要學習USB協議,USB協議從1.1到2.0再到3.0,現在貌似到3.1版本了都,版本更替了這麼多但不影響我們學習,因爲USB協議都是向後兼容的,學習了一個就夠了。STM32F103C8T6的USB模塊實現了USB2.0全速總線,符合USB2.0全速設備的計數規範,支持8個雙向端點等。

USB總線使用兩根線實現差分傳輸D+、D-,這跟485總線類似。因此,在USB總線上同一時刻只能有一個方向上的傳輸。

有關USB2.0協議規範可以從USB官網上下載,重點看第9章節即可,600多頁的文檔從頭看到尾是很枯燥的。當然如果有精力的話,整個規範都看完也是很有好處的。跟USB2.0規範相關的還有很多類規範,在開發時如果有需要再看就可以了。

一、USB器件庫概述

ST官網提供的USB文檔有STM32Cube USB器件庫,以及USB培訓的一些文檔,重點看USB器件庫文檔就好了,因爲我們是把STM32的USB模塊當作從設備,當然如果STM32支持USB主機的話還有另外一個主機庫(不在這裏討論)。通過查看STM32Cube USB器件庫,可以幫助我們快速理解USB模塊的架構,簡化應用開發。STM32CubeUSB設備庫在Cube中所處位置如下:

USB設備庫位於HAL驅動層之上,在開發中我們只需關注USB設備庫即可,不必關注USB設備的HAL驅動,不然USB設備庫就沒有存在的意義了。而且USB設備庫代碼是隻讀的,不需要修改。

設備庫中使用的主要結構體爲設備句柄,其類型爲USBD_HandleTypeDef,我們不必刻意關注USB HAL驅動中USB所使用的數據結構,因爲它們對於我們來說是隱藏的,只需關注設備庫曝露給我們的接口即可,設備庫是和USB2.0協議密切相關的,因此需要熟悉USB2.0文檔有助於我們理解設備庫的工作流程。

USB設備庫目錄分爲兩層:一層爲Core(核心層);另一層爲Class(類層),目錄結構如下:

結構比較清晰,核心層是不需要動的,類層是擴展用的。

USB設備庫中核心層的usbd_conf文件是需要用戶自己實現的,用來配置USB的屬性,其各個文件的作用如下:

其中usbd_req改爲了usbd_ioreq。由表7就可以看出USB2.0規範中第9章很重要。USB器件庫文檔還詳細說明了一下控制端點0,這在USB開發中是一個重要的端點。其作爲默認的控制端點用於接收主機發來的各種請求,請求作爲Setup包發送到設備,請求又分爲標準請求和非標準請求,標準請求在控制端點0上就可處理了,對於非標準請求通過回調函數傳遞給特定類進行進一步處理。

USB設備庫的類層中各個文件作用如下:

其中的usbd_xxx_if_template文件需要由用戶實現,目前跟USB設備庫相關的文件有兩個需要用戶去實現即usbd_conf文件和usbd_xxx_if_template文件。至此USB器件庫的概述說明就完畢了,更多詳細情況查看USB器件庫文檔即可。

二、USB協議概述

USB協議中用到的一些邏輯部件:

端點:數據傳輸的最終對象

管道:主機和設備端點之間數據傳輸的模型

接口:用於描述特定的功能(有一組端點組成)

設備:由一個或多個接口組成

USB傳輸分爲了3層:Packet、Transaction、Transfer,三者是由小到大,關係如下圖:

一次Transfer傳輸分爲幾個Transaction,一次Transaction由幾次Packer組成。

Packet包格式如下:

所有的USB傳輸都是由USB主機發起,這點跟I2C通信有些類似。

USB的傳輸分爲4類:控制傳輸、中斷傳輸、同步傳輸、批量傳輸,由此引申出4類端點類型:控制端點、中斷端點、同步端點、批量端點。

控制傳輸是雙向的,須有IN和OUT兩個方向上的端點號。其他類型的傳輸是單向的。各類傳輸差別不是很大,只是對時間的要求不同。

有關USB協議的大概情況就介紹到這,更多詳情請查閱USB2.0規範以及STM32F103的參考手冊。後面將通過VCP具體示例來分析USB開發。

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