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程式的程式設計都非常的簡單。只是我想很多人都不知道而已。這篇文章的目...