国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于STM32的USB HID接口多功能控制器設(shè)計(jì)

2020-09-14 04:33:22王曉東
唐山學(xué)院學(xué)報(bào) 2020年3期
關(guān)鍵詞:枚舉描述符固件

王曉東

(唐山學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,河北 唐山 063000)

1 概述

USB總線協(xié)議是由Intel,Compaq,Microsoft等七家公司共同制定的串行接口標(biāo)準(zhǔn)[1],協(xié)議內(nèi)部包含完善的主從機(jī)通訊機(jī)制,支持從高速視頻傳輸?shù)降退俨樵儌鬏敹喾N通訊模式,傳輸速率高,從USB1.1協(xié)議發(fā)展到USB3.0協(xié)議,速度已達(dá)到5.0 Gbps,而且支持設(shè)備的帶電熱插拔,因此支持USB總線協(xié)議的設(shè)備使用起來十分方便,被廣泛應(yīng)用在通用計(jì)算機(jī)和邊緣計(jì)算領(lǐng)域。如文獻(xiàn)[2]作者使用Windows的DDK開發(fā)工具,基于USB總線的HID人機(jī)接口協(xié)議,開發(fā)了一種USB接口自動(dòng)測試設(shè)備。但對于工業(yè)系統(tǒng)開發(fā)者和廠商來說,USB驅(qū)動(dòng)程序開發(fā)過程十分復(fù)雜,在Windows環(huán)境下需要使用WDK或者DDK開發(fā)工具,并且隨著操作系統(tǒng)的升級,開發(fā)工具和驅(qū)動(dòng)程序也需要隨之升級,另外,商業(yè)開發(fā)USB設(shè)備驅(qū)動(dòng)還需要繳納認(rèn)證費(fèi)用,增加經(jīng)濟(jì)負(fù)擔(dān)。因此大多數(shù)的工業(yè)控制器仍然使用串口或者USB轉(zhuǎn)串口的方式通訊,正常速度為幾十kbps到幾百kbps,效率較低。計(jì)算機(jī)的USB接口HID(Human Interface Device)類協(xié)議[3]負(fù)責(zé)人機(jī)接口設(shè)備如鼠標(biāo)、鍵盤和游戲桿等和計(jì)算機(jī)交互操作。USB HID接口權(quán)限自由度高,特別是鼠標(biāo)類設(shè)備具有操作系統(tǒng)最高權(quán)限,其每個(gè)操作信號、每組數(shù)據(jù)都可以在用戶許可的情況下發(fā)出或者接收,應(yīng)用開發(fā)用戶可以調(diào)用HID接口的API函數(shù)支持人機(jī)接口類別的設(shè)備。

STM32系列硬件是專為要求高性能、低成本、低功耗的嵌入式應(yīng)用設(shè)計(jì)的ARM Cortex內(nèi)核處理器,其內(nèi)部自帶flash和RAM,接口資源豐富,并自帶USB物理收發(fā)器,因此使用單芯片即可構(gòu)建完整的智能物聯(lián)網(wǎng)儀器儀表的核心模塊[4-5]。STM32處理器性價(jià)比很高,適合于工業(yè)和民用測控領(lǐng)域使用,文獻(xiàn)[6]即使用STM32搭建低成本的測量裝置,實(shí)現(xiàn)了高精度的電量測量。STM32處理器的通訊功能強(qiáng)大,在STM32處理器內(nèi)部集成了USB收發(fā)器,支持USB HID通訊協(xié)議,使用USB HID接口每次最多可發(fā)送1 024個(gè)字節(jié),對于USB2.0硬件,最大速度可以達(dá)到24.576 MB/s,足以滿足中等性能工業(yè)控制器的需求。有學(xué)者使用USB HID技術(shù)開發(fā)了專用的鼠標(biāo)[7]、鍵盤[8]和手勢輸入設(shè)備[9],但是由于沒有主機(jī)數(shù)據(jù)輸出,僅有單向數(shù)據(jù)輸入功能,不能用于控制器。

本設(shè)計(jì)基于STM32構(gòu)建了一個(gè)使用USB HID協(xié)議的多功能控制器,數(shù)據(jù)傳輸工作采用中斷傳輸方式,主機(jī)和控制器(從機(jī))之間建立相互獨(dú)立的寫入和讀出管道,上位機(jī)控制軟件直接調(diào)用HID接口的API函數(shù)實(shí)現(xiàn)對下位機(jī)硬件的讀寫控制。

