<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設計應用 > 初學(xué)者USB技術(shù)入門(mén)總結

初學(xué)者USB技術(shù)入門(mén)總結

作者: 時(shí)間:2012-04-19 來(lái)源:網(wǎng)絡(luò ) 收藏

初涉學(xué)USB,初學(xué)者USB

一,概述
現在很多的主控上都帶有USB的功能,但是對于初學(xué)者來(lái)說(shuō),這方面應用還是比較棘手,因為usb的不但固件程序需要編寫(xiě),PC端的驅動(dòng)也要編寫(xiě),而且驅動(dòng)寫(xiě)好了還要寫(xiě)個(gè)上位機才能看出效果。這樣調試起來(lái)十分困難,建議從USB的鍵盤(pán),鼠標開(kāi)始做,了解清楚了,再做自己的協(xié)議就比較簡(jiǎn)單了。
USB的概念歷史啥的這里就不說(shuō)了。我們先不管具體的數據包格式,這一節先從整個(gè)包的層面上簡(jiǎn)單的說(shuō),過(guò)程是這樣的,
---------------------------------------設備插入-------------------------------------------------------------
1) 主機會(huì )輪回查詢(xún)各個(gè)USB端口,主機檢測到D+與D-之間有電壓差,就認為有新的設置接入。主機等待100ms后發(fā)出復位請求。設備接到復位請求后將產(chǎn)生一個(gè)外部中斷信號。
---------------------------------------枚舉過(guò)程------------------------------------------------------------
2) 主機這時(shí)候只是知道有新的設備插入了,但是不知道插進(jìn)來(lái)個(gè)什么東西,所以就開(kāi)始詢(xún)問(wèn)它是什么設備,怎么用,負荷能力怎么樣。這個(gè)時(shí)侯就進(jìn)入了枚舉過(guò)程。因為剛剛插入的設備沒(méi)有分配地址,就用默認地址0,首先發(fā)送一個(gè)Get_descriptor(獲取設備描述符)指令包,設備接到包后就開(kāi)始解析包(其實(shí)就是你在固件程序里判斷處理) ,然后按固定格式返回自己設備的設備描述符,這一步主要是主機知道你的USB設備的基礎屬性,比如支持的傳輸數據長(cháng)度,電流負荷多少,支持那個(gè)USB版本,以及以后方便電腦找驅動(dòng)的PID,VID。
3) 這時(shí)候主機知道你(你做的設備,簡(jiǎn)稱(chēng)你吧)的數據長(cháng)度還有電流大小后,下一步就是給你分配一個(gè)屬于你的地址。
4) 給你一個(gè)地址后就開(kāi)始詢(xún)問(wèn)你的具體配置。首先發(fā)送一個(gè)試探性的設備配置請求Get_configuration(要求固定返回9個(gè)設備配置字),你接到后就開(kāi)始發(fā)送9字節的設備配置字,其中包括你的配置字的總長(cháng)度,這樣主機就知道你的配置到底有多長(cháng),然后再發(fā)一次設備配置請求,這時(shí)你就開(kāi)始上傳所有的配置字。這個(gè)時(shí)侯主機就已經(jīng)很明白你的工作方式就各種特性,然后就可以正常工作了
5) 如果你在前面的某些配置(以后章節詳細說(shuō)明)要求要說(shuō)明自己的名字什么的,這里還要上傳字符串描述符。
6) 如果是鼠標或者鍵盤(pán)還要上傳報告描述符
---------------------------------------正常數據階段------------------------------------------------------
7) 這個(gè)時(shí)侯你已經(jīng)被主機正式接受并且注冊了,你可以通過(guò)自己寫(xiě)測驅動(dòng)或通用驅動(dòng)與電腦進(jìn)行通訊了。

以上是簡(jiǎn)單的描述,詳細的后面章節再做介紹,學(xué)習一個(gè)東西關(guān)鍵是首先要知道這個(gè)東西是什么,簡(jiǎn)單的工作原理。對于USB的工作我這里做個(gè)比方,
主機好比一個(gè)公司,你就是USB設備,要進(jìn)入公司首先要面試(枚舉),你到了面試現場(chǎng)(第一次插入設備),面試官首先了解到你的外表,性別已經(jīng)你要應聘的崗位(設備描述符),然后給你一個(gè)號,以后就開(kāi)始按號叫人,當你被叫到就開(kāi)始問(wèn)你的專(zhuān)業(yè)知識,性格等(配置描述符),如果你比較合適(通過(guò)了枚舉)你就會(huì )錄取了,并且注冊一個(gè)你的信息到公司(驅動(dòng)安裝,并且寫(xiě)入注冊表)。等你下次來(lái)公司,只要把工號(PID,VID)報上,就知道是你來(lái)了。

初涉USB,初學(xué)者USB(2) 設備固件程序

二,實(shí)際數據過(guò)程測試
(圖片顏色顯示不出,可以到我博客http://blog.csdn.net/arthur05611/archive/2009/02/23/3929778.aspx)
這節主要是對固件里的USB請求處理有個(gè)概念,還有就是調試的方法。大篇幅的程序配合,如果不關(guān)心這一塊的話(huà)可以跳過(guò),呵呵。
為了更好的說(shuō)明整個(gè)USB啟動(dòng)過(guò)程,我們可以用串口實(shí)時(shí)的跟蹤各個(gè)USB中斷。不過(guò)這里先不用串口進(jìn)行測試,只是簡(jiǎn)單的用一組變量記錄過(guò)程。測試程序如下(以下會(huì )有程序的說(shuō)明):

uchar test[100];//100長(cháng)度的變量,記錄過(guò)程
uchar conters=0;//記錄計數值,
/*------------------------------------------------------------
高校電子聯(lián)盟--肖繼達
QQ:258347765
-------------------------------------------------------------*/

void EXT_int(void)//USB中斷響應函數
{
/*------------------------------------------------------------
Check interrupt status register to know interrupt
source.
------------------------------------------------------------*/

if (USB_BUSRESET_ASS_INT())
{ /* USB bus reset */
/* for USB Rev.1.1
After USB bus reset released, 10msec recoverly time we have.
Follwing request must be processed normally.
*/

CLR_BUS_RESET_STATE(); /* USB bus reset status clear */

/*------------------------------------------------------------
Endpoint0 setting
------------------------------------------------------------*/
/* Tx/Rx payload size setting */
/* Rx payload is fixed as 8-byte or 32-byte, therefor the
setting has no meaninig */

SET_PAYLOAD_EPn(EP0RX, device_descriptor.bMaxPacketSize0);
SET_PAYLOAD_EPn(EP0TX, device_descriptor.bMaxPacketSize0);
/* Stall bit, the value undefined after reset, cleared */
CLR_STALL_EPn(EP0);

/*------------------------------------------------------------<


上一頁(yè) 1 2 3 4 下一頁(yè)

關(guān)鍵詞: USB技術(shù) 入門(mén)總結

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>