一,概述 現(xiàn)在很多的主控上都帶有USB的功能,但是對(duì)于初學(xué)者來(lái)說(shuō),這方面應(yīng)用還是比較棘手,因?yàn)閡sb的不但固件程序需要編寫,PC端的驅(qū)動(dòng)也要編寫,而且驅(qū)動(dòng)寫好了還要寫個(gè)上位機(jī)才能看出效果。這樣調(diào)試起來(lái)十分困難,建議從USB的鍵盤,鼠標(biāo)開(kāi)始做,了解清楚了,再做自己的協(xié)議就比較簡(jiǎn)單了。 USB的概念歷史啥的這里就不說(shuō)了。我們先不管具體的數(shù)據(jù)包格式,這一節(jié)先從整個(gè)包的層面上簡(jiǎn)單的說(shuō),過(guò)程是這樣的, 本文引用地址:http://m.butianyuan.cn/article/201612/328953.htm ---------------------------------------設(shè)備插入------------------------------------------------------------- 1) 主機(jī)會(huì)輪回查詢各個(gè)USB端口,主機(jī)檢測(cè)到D+與D-之間有電壓差,就認(rèn)為有新的設(shè)置接入。主機(jī)等待100ms后發(fā)出復(fù)位請(qǐng)求。設(shè)備接到復(fù)位請(qǐng)求后將產(chǎn)生一個(gè)外部中斷信號(hào)。
(枚舉 :是 USB 體系中一個(gè)很重要的活動(dòng),由一系列標(biāo)準(zhǔn)請(qǐng)求組成(若設(shè)備屬于某個(gè)子類,還包含該子類定義的特殊請(qǐng)求)。通過(guò)枚舉 HOST 可以獲得設(shè)備的基本描述信息,如支持的 USB 版本、PID、VID、設(shè)備分類 (Class)、供電方式、最大消耗電流、配置數(shù)量、各種類型端點(diǎn)的數(shù)量及傳輸能力 (最大包長(zhǎng)度)。HOST 根據(jù) PID 和 VID 加載設(shè)備驅(qū)動(dòng)程序,并對(duì)設(shè)備進(jìn)行合適的配置。只有經(jīng)過(guò)枚舉的設(shè)備才能正常使用。對(duì)于總線供電設(shè)備,在枚舉完成前最多可從總線獲取 100mA 的電流。) ---------------------------------------枚舉過(guò)程------------------------------------------------------------ 2) 主機(jī)這時(shí)候只是知道有新的設(shè)備插入了,但是不知道插進(jìn)來(lái)個(gè)什么東西,所以就開(kāi)始詢問(wèn)它是什么設(shè)備,怎么用,負(fù)荷能力怎么樣。這個(gè)時(shí)侯就進(jìn)入了枚舉過(guò)程。因?yàn)閯倓偛迦氲脑O(shè)備沒(méi)有分配地址,就用默認(rèn)地址0,首先發(fā)送一個(gè)Get_deor(獲取設(shè)備描述符)指令包,設(shè)備接到包后就開(kāi)始解析包(其實(shí)就是你在固件程序里判斷處理) ,然后按固定格式返回自己設(shè)備的設(shè)備描述符,這一步主要是主機(jī)知道你的USB設(shè)備的基礎(chǔ)屬性,比如支持的傳輸數(shù)據(jù)長(zhǎng)度,電流負(fù)荷多少,支持那個(gè)USB版本,以及以后方便電腦找驅(qū)動(dòng)的PID,VID。 3) 這時(shí)候主機(jī)知道你(你做的設(shè)備,簡(jiǎn)稱你吧)的數(shù)據(jù)長(zhǎng)度還有電流大小后,下一步就是給你分配一個(gè)屬于你的地址。 4) 給你一個(gè)地址后就開(kāi)始詢問(wèn)你的具體配置。首先發(fā)送一個(gè)試探性的設(shè)備配置請(qǐng)求Get_configuration(要求固定返回9個(gè)設(shè)備配置字),你接到后就開(kāi)始發(fā)送9字節(jié)的設(shè)備配置字,其中包括你的配置字的總長(zhǎng)度,這樣主機(jī)就知道你的配置到底有多長(zhǎng),然后再發(fā)一次設(shè)備配置請(qǐng)求,這時(shí)你就開(kāi)始上傳所有的配置字。這個(gè)時(shí)侯主機(jī)就已經(jīng)很明白你的工作方式就各種特性,然后就可以正常工作了 5) 如果你在前面的某些配置(以后章節(jié)詳細(xì)說(shuō)明)要求要說(shuō)明自己的名字什么的,這里還要上傳字符串描述符。 6) 如果是鼠標(biāo)或者鍵盤還要上傳報(bào)告描述符
---------------------------------------正常數(shù)據(jù)階段------------------------------------------------------ 7) 這個(gè)時(shí)侯你已經(jīng)被主機(jī)正式接受并且注冊(cè)了,你可以通過(guò)自己寫測(cè)驅(qū)動(dòng)或通用驅(qū)動(dòng)與電腦進(jìn)行通訊了。
以上是簡(jiǎn)單的描述,詳細(xì)的后面章節(jié)再做介紹,學(xué)習(xí)一個(gè)東西關(guān)鍵是首先要知道這個(gè)東西是什么,簡(jiǎn)單的工作原理。對(duì)于USB的工作我這里做個(gè)比方, 主機(jī)好比一個(gè)公司,你就是USB設(shè)備,要進(jìn)入公司首先要面試(枚舉),你到了面試現(xiàn)場(chǎng)(第一次插入設(shè)備),面試官首先了解到你的外表,性別已經(jīng)你要應(yīng)聘的崗位(設(shè)備描述符),然后給你一個(gè)號(hào),以后就開(kāi)始按號(hào)叫人,當(dāng)你被叫到就開(kāi)始問(wèn)你的專業(yè)知識(shí),性格等(配置描述符),如果你比較合適(通過(guò)了枚舉)你就會(huì)錄取了,并且注冊(cè)一個(gè)你的信息到公司(驅(qū)動(dòng)安裝,并且寫入注冊(cè)表)。等你下次來(lái)公司,只要把工號(hào)(PID,VID)報(bào)上,就知道是你來(lái)了。
|
備注:只是在第一步,不是由主機(jī)輪回查詢是否有設(shè)備插入,這個(gè)任務(wù)是由HUB完成,HUB查到有設(shè)備插入后保存這個(gè)信息,在主機(jī)的詢問(wèn)下再報(bào)告新設(shè)備的插入。
評(píng)論