2 系統(tǒng)硬件原理和組成

基于STM32的USB HID接口控制器的硬件系統(tǒng)結(jié)構(gòu)如圖1所示??刂破鬟x擇STM32F103作為系統(tǒng)主處理器,其工作頻率為72 MHz,采用ARM CortexM3內(nèi)核,功耗約為0.1 W,其內(nèi)部集成了兩個(gè)AD采樣器,可以直接接收0~3 V的模擬輸入電壓,支持USB全速設(shè)備。主處理器通過定時(shí)器中斷輸出3.3 V的PWM信號,PWM信號經(jīng)過光電隔離后輸出給控制驅(qū)動(dòng)電路。本設(shè)計(jì)使用LED驅(qū)動(dòng)電路進(jìn)行驗(yàn)證,由于驅(qū)動(dòng)電路工作在高電壓、大電流狀態(tài)下,因此PWM信號必須隔離輸出。在控制器系統(tǒng)集成多路光電隔離的GPIO信號,用于外部開關(guān)控制,系統(tǒng)中MAX3232作為UART串口驅(qū)動(dòng),用于調(diào)試接口和功能擴(kuò)展。

圖1 USB HID接口控制器的硬件系統(tǒng)結(jié)構(gòu)圖

控制器USB HID接口部分的實(shí)際電路圖如圖2所示。STM32F103的PA11和PA12分別連接USB總線的DM和DP端,在DP端上拉1.5 kΩ電阻用于全速設(shè)備檢測熱插拔事件,如果DP端直接上拉到3.3 V電壓,因從機(jī)的上電延遲,會(huì)導(dǎo)致枚舉失敗,因此USB總線的上拉電阻接到STM32F103處理器的IO端口PB10,當(dāng)控制器啟動(dòng),在固件main函數(shù)中將PB10拉高,從而等待USB插入事件,開始進(jìn)行枚舉。

圖2 USB HID接口電路圖

3 USB HID接口多功能控制器設(shè)備固件軟件設(shè)計(jì)

參考USB HID協(xié)議,USB HID接口控制器和主機(jī)之間需建立兩種傳輸管道:控制傳輸管道和中斷傳輸管道。控制傳輸管道用于設(shè)備枚舉,從設(shè)備上傳設(shè)備描述符、配置描述符以及HID描述符等信息,下發(fā)Get請求和Set請求,在設(shè)備資源方面占用默認(rèn)的端點(diǎn)0。因?yàn)楸究刂破鲗儆谧远x的HID設(shè)備,首先需要重新定義HID報(bào)表描述符,在報(bào)表描述中增加和修改數(shù)據(jù)輸入和輸出報(bào)告,修改通訊數(shù)據(jù)包的字長、字?jǐn)?shù)目、傳輸方向、最大值和最小值。HID報(bào)表描述符完成后,在HID描述符填充HID報(bào)表描述符信息(長度、類別)??刂破魇褂弥袛鄠鬏斶M(jìn)行實(shí)際的負(fù)載數(shù)據(jù)傳輸,其內(nèi)部分配兩個(gè)中斷類型的端點(diǎn),分別用于數(shù)據(jù)接收和發(fā)送。

3.1 控制器USB HID接口枚舉和工作過程

控制器USB HID接口主從機(jī)枚舉工作和交互過程如圖3所示。主機(jī)檢測到從機(jī)接入后,開始標(biāo)準(zhǔn)設(shè)備枚舉過程,包括請求和接收設(shè)備描述符、設(shè)置從機(jī)地址、請求和接收配置描述符三個(gè)步驟。通過標(biāo)準(zhǔn)設(shè)備枚舉過程,主機(jī)獲得控制器的設(shè)備描述符、配置描述符、接口描述符和端點(diǎn)描述符。標(biāo)準(zhǔn)設(shè)備枚舉之后,進(jìn)行HID類設(shè)備枚舉,主機(jī)向從機(jī)發(fā)送Get HID類描述符請求,然后收到HID類描述符和報(bào)表描述符。在控制器全部枚舉后,系統(tǒng)進(jìn)入正常的工作狀態(tài),在Windows環(huán)境下主機(jī)通過調(diào)用ReadFile和WriteFile實(shí)現(xiàn)和從機(jī)之間收發(fā)數(shù)據(jù)。在Linux環(huán)境下可以調(diào)用libusb庫實(shí)現(xiàn)USB HID通訊。HID設(shè)備定義了6個(gè)HID類請求,在STM32固件程序的Setup階段中斷函數(shù)中響應(yīng)這些請求命令,根據(jù)HID請求發(fā)送相應(yīng)的HID類描述符。

