劉彥 黔南民族師范學(xué)院計(jì)算機(jī)科學(xué)系 558000
基于PDIUSBD12的USB接口設(shè)計(jì)應(yīng)用研究
劉彥 黔南民族師范學(xué)院計(jì)算機(jī)科學(xué)系 558000
USB設(shè)備的廣泛使用,使得USB接口的設(shè)計(jì)與開發(fā)越來越重要,PHILIPS公司的USB接口控制芯片PDIUSBD12性價(jià)比高簡單易用,是較為理想的USB接口設(shè)計(jì)開發(fā)芯片。文章主要從主機(jī)與PDIUSBD12之間的數(shù)據(jù)通信過程的層面來介紹USB設(shè)備的設(shè)計(jì)開發(fā)。
USB;PDIUSBD12;端點(diǎn);描述符
USB以其傳輸速度快、可靠性高、易于擴(kuò)展、功耗低等優(yōu)點(diǎn)已被廣泛地應(yīng)用在計(jì)算機(jī)外設(shè)中,已成為計(jì)算機(jī)與外設(shè)通信的主流接口。而PHILIPS公司的PDIUSBD12芯片以其價(jià)格便宜、接口方便、可靠性高等特點(diǎn)較為廣泛的在USB設(shè)備接口系統(tǒng)中被選用。PDIUSBD12芯片是純粹的USB接口芯片,僅負(fù)責(zé)處理USB的通信,設(shè)計(jì)時(shí)還必須要選用一個(gè)MCU來進(jìn)行協(xié)議處理和數(shù)據(jù)交換。
USB主機(jī)輪流查詢各個(gè)USB端口,當(dāng)USB設(shè)備插入U(xiǎn)SB端口時(shí)由PDIUSBD12內(nèi)部集成的上拉電阻使主機(jī)檢測到D+與D-之間有電壓差,就認(rèn)為有新的USB設(shè)置接入。
USB枚舉指的是USB主機(jī)從USB設(shè)備讀取USB的各種描述符信息,從而知道是什么設(shè)備,如何進(jìn)行通信等,然后根據(jù)這些信息來加載合適的驅(qū)動(dòng)程序。
主機(jī)檢測到有新的USB設(shè)置接入等待100ms后向USB設(shè)備發(fā)出復(fù)位請求,USB設(shè)備接到復(fù)位請求后,設(shè)置其地址為0,并產(chǎn)生一個(gè)外部中斷信號(hào)通知主機(jī),新接入的USB可以地址0來進(jìn)行通信,然后USB主機(jī)向地址為0的設(shè)備的端點(diǎn)0發(fā)送獲取設(shè)備描述符請求,設(shè)備收到該請求后,按固定格式返回一個(gè)端點(diǎn)0所支持的最大數(shù)據(jù)包的設(shè)備描述符給主機(jī)。由于PDIUSBD12的端點(diǎn)0只有16個(gè)字節(jié)(在所獲取的設(shè)備描述符的第8個(gè)字節(jié)處可看到PDIUSBD12端點(diǎn)0的最大包長),而標(biāo)準(zhǔn)的設(shè)備描述符為18字節(jié),這一次的請求只能獲取部分(16個(gè)字節(jié))設(shè)備描述符。
在第一次復(fù)位并獲取部分設(shè)備描述符后,USB主機(jī)再對設(shè)備復(fù)位一次,并往地址0的端點(diǎn)0發(fā)出一個(gè)SET_ADDRESS設(shè)置地址的請求(見表1),該地址是由USB主機(jī)負(fù)責(zé)分配并且是唯一的。USB設(shè)備在收到該地址后,返回0長度的狀態(tài)包,主機(jī)收到狀態(tài)包,就會(huì)返回一個(gè)應(yīng)答包ACK給設(shè)備。設(shè)備在收到這個(gè)ACK之后,就可以啟用新的地址了。這樣設(shè)備就分配到了一個(gè)唯一的設(shè)備地址,以后主機(jī)就可以通過它來進(jìn)行訪問該設(shè)備了。
表1 SET_ADDRESS請求的結(jié)構(gòu)
在USB設(shè)備啟用新地址后,USB主機(jī)重新向新地址發(fā)出獲取設(shè)備描述符的請求,這一次主機(jī)將分兩次從PDIUSBD12的端點(diǎn)0中獲取完整的18個(gè)字節(jié)(16+2)的設(shè)備描述符,從而獲知USB設(shè)備的基礎(chǔ)屬性,如支持的傳輸數(shù)據(jù)長度、所用USB協(xié)議版本、設(shè)備版本號(hào)、PID、VID等,設(shè)備描述符的結(jié)構(gòu)見表2。
在獲取完整的設(shè)備描述符之后,主機(jī)就會(huì)發(fā)送一個(gè)試探性的GET_CONFIGURATION獲取配置描述符的請求,USB設(shè)備收到該請求后就返回9字節(jié)的配置描述符(其結(jié)構(gòu)見表3)。
在第一次獲取配置描述符后,就可以知道配置描述符集合的總長度,然后再發(fā)一次GET_CONFIGURATION請求,這時(shí)主機(jī)將分三次從PDIUSBD12的端點(diǎn)0中獲取完整的34個(gè)字節(jié)(16+16+2)的配置描述符集合——9字節(jié)的配置描述符、9字節(jié)的接口描述符、9字節(jié)的HID描述符、7字節(jié)的端點(diǎn)描述符。
在獲取了必須的設(shè)備描述符和配置描述符集合后,還可選擇是否獲取字符串描述符和報(bào)告描述符。字符串描述符可表述所要顯示的設(shè)備信息的文字,報(bào)告描述符是USB HID設(shè)備用來傳送數(shù)據(jù)的,這里不作詳細(xì)介紹。
完成USB設(shè)備的枚舉后,主機(jī)就能知道USB設(shè)備工作方式的各種特性,正式識(shí)別USB設(shè)備并能與之進(jìn)行數(shù)據(jù)通信,就可以自己寫測驅(qū)動(dòng)或使用通用驅(qū)動(dòng)與計(jì)算機(jī)進(jìn)行通信了。
PDIUSBD12的驅(qū)動(dòng)程序設(shè)計(jì)主要實(shí)現(xiàn)三個(gè)功能:(1)初始化PDIUSBD12和與之相連的MCU,包括PDIUSBD12的復(fù)位和初始化全局變量;(2)在枚舉過程中為每一次的請求(如獲取設(shè)備描述符請求)編寫中斷服務(wù)程序;(3)用戶讀/寫端點(diǎn)的函數(shù)。
USB技術(shù)的日益成熟,越來越多的計(jì)算機(jī)外設(shè)使用USB接口,使得USB接口的設(shè)計(jì)開發(fā)顯得尤為重要,而設(shè)計(jì)開發(fā)USB接口設(shè)備必須對數(shù)據(jù)的通信過程有深入認(rèn)識(shí),本文以PDIUSBD12作為USB設(shè)備的接口控制芯片詳細(xì)深入地介紹了主機(jī)與USB接口間的數(shù)據(jù)通信過程,開發(fā)者可根據(jù)此過程編寫相應(yīng)的服務(wù)程序便可完成USB設(shè)備的開發(fā)。
表2 設(shè)備描述符的結(jié)構(gòu)
表3 設(shè)備描述符的結(jié)構(gòu)
[1]范曉青,袁中凡,歐協(xié)峰.PDIUSBD12的USB接口設(shè)計(jì)中的應(yīng)用[J].儀器儀表用戶.2009,2.
[2]張安生.PDIUSBD12在USB接口設(shè)計(jì)中的應(yīng)用探析[J].現(xiàn)代教育設(shè)備.2008,2.
[3]劉榮.圈圈教你玩USB[M].北京航空航天大學(xué)出版社.2009.
10.3969/j.issn.1001-8972.2010.09.055
劉彥(1977-),男(仡佬族),貴州都勻,黔南民族師范學(xué)院計(jì)算機(jī)科學(xué)系講師,研究方向?yàn)橛布夹g(shù)。