STM32 USB HID裝置驅動分析

2021-06-26 01:16:07 字數 2406 閱讀 7368

stm32 usb hid裝置驅動分析

daniellee 2014-9-29

一、usb hid的裝置描述符分析

usb hid的裝置描述符用以下結構定義:

device_property

device_prop device_property =

;這是裝載了多個函式指標的結構體,用於統一管理usb的多屬性及狀態,包括usb初始化、復位、輸入輸出狀態、資料傳輸引數請求、獲得裝置狀態、裝置描述符、配置描述符以及字串描述符。下面按定義順序介紹下其中主要函式的含義:

1.usb

初始化

包括io初始化、控制管腳初始化、底層初始化以及中斷配置。usb初始化完成後就使能了 usb中斷,響應函式為void usb_istr(void),當與主機互動時便會進入中斷進行處理。

該中斷函式處理的中斷主要有三個

①正常中斷型別

istr_ctr

這個中斷是處理usb的正常節點讀取、輸入輸出等。根據索引的節點編號進行不同的處理,當索引為0節點時(通常為控制節點),程式會呼叫in0_process()改變usb控制狀態,呼叫setup0_process()設定usb本地引數,呼叫out0_process()輸出結果。

當索引節點為其他時,呼叫(*pepint_out[epindex-1])();進行相應節點的程式處理。

本程式中1節點為主機傳送本機接收節點ep1_out_callback,通過呼叫這個函式,可以把主機傳送過來的資料通過函式usb_sil_read(ep1_out,usb_receive_buffer)提取出來放在usb_receive_buffer,長度等於或小於64個位元組。這就是接收中斷。

2節點為主機接收節點ep1_in_callback,用於本地usb傳送,本程式不採用中斷傳送的方式,而採用查詢傳送的方式,通過函式usertopmabuffercopy(data,endp1_txaddr, datanum)傳送到主機,封裝為usb_senddata.

通過這幾個過程,主機就可以對本機進行控制、傳送以及接收資料了。

②復位請求中斷

istr_reset

當主機發來復位訊號時,呼叫復位函式customhid_reset對本機進行復位,對端點0、1、2的功能進行設定。

③掛起中斷

istr_susp

進入掛起中斷時呼叫suspend,然後關閉usb時鐘進入低功耗模式。

④喚醒中斷

istr_wkup

呼叫resume,進行狀態恢復。

2.usb

復位customhid_reset

對本機進行復位,對端點0、1、2的功能進行設定。   

3.請求資料相關引數

customhid_data_setup

、customhid_nodata_setup

呼叫customhid_getreportdescriptor, 載入customhid_getconfigdescriptor對usb協議引數進行載入,用於setup0_process()設定過程。

4.customhid_getdevicedescriptor

(裝置描述符)

裝置描述符主要獲得的引數包括usb裝置最大包長度bmaxpacketsize40(一般固定為64個位元組)、協議型別bdeviceprotocol、生產商編號idvendor、產品編號idproduct以及裝置編號bcddevice。用於setup0_process()設定過程。

5.customhid_getconfigdescriptor

(配置描述符)

配置描述符主要包括的引數有對usb供電的配置maxpower、節點數量bnumendpoints、裝置型別binte***ceclass(hid)、介面型別ninte***ceprotocol(0=none,1=keyboard, 2=mouse)、輸入節點屬性、輸出節點屬性等。用於setup0_process()設定過程。

6.customhid_getstringdescriptor

(字串描述)

one_descriptor string_descriptor[4] =,,,

};字串描述符包括以下幾個部分:

1)  customhid_stringlangid 裝置描述符的語言識別碼 langid = 0x0409: u.s.english

2)  customhid_stringvendor 生產商名稱字串

3)  customhid_stringproduct 裝置名稱字串

4)  customhid_stringserial 裝置編號字串

用於setup0_process()設定過程。

歸納起來,可以簡單的說這樣總結,usb hid驅動用乙個資料結構描述了usb的各個屬性,對usb初始化後,便可以進入中斷進行請求處理,0端點用於狀態控制以及引數設定(中斷方式),1端點用於主機傳送本機接收(中斷方式),2節點用於本機傳送主機接收(查詢模式)。

STM32 USB HID裝置驅動分析

一 usb hid的裝置描述符分析 usb hid的裝置描述符用以下結構定義 device property device prop device property 這是裝載了多個函式指標的結構體,用於統一管理usb的多屬性及狀態,包括usb初始化 復位 輸入輸出狀態 資料傳輸引數請求 獲得裝置狀態...

STM32 USB HID通訊移植步驟

很久沒寫過文章了,趁今晚有空出來露一下。最近發現很多人對stm32的usb通訊很感興趣。要將usb的通訊協議搞懂確實是乙個比較漫長的過程。但是usb的hid通訊無論是上位機的設計還是stm32程式的程式設計都非常的簡單。只是我想很多人都不知道而已。這篇文章的目的是讓大家以最短的時間將usb加到你的裝...

STM32 USB HID通訊移植步驟

stm32 usb hid通訊移植步驟 很久沒寫過文章了,趁今晚有空出來露一下。最近發現很多人對stm32的usb通訊很感興趣。要將usb的通訊協議搞懂確實是乙個比較漫長的過程。但是usb的hid通訊無論是上位機的設計還是stm32程式的程式設計都非常的簡單。只是我想很多人都不知道而已。這篇文章的目...