圖3 控制器USB HID接口主從機(jī)枚舉工作和交互過程

3.2 控制器固件的HID類描述符定義及專用的數(shù)據(jù)結(jié)構(gòu)和對象變量

對于自定義的USB總線HID設(shè)備,必須重新構(gòu)建Report報(bào)表描述符[3]。圖4是控制器HID協(xié)議報(bào)表描述符的基本結(jié)構(gòu),包括輸入報(bào)告和輸出報(bào)告,有效數(shù)據(jù)報(bào)文包含8個(gè)字單元,每個(gè)字單元由8個(gè)二進(jìn)制位(1個(gè)字節(jié))組成。報(bào)表描述符定義好后在HID設(shè)備的接口描述符和端點(diǎn)描述符進(jìn)行傳輸方式定義,接口描述符的bNumEndpoints,bInterfaceClass和bInterfaceProtocol字段分別定義控制器端點(diǎn)數(shù)目、HID設(shè)備類別以及HID交互協(xié)議。

圖4 控制器USB HID接口協(xié)議報(bào)表描述符的基本結(jié)構(gòu)

控制器STM32硬件的固件程序使用三個(gè)數(shù)據(jù)結(jié)構(gòu)處理USB通訊事務(wù),分別是:①DEVICE_INFO,保存USB請求命令和通訊狀態(tài)信息;②DEVICE_PROP,USB通訊過程的回調(diào)函數(shù),包括控制傳輸Setup階段處理,Stage IN和OUT事務(wù)處理,獲得設(shè)備、配置和字符描述符處理;③USER_STANDARD_REQUESTS,一組標(biāo)準(zhǔn)請求回調(diào)函數(shù)指針,用于定制上位機(jī)的標(biāo)準(zhǔn)請求,可編寫相應(yīng)的函數(shù)實(shí)例化這些指針,也可以設(shè)置成NOP_Process系統(tǒng)函數(shù)。本控制器系統(tǒng)函數(shù)均設(shè)置成NOP_Process??刂破鞴碳绦蚴褂肧TM32開發(fā)庫定義以上三個(gè)數(shù)據(jù)結(jié)構(gòu)的實(shí)例化對象指針變量pInformation,pProperty,pUser_Standard_Requests處理USB通訊。在STM32的USB總線的中斷處理USB_LP_CAN1_RX0_IRQHandler中調(diào)用CTR_LP中斷服務(wù)函數(shù),中斷服務(wù)函數(shù)內(nèi)部這三個(gè)指針指向結(jié)構(gòu)體對象完成控制傳輸過程。

3.3 控制器固件軟件主控程序設(shè)計(jì)

多功能控制器固件主控程序流程如圖5所示。控制器分別使用中斷模式的端點(diǎn)1(管道EP1)、端點(diǎn)2接收和發(fā)送數(shù)據(jù)。在端點(diǎn)1的中斷服務(wù)中如果接收到一串長度和格式符合要求的數(shù)據(jù),即作為一條控制消息,將其放入一個(gè)消息隊(duì)列。在主程序中使用一個(gè)while循環(huán)任務(wù)作為后臺(tái)主線程程序,主線程程序首先檢測消息隊(duì)列是否為空,如果不為空,則從隊(duì)列中讀取一條控制消息,對控制消息進(jìn)行CRC校驗(yàn),如果CRC校驗(yàn)成功,則將控制消息里命令參數(shù)賦值給控制寄存器,然后在后續(xù)的過程中根據(jù)控制寄存器的值運(yùn)行PWM控制程序、AD采樣程序、GPIO讀寫程序等子模塊。

圖5 多功能控制器固件主控程序流程圖

4 上位機(jī)對USB HID控制器讀寫程序設(shè)計(jì)

