亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于HID的開關(guān)控制系統(tǒng)設(shè)計(jì)

        2021-12-10 02:11:36譚汝浩韋紅錄黃冬梅
        視聽 2021年12期
        關(guān)鍵詞:描述符固件寄存器

        譚汝浩 韋紅錄 黃冬梅

        一、概述

        廣播電視發(fā)射系統(tǒng)中信號源子系統(tǒng)設(shè)備繁多,有衛(wèi)星信號接收機(jī)、光纖信號解碼器、信號源切換器等重要設(shè)備。若這些設(shè)備發(fā)生故障,很可能致使廣播電視節(jié)目信號中斷,導(dǎo)致頻點(diǎn)靜音靜幀等現(xiàn)象,造成停播事故。臺(tái)站原有的電源復(fù)位器功能單一,自動(dòng)化程度低,通道數(shù)量少,很多設(shè)備電源接入到同一通道上。若某個(gè)設(shè)備故障需要復(fù)位重啟,對該設(shè)備接入的通道復(fù)位時(shí),整個(gè)通道的設(shè)備都會(huì)被復(fù)位重啟,這樣就有可能導(dǎo)致其他設(shè)備工作異常,造成停播現(xiàn)象。因此,可以采用一個(gè)新的解決方案,即采用USB-HID控制信號源系統(tǒng)設(shè)備電源。USB-HID是基于USB通信的,與電源復(fù)位器通信方式不同,后者采用網(wǎng)絡(luò)通信,兩者互不影響,因此還可以串聯(lián)組合運(yùn)行。

        USB-HID是Universal Serial Bus-Human Interface Device的縮寫,HID設(shè)備通常是鼠標(biāo)、鍵盤、游戲手柄等,不過HID設(shè)備并不一定要有人機(jī)接口,只要符合HID類別規(guī)范的設(shè)備都是HID設(shè)備。HID通信相對簡單,響應(yīng)快,所以比較適合用作控制設(shè)備。交換的數(shù)據(jù)需要存儲(chǔ)在稱為報(bào)表(report)的結(jié)構(gòu)內(nèi),設(shè)備固件必須支持HID報(bào)表格式。相對其他USB設(shè)備,HID主要由控制傳輸和中斷傳輸來傳送與接收數(shù)據(jù)。報(bào)表的格式非常有彈性,可以處理任何類別的數(shù)據(jù)。HID類別設(shè)備的規(guī)范是Device Class Definition for Human Interface Devices①。另外還有一份文件 HID Usage Tables②,用來定義讓主機(jī)了解以及使用HID數(shù)據(jù)的數(shù)值。

        二、HID底層通信

        現(xiàn)有資源為一塊HID繼電器控制板,配套資料是一份DLL及其頭文件,沒有源碼,根據(jù)現(xiàn)有資源進(jìn)行反匯編學(xué)習(xí)HID通信原理。使用OllyDbg對該DLL進(jìn)行調(diào)試。圖1是OllyDbg調(diào)試界面,區(qū)域1是反匯編指令窗口,第一列是地址欄,第二列是機(jī)器碼,第三列是匯編代碼,第四列是注釋,匯編指令眾多但是常用的很少,這點(diǎn)服從二八定律,少量的指令完成大部分功能。區(qū)域2是CPU寄存器窗口,最重要的是前面9個(gè)寄存器,這9個(gè)寄存器保存著當(dāng)前程序段的運(yùn)行參數(shù)、結(jié)果等重要信息,各個(gè)寄存器的說明詳見參考文獻(xiàn)③。區(qū)域3是數(shù)據(jù)窗口,在這里查看內(nèi)存數(shù)據(jù),常量數(shù)據(jù)一般都存放在此處,例如常用數(shù)值、字符串等。在區(qū)域1和2中,右鍵一個(gè)地址指針即可跟隨轉(zhuǎn)存到這里查看該地址的內(nèi)存數(shù)據(jù)。區(qū)域4是棧窗口,棧通常用于保存臨時(shí)變量,棧操作push是將目標(biāo)壓棧,pop將棧頂彈出到目標(biāo)。除了這兩個(gè)操作還有棧對齊,保證棧頂指針為某字節(jié)的整數(shù)倍;升棧,分配局部變量空間;降棧,刪除棧部分?jǐn)?shù)據(jù)。

        圖1 OllyDbg調(diào)試界面

        根據(jù)頭文件分析DLL的導(dǎo)出函數(shù)及其傳入?yún)?shù)類型和返回參數(shù)類型。調(diào)試過程中DLL所用到的Win32Api會(huì)被OllyDbg標(biāo)示出來,可以從注釋中看到是什么Api,而所用到的HIDDLL的Api沒有標(biāo)記,要手動(dòng)添加注釋信息。整個(gè)通信的建立過程都是基于Win32Api和HIDDLL的Api完成的。

        經(jīng)過耐心的跟蹤調(diào)試得到如圖2的通信流程圖。其中SetupDiGetDeviceInterfaceDetailA函數(shù)連續(xù)調(diào)用兩次,第一次獲得required_size參數(shù),第二次將required_size傳入獲得設(shè)備詳細(xì)信息。CreateFile函數(shù)也是連續(xù)調(diào)用兩次,第一次ShareMode參數(shù)為空,如果是鼠標(biāo)、鍵盤等獨(dú)占設(shè)備是不能通過CreateFile打開的,將會(huì)在此返回失敗,相當(dāng)于在此過濾鼠標(biāo)、鍵盤等獨(dú)占設(shè)備;第二次ShareMode參數(shù)為3,函數(shù)成功返回HID設(shè)備句柄,設(shè)備句柄是與設(shè)備通信的唯一標(biāo)識(shí)。通信階段使用DeviceIoControl函數(shù)向HID設(shè)備發(fā)起查詢請求,獲得特征報(bào)告(Feature Report),該設(shè)備自定義的序列號就在特征報(bào)告里面,繼電器狀態(tài)也包含在特征報(bào)告里。HidD_SetFeature函數(shù)用于發(fā)送特征報(bào)告,設(shè)置繼電器狀態(tài)。

        圖2 流程圖

        三、固件

        固件開發(fā)過程需要用到Bus Hound。Bus Hound是一個(gè)USB通用的強(qiáng)大的調(diào)試工具,類似于網(wǎng)絡(luò)抓包工具,用于抓取電腦總線數(shù)據(jù),還可以模擬發(fā)送請求數(shù)據(jù)。圖3是Bus Hound調(diào)試界面。21.0表示21號設(shè)備端點(diǎn)0,CTL表示主機(jī)發(fā)送控制請求,請求內(nèi)容為其后的Data,GET DESCRIPTOR表示該請求為獲取描述符。IN表示設(shè)備發(fā)送數(shù)據(jù)到主機(jī)。圖中的數(shù)據(jù)是設(shè)備上電枚舉階段發(fā)生的數(shù)據(jù)交換。共四條GET DESCRIPTOR,第一條描述符為設(shè)備描述符,第二條獲取配置描述符長度,第三條根據(jù)長度再次請求配置描述符,第四條獲取報(bào)告描述符。設(shè)備描述符和配置描述符為USB通用,報(bào)告描述符為HID傳輸?shù)臄?shù)據(jù)用途(usage)上的說明。至此,獲得了HID固件關(guān)鍵的三個(gè)描述符。報(bào)告描述符的用法和修改參照HID Usage Tables。官網(wǎng)還有報(bào)告描述符工具提供使用。

        圖3 Bus Hound調(diào)試界面

        MCU采用stm32f407vet6,從stc官網(wǎng)獲取HID固件庫④。使用固件庫參照HID協(xié)議進(jìn)行修改調(diào)試。這里的主要問題是我們沿用舊設(shè)備的數(shù)據(jù)交換方式,即特征報(bào)告(Feature Report),上位機(jī)發(fā)送請求特征報(bào)告失敗返回0xC0000004,查詢HID協(xié)議找到7.2 Class-Specific Requests(特殊請求),7.2.2 Set_Report Request有說明“A device might choose to ignore input Set_Report requests as meaningless.”,由此得知固件默認(rèn)不處理特征報(bào)告。因此要添加對特征報(bào)告的處理,7.2 Class-Specific Requests查找發(fā)現(xiàn)7.2.4 Set_Idle Request這一請求是處理成功的。于是在固件庫找到Set_Idle Request的處理,在其同級增加條件分支完成添加特征報(bào)告的處理,使用端點(diǎn)0收發(fā)特征報(bào)告數(shù)據(jù)。

        四、數(shù)據(jù)庫

        臺(tái)站主控電腦使用SQL Server處理數(shù)據(jù),各個(gè)設(shè)備狀態(tài)被相應(yīng)的上位機(jī)實(shí)時(shí)更新到數(shù)據(jù)庫,通過查詢數(shù)據(jù)庫獲取設(shè)備狀態(tài),相當(dāng)于借助數(shù)據(jù)庫與其他上位機(jī)進(jìn)行進(jìn)程間通信。

        為模擬相關(guān)環(huán)境在自己電腦上安裝SQL Server和SSMS。添加數(shù)據(jù)庫和數(shù)據(jù)表,添加數(shù)據(jù)元組示例??蛻舳藢?shù)據(jù)庫的操作只有讀取,因此采用sqlcmd命令行獲取數(shù)據(jù)比較簡便,使用popen函數(shù)執(zhí)行命令行獲取返回的數(shù)據(jù)。sqlcmd的使用比較簡單,需要的參數(shù)有-S服務(wù)器、-U用戶名、-P密碼、-d使用數(shù)據(jù)庫名稱、-Q查詢命令(sql查詢語句)。圖4為在我的電腦的模擬環(huán)境中進(jìn)行查詢得到的結(jié)果。

        圖4 命令行查詢數(shù)據(jù)

        五、端口拓展

        為了獲得更多的控制通道,以及預(yù)留IO口做其他用途,使用74HC595進(jìn)行端口拓展。74HC595是8位串行輸入/輸出或者并行輸出移位寄存器,具有高阻、關(guān)、斷狀態(tài)。圖5是其真值表。通過將串行數(shù)據(jù)輸出管腳SQH級聯(lián)到下一個(gè)74HC595的SI輸入管腳達(dá)到加長拓展。OE拉低SCLR拉高,需要控制的有時(shí)鐘輸入SCK、鎖存信號RCK和數(shù)據(jù)源SI,只需要三個(gè)MCU IO口即可控制數(shù)位寄存器狀態(tài)。最后通過ULN2803驅(qū)動(dòng)繼電器。

        圖5 74HC595真值表

        六、客戶端

        客戶端工作流程如圖6所示,實(shí)現(xiàn)自動(dòng)控制和接管控制。綜合考慮數(shù)據(jù)庫查詢壓力和信號快速恢復(fù),設(shè)定每秒查詢一次設(shè)備狀態(tài)。使用MFC對話框設(shè)計(jì)一個(gè)簡單的界面,添加接管按鈕、各個(gè)設(shè)備開關(guān)按鈕,在初始化函數(shù)中鏈接底層通信DLL,完成客戶端的開發(fā)工作。

        圖6 客戶端工作流程

        七、總結(jié)

        自動(dòng)控制只開發(fā)了信號源部分,實(shí)現(xiàn)發(fā)現(xiàn)切換器故障無輸出關(guān)閉切換器電源,發(fā)現(xiàn)設(shè)備通信異常重啟復(fù)位恢復(fù)通信等功能。手動(dòng)控制支持更多端口,可以控制其他設(shè)備,例如,鄉(xiāng)鎮(zhèn)熊貓數(shù)字電視發(fā)射機(jī)無輸出,控制其復(fù)位。

        注釋:

        ①Device Class Definition for Human Interface Devices.

        ②HID Usage Tables.

        ③劉穎東.揭秘?cái)?shù)據(jù)解密的關(guān)鍵技術(shù)[M].北京:人民郵電出版社,2009.

        ④STM32F10xxx USB-FS-Device firmware library.

        猜你喜歡
        描述符固件寄存器
        基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
        Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
        Linux單線程并發(fā)服務(wù)器探索
        分簇結(jié)構(gòu)向量寄存器分配策略研究*
        利用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
        高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
        亚洲欧美综合精品成人网站| 黑人免费一区二区三区| 日本黄网色三级三级三级| 色又黄又爽18禁免费网站现观看| 日本50岁丰满熟妇xxxx| 亚洲国产美女在线观看| 一区二区免费中文字幕| 在线视频观看国产色网| 亚洲av成人中文无码专区| 美国黄色片一区二区三区 | 一区二区免费国产a在亚洲| 在线精品国产亚洲av蜜桃| 国产精品午夜爆乳美女视频| 成人动漫久久| 亚洲一区二区三区新视频| 国产香蕉视频在线播放| 日日噜狠狠噜天天噜av| 国产小屁孩cao大人免费视频| 国产日本精品一区二区免费| 无码熟妇人妻av在线影片最多| 在教室伦流澡到高潮h麻豆| 色二av手机版在线| 日本一二三四区在线观看| 亚洲妇女无套内射精| 无码日韩AⅤ一区二区三区| 国产精品久久熟女吞精| 亚洲中字幕日产av片在线| 无码久久精品国产亚洲av影片| 亚洲综合久久1区2区3区| 日韩人妻精品视频一区二区三区| 久久久亚洲精品无码| 日本在线视频网站www色下载 | 中文字幕永久免费观看| 91精品国产高清久久福利| 欧美老妇多毛xxxxx极瑞视频| 国产成人精品三级麻豆| 女优免费中文字幕在线| av一区二区三区在线| 朝鲜女子内射杂交bbw| 久久AⅤ天堂Av无码AV| 视频在线观看国产自拍|