用MC68HC05JB4開(kāi)發(fā)USB外設(shè)
;;;; 摘 要: 結(jié)合USB手寫(xiě)板,介紹了用MC68HC05JB4等MOTOROLA單片機(jī)開(kāi)發(fā)USB設(shè)備的一般思路和具體方法。 ;;; 關(guān)鍵詞: 通用串行總線(USB) MC68HC05JB4 單片機(jī) 人機(jī)接口設(shè)備(HID) 通訊 掛起 喚醒 ;;; 當(dāng)今的計(jì)算機(jī)外部設(shè)備,都在追求高速度和高通用性。為了滿(mǎn)足用戶(hù)的需求,以Intel為首的七家公司于1994年推出了USB(Universal ; Serial; Bus,通用串行總線)總線協(xié)議,專(zhuān)用于低、中速的計(jì)算機(jī)外設(shè)。目前,USB端口已成為微機(jī)主板的標(biāo)準(zhǔn)端口;而在不久的將來(lái),所有的微機(jī)外設(shè),包括鍵盤(pán)、鼠標(biāo)、顯示器、打印機(jī)、數(shù)字相機(jī)、掃描儀和游戲柄等等,都將通過(guò)USB與主機(jī)相連。 ;;; 作為一個(gè)硬件廠商或是開(kāi)發(fā)者,最關(guān)心的便是如何去開(kāi)發(fā)USB外設(shè)。MOTOROLA公司從1996年開(kāi)始,陸續(xù)推出了一系列支持USB總線協(xié)議的單片機(jī),如最早的用于顯示器的68HC05BD9A,用于鼠標(biāo)的68HC05JB2,以及用于集線器(HUB)的MC141555等等。這些芯片共同的特點(diǎn)是都內(nèi)含一個(gè)USB模塊,通過(guò)這個(gè)模塊,用戶(hù)可以很方便地實(shí)現(xiàn)USB總線上的數(shù)據(jù)通訊。68HC05JB4最初是用于開(kāi)發(fā)USB游戲桿的,后來(lái)也常被用于其他一些USB外設(shè)的開(kāi)發(fā),比如USB手寫(xiě)板等等。它除了含有USB接口以外,還有6路8位A/D變換輸入端,4路鍵盤(pán)中斷掃描用輸入端,并可最多同時(shí)開(kāi)啟19個(gè)I/O端口。 ;;; 我們?cè)O(shè)計(jì)的USB漢字手寫(xiě)板,采用國(guó)內(nèi)漢王公司的傳感器獲得筆畫(huà)信息,傳給MC68HC05JB4,經(jīng)過(guò)整理后通過(guò)USB總線發(fā)送到PC,再由我們編寫(xiě)的驅(qū)動(dòng)程序接收,最終轉(zhuǎn)給漢王的文字識(shí)別軟件識(shí)別。 ;;; 1 USB總線系統(tǒng)硬件連接 ;;; USB通過(guò)一個(gè)四線電纜來(lái)傳輸信號(hào)與電源,如圖1所示。 ;;; 其中D+和D-是一對(duì)差模的信號(hào)線,而VBus和GND則提供了+5V的電源,它可以給一些設(shè)備?包括Hub?供電。USB提供了兩種數(shù)據(jù)傳輸率:一種是12Mb的高速?full speed?模式,另一種是1.5Mb的低速模式,這兩種模式可以同時(shí)存在于一個(gè)USB系統(tǒng)中(注:在新發(fā)布的2.0協(xié)議版本中,高速模式被定義為120~240M)。USB信號(hào)線在高速模式下必須使用帶有屏蔽的雙絞線,而且最長(zhǎng)不能超過(guò)5m;而在低速模式時(shí)可以使用非屏蔽電纜,甚至是非雙絞線,但最長(zhǎng)不能超過(guò)3m。為了與電纜阻抗匹配,在電纜的每一端都使用了非平衡終端匹配電阻。該電阻也保證了能夠檢測(cè)外設(shè)與端口的連接或分離,并且可以區(qū)分高速與低速設(shè)備。 ;;; 68HC05JB4只支持低速USB外設(shè)。它提供了兩個(gè)端口分別與電纜的D+、D-相連;同時(shí)提供了一個(gè)3.3V的參考電壓與D-相連。典型連接如圖2。圖中電阻電容的參數(shù)是我們?cè)赨SB手寫(xiě)板中采用的數(shù)值,其中1.5kΩ的電阻要求較高,阻值范圍必須是1.5kΩ±5%。由于電纜長(zhǎng)度有限,類(lèi)似電纜負(fù)載之類(lèi)的工作就不再需要開(kāi)發(fā)者去考慮了。 ;;; 2 USB總線系統(tǒng)軟件設(shè)計(jì) ;;; USB設(shè)備的軟件功能主要有兩點(diǎn):一是監(jiān)視設(shè)備的狀態(tài),自動(dòng)產(chǎn)生狀態(tài)信息和用戶(hù)命令信息;一是完成主機(jī)與設(shè)備之間的USB總線通訊,自動(dòng)處理主機(jī)的控制和查詢(xún)命令。 ;;; 前一功能與設(shè)備的具體工作方式有關(guān),與一般非USB設(shè)備的實(shí)現(xiàn)方法大體一致。唯一的區(qū)別是開(kāi)發(fā)者需要預(yù)先定義設(shè)備所屬的類(lèi)別和使用的協(xié)議。原因是,USB協(xié)議將設(shè)備分為不同的類(lèi)型,每個(gè)設(shè)備類(lèi)型都定義了類(lèi)似功能設(shè)備的共同行為和協(xié)議。例如HID(Human Interface; Device)人機(jī)接口設(shè)備主要指用于人控制計(jì)算機(jī)系統(tǒng)操作的器件,而電源設(shè)備(Power Device)則被定位為HID的子系統(tǒng)之一。對(duì)設(shè)備進(jìn)行分類(lèi)是為了消除不同硬件廠商之間的差異,以便于主機(jī)(PC)對(duì)設(shè)備進(jìn)行方便、統(tǒng)一的管理。相同類(lèi)型的設(shè)備都由一組標(biāo)準(zhǔn)定義的功能模塊組成。這樣主機(jī)與USB設(shè)備之間的通信就可以通過(guò)一些標(biāo)準(zhǔn)格式的數(shù)據(jù)包來(lái)完成。USB開(kāi)發(fā)者論壇發(fā)布了一系列USB設(shè)備的類(lèi)型定義,并配以相應(yīng)的使用說(shuō)明。如果開(kāi)發(fā)者需要了解HID及其子類(lèi)設(shè)備,可以查閱參考文獻(xiàn)[2][3]。 ;;; 開(kāi)發(fā)者還應(yīng)考慮的是主機(jī)的工作平臺(tái),比如Windows98/NT、Unix等等,原因是不同的系統(tǒng)對(duì)不同的設(shè)備的支持程度不同。例如在Windows98下,系統(tǒng)除了提供通用的USB設(shè)備的底層驅(qū)動(dòng)以外,還單獨(dú)