針對本USB HID接口多功能控制器,上位機(jī)軟件使用API函數(shù)實(shí)現(xiàn)USB HID功能,在Windows環(huán)境下可以調(diào)用hid.lib,hidclass.lib,hidparse.lib和setupapi.lib四個(gè)接口庫完成,而在Linux環(huán)境下可使用libusb調(diào)用libusb-1.0.so.0.1.0庫完成。限于篇幅,以下介紹Windows環(huán)境下上位機(jī)實(shí)現(xiàn)USB HID功能編程的方法。

在Windows環(huán)境下編程時(shí)程序中需要hidsdi.h和setupapi.h兩個(gè)頭文件。調(diào)用這兩個(gè)頭文件必須按照C語言的調(diào)用規(guī)則。Windows環(huán)境下上位機(jī)對USB HID接口控制器讀寫流程如圖6所示。首先找到HID設(shè)備的GUID,調(diào)用后獲得HID設(shè)備的指針,然后找到單個(gè)HID設(shè)備的信息,調(diào)用后使用CreaeFile函數(shù)按照設(shè)備路徑打開,設(shè)備打開后讀出設(shè)備屬性,然后根據(jù)設(shè)備屬性找到設(shè)備屬性中符合控制器ID(VID和PID)的設(shè)備,針對滿足條件的設(shè)備重新使用CreateFile函數(shù)調(diào)用兩次,建立讀寫句柄hReader和hWriter。以上過程是通過調(diào)用hidsdi.h和setupapi.h頭文件里面的HidD_GetHidGuid,SetupDiGetClassDevs,SetupDiEnumDeviceInterfaces,SetupDiEnumDeviceInterfaceDetail等一系列API函數(shù)實(shí)現(xiàn)的。設(shè)備檢測過程中,因?yàn)閁SB從機(jī)設(shè)備最多有127個(gè),因此設(shè)備遍歷檢測計(jì)數(shù)設(shè)置為127,即可保證全部HID設(shè)備屬性被檢測到。在主機(jī)的讀寫進(jìn)程中直接調(diào)用ReadFile和WriteFile函數(shù)實(shí)現(xiàn)對控制器的讀寫,hReader和hWriter句柄是關(guān)鍵參數(shù)。

圖6 上位機(jī)對USB HID接口控制器讀寫流程圖

5 實(shí)驗(yàn)驗(yàn)證

在驗(yàn)證實(shí)驗(yàn)中,USB HID接口控制器和主機(jī)之間的數(shù)據(jù)流管道配置如圖7所示。主機(jī)通過EP0端點(diǎn)的控制傳輸方式對控制器進(jìn)行枚舉和初始化;設(shè)備的端點(diǎn)1(管道EP1)用于接收主機(jī)實(shí)際控制信息,端點(diǎn)2(管道EP2)用于設(shè)備數(shù)據(jù)讀出,EP1,EP2工作采用中斷傳輸方式??刂破鲾?shù)據(jù)包的大小采用8個(gè)字節(jié),控制器和主機(jī)之間采用短數(shù)據(jù)包的形式保證控制器響應(yīng)的敏捷性,每個(gè)控制輸出事務(wù)和狀態(tài)讀取的輸入事務(wù)均包含8個(gè)字節(jié)的有效數(shù)據(jù)。

圖7 控制器和主機(jī)之間數(shù)據(jù)流管道配置

實(shí)驗(yàn)驗(yàn)證用的處理器型號是STM32F103C8T6。圖8是USB HID接口控制器實(shí)際硬件電路和系統(tǒng)測試實(shí)驗(yàn)圖。外部測試硬件使用一個(gè)LED光源,通過PWM接口控制LED恒流源驅(qū)動(dòng)器輸出。

(a)實(shí)際硬件電路

