以下是一個程序枚舉數(shù)據(jù)傳輸?shù)娜^程: (1) 當(dāng)設(shè)備與主機連接時,主機就會檢測到一個連接條件,并且D+的數(shù)據(jù)線被拉至Vse以上2.5微秒(30個全速數(shù)據(jù)比特周期),主機就開始進行總線復(fù)位。 (2) 主機使用默認地址(地址0)讀取設(shè)備描述符,在這里主機使用地址0對設(shè)備的設(shè)備描述符進行讀取。由于PDIUSBD12的端點0的緩沖區(qū)只有16個字節(jié),所以單片機就先發(fā)送16個字節(jié)的設(shè)備描述符。當(dāng)主機接收到這16個字節(jié)的字符后,就認為真正有設(shè)備連接了,即發(fā)送1個0字節(jié)的數(shù)據(jù)包到設(shè)備作為狀態(tài)應(yīng)答。 (3) 在地址分配階段里,主機分配給設(shè)備一個地址。在以后的通信里設(shè)備就只對這個地址的信息作出應(yīng)答。 (4) 分配好了設(shè)備地址后,主機就從新的地址獲取設(shè)備描述符。由于受PDIUSBD12芯片的限制,設(shè)備分2次把設(shè)備描述符經(jīng)過端點0發(fā)送出去,第一次發(fā)送16個字節(jié),第2次發(fā)送2個字節(jié)。最后主機發(fā)送0字節(jié)的數(shù)據(jù)包作為狀態(tài)應(yīng)答。 (5) 主機讀取完設(shè)備描述符后就讀取設(shè)備的配置描述符 (6) 主機除了讀取設(shè)備描述符和配置描述符外,還要讀取接口描述符和端口描述符。在這里主機使用再次讀取配置的方法來讀取配置描述符、接口描述符和端點描述符的集合。 (7) 主機讀取完描述符后,就需要對設(shè)備進行配置,使得設(shè)備從地址狀態(tài)進入配置狀態(tài)。 (8) 主機設(shè)置完配置以后,設(shè)備即可使用。主機有時會對設(shè)備的配置狀態(tài)進行讀取。 (9) 一個網(wǎng)友的例程:
本系統(tǒng)中所謂USB設(shè)備即是指溫度測量和控制的設(shè)備,設(shè)備采用USB總線供電,采用D12芯片內(nèi)置的SoftConnect技術(shù)與USB總線連接。所謂SoftConnect意思是在程序中通過向D12發(fā)送命令實現(xiàn)USB設(shè)備的連接或者斷開連接,這里的連接并不是指USB電纜的插上或拔出,相反USB連接可以重新初始化而不需要拔出電纜。
主機是通過檢測Vcc上拉電阻的變化來確定是否有設(shè)備連接的。在D12內(nèi)部集成了1.5kΩ的上拉電阻,默認狀態(tài)下不與Vcc相連,程序運行時可以向D12發(fā)送連接命令使1.5kΩ電阻連接到Vcc,這樣主機便檢測到有設(shè)備連接。 它的枚舉過程分析如下。 設(shè)備連接到總線后,設(shè)備從總線獲得5V電源,程序首先初始化,端口,然后向D12發(fā)出USB連接命令。主機檢測到設(shè)備連接。主機向設(shè)備發(fā)出第一個信號:總線復(fù)位??偩€復(fù)位產(chǎn)生一個中斷,并且D12器件在默認地址0處使能,以便在接下來的枚舉過程中使用地址0傳輸命令和數(shù)據(jù),同時中斷寄存器的總線復(fù)位位被置為1。在程序中的表現(xiàn)是,D12向主循環(huán)請求中斷,進入中斷處理程序USB_int_handler(),讀取中斷寄存器,確定中斷的類型,進行相應(yīng)的處理。 主機使用默認地址0讀取設(shè)備描述符。 具體過程是:主機向D12發(fā)送第一個Setup包,每個Setup包都是8個字節(jié),第一個包Get 當(dāng)主機接收到這16個字節(jié)的字符后,就認為真正有設(shè)備連接了。 地址分配。 主機向D12發(fā)送第二個Setup包,這是一個含有指定地址的數(shù)據(jù)包,其內(nèi)容一般為:00 主機從新的地址獲取設(shè)備描述符。 主機收到設(shè)備發(fā)來的空的應(yīng)答數(shù)據(jù)包后,確認地址分配成功。然后主機向D12發(fā)送第三個Setup包,再次要求獲取設(shè)備描述符。這個Setup包的內(nèi)容一般是:80 主機讀取配置描述符。 成功得到18字節(jié)的設(shè)備描述符后,主機向D12發(fā)送第四個Setup包,要求得到設(shè)備的配置描述符。這個Setup包的數(shù)據(jù)為:80 讀取描述符集合。 成功得到9字節(jié)的配置描述符后,主機向D12發(fā)送第五個Setup包,要求得到設(shè)備的配置描述符、接口描述符、端點描述符的集合。這次Setup包的內(nèi)容是:80 到這一步,主機現(xiàn)在應(yīng)該已經(jīng)發(fā)現(xiàn)新硬件并為新設(shè)備安裝好驅(qū)動程序。對于以上過程,主機是在總線驅(qū)動層處理,下面的一步,也是典型枚舉過程的最后一步,就需要設(shè)備驅(qū)動程序來做了。 數(shù)值配置。主機得到各種描述符之后,認為設(shè)備的信息已經(jīng)齊全,便對設(shè)備進行配置,使設(shè)備從地址狀態(tài)進入配置狀態(tài)。 主機向D12發(fā)送第六個Setup包,其數(shù)據(jù)為:00 至此,USB枚舉過程結(jié)束,設(shè)備可以正常使用了。在這個過程中D12指示燈根據(jù)通信的狀況間歇閃爍。 |
|
來自: lchjczw > 《USB驅(qū)動》