圖9是示波器顯示的USB HID接口控制器PWM信號輸出的實(shí)際波形,其中(a)為50%占空比,(b)為80%占空比,硬件根據(jù)控制要求改變PWM信號的占空比。圖10是控制器通過PWM信號控制LED光源獲得的實(shí)驗(yàn)數(shù)據(jù),橫坐標(biāo)為PWM信號的占空比(ratio),其范圍從0.05到1.0(較小數(shù)據(jù)沒有顯示),縱坐標(biāo)為LED工作電流值。LED的驅(qū)動(dòng)電路使用LM3409恒流源驅(qū)動(dòng)芯片,在實(shí)驗(yàn)過程中上位機(jī)向控制器下發(fā)占空比(ratio)和頻率參數(shù),然后控制器根據(jù)這兩個(gè)參數(shù)生成PWM信號,PWM信號控制LED光源驅(qū)動(dòng)芯片輸出的開關(guān),從而調(diào)節(jié)LED光源的亮度。選擇2 kHz和8 kHz的PWM信號頻率進(jìn)行測試,由圖10可知,當(dāng)選擇較高頻率(8 kHz)PWM信號時(shí),LED調(diào)節(jié)的范圍較大,較小的占空比也有電流輸出,LED電流輸出最小值可以小于1 mA,可見控制器可以很方便地實(shí)現(xiàn)一個(gè)寬范圍的控制過程??刂破饔布骄ぷ麟娏鳛?35 mA,功耗低、性能穩(wěn)定,數(shù)據(jù)測試過程中上位機(jī)輸出100%成功。系統(tǒng)經(jīng)過24 h長時(shí)間測試,能夠穩(wěn)定運(yùn)行。

(a)通道1(50%的占空比)

圖10 控制器通過PWM信號控制LED光源圖示(改變占空比獲得電流輸出)

6 結(jié)論和展望

本文提出了一種基于STM32硬件的USB HID接口多功能控制器設(shè)計(jì)方案,主機(jī)和USB設(shè)備之間采用控制管道、讀管道和寫管道等相互獨(dú)立的多個(gè)傳輸管道實(shí)現(xiàn)控制數(shù)據(jù)的讀寫。通過重新定義USB HID報(bào)表描述符和設(shè)備與主機(jī)之間的雙向通訊控制流程,實(shí)現(xiàn)了可編程變頻PWM信號控制、GPIO讀入和輸出、模擬量AD采集多種功能。實(shí)驗(yàn)驗(yàn)證的結(jié)果表明,系統(tǒng)使用靈活,反應(yīng)快速,可以穩(wěn)定運(yùn)行。

此控制器可以在跨平臺(tái)操作系統(tǒng)的主機(jī)下使用,安裝和部署方便,且免驅(qū)安裝,可用于機(jī)器視覺系統(tǒng)、生產(chǎn)測試、工業(yè)測控自動(dòng)化、儀器儀表、邊緣計(jì)算、可穿戴設(shè)備等領(lǐng)域,具備運(yùn)算處理能力強(qiáng)、功耗小、使用和維護(hù)成本低等優(yōu)點(diǎn),而且為應(yīng)對智能傳感器大數(shù)據(jù)控制的需求,此控制器可以通過增加USB接口設(shè)置、修改包長、升級USB協(xié)議版本來滿足數(shù)據(jù)流傳輸?shù)囊螅虼司哂辛己玫膽?yīng)用價(jià)值。

猜你喜歡
枚舉描述符固件
基于理解性教學(xué)的信息技術(shù)教學(xué)案例研究
速讀·上旬(2022年2期)2022-04-10 16:42:14
基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
一種高效的概率圖上Top-K極大團(tuán)枚舉算法
Linux單線程并發(fā)服務(wù)器探索
利用CNN的無人機(jī)遙感影像特征描述符學(xué)習(xí)
基于固件的遠(yuǎn)程身份認(rèn)證
基于太陽影子定位枚舉法模型的研究
提取ROM固件中的APP
電腦愛好者(2015年7期)2015-04-09 08:54:02
一種通過USB接口的可靠固件升級技術(shù)
奧林巴斯XZ—2新固件升級
中國攝影(2014年1期)2014-02-24 01:50:23
珠海市| 汾西县| 涟水县| 崇左市| 临颍县| 大丰市| 天津市| 济源市| 收藏| 鞍山市| 云龙县| 北票市| 将乐县| 元朗区| 洪洞县| 吴江市| 若尔盖县| 仁怀市| 定西市| 平定县| 天气| 商都县| 巍山| 攀枝花市| 开封县| 新绛县| 罗定市| 绥棱县| 保定市| 广水市| 哈密市| 沁阳市| 永济市| 樟树市| 怀柔区| 庆元县| 罗田县| 色达县| 龙里县| 扎囊县| 克拉玛依市|