??? 摘 要:提出了基于LM3S316實(shí)現(xiàn)與PC機(jī)通訊的方法。給出了硬件實(shí)現(xiàn)及軟件設(shè)計(jì)思想。該方法使用微控制器仿真USB設(shè)備,降低了功耗、成本。
??? 關(guān)鍵詞:LM3S316;USB;PC機(jī)
?
??? USB(Universal Serial Bus)即通用串行總線,為計(jì)算機(jī)和外設(shè)間的數(shù)據(jù)通信提供了一個(gè)很好的解決方案, 具有傳輸速度快、連接靈活、使用方便等特點(diǎn)。作為一種高速的新型總線接口,USB支持即插即用設(shè)備,并能為外設(shè)提供電源且易于擴(kuò)展。因此,可廣泛應(yīng)用于打印機(jī)、掃描儀、大容量外部數(shù)據(jù)存儲(chǔ)器、數(shù)碼相機(jī)和高速數(shù)據(jù)采集等多種設(shè)備中?,F(xiàn)在市場(chǎng)上USB設(shè)備多是由專門的USB控制芯片來實(shí)現(xiàn)其應(yīng)用控制,芯片內(nèi)集成了USB協(xié)議,成本較高。本文提出用LM3S316微處器來實(shí)現(xiàn)其與PC機(jī)通訊的方法,以實(shí)現(xiàn)仿真USB,從而降低成本。
1 通用串行總線USB的底層結(jié)構(gòu)
1.1 USB設(shè)備
??? USB設(shè)備可以接在PC上任意的USB接口,其物理接口的結(jié)構(gòu)如圖1(a)所示。使用HUB還可以實(shí)現(xiàn)USB的擴(kuò)展,使更多的USB設(shè)備連接到系統(tǒng)中。USB的HUB上有一個(gè)上行的端口(連到Host),有多個(gè)下行端口用來連接到其他設(shè)備。Host和USB設(shè)備之間的關(guān)系如圖1(b)所示。
?
1.2 USB的物理信號(hào)
??? USB的電纜共有4根線,兩邊突出的為+5 V的電源線,另外2根是數(shù)據(jù)線。如圖2所示,VBUS是設(shè)備供電接線,電壓+5 V,最大供電電流500 mA,向設(shè)備提供電源。具有過流保護(hù)、供電控制等功能。
?
??? 當(dāng)USB設(shè)備插入接口時(shí)電源線先接通然后再接通數(shù)據(jù)線,拔出時(shí)先斷開數(shù)據(jù)線再斷開電源線,這正是USB設(shè)備可熱拔插的原因之一。USB總線可以在不使用時(shí)掛起,節(jié)約能源。
1.3 USB版本
??? 常規(guī)USB通訊協(xié)議有USB1.1、USB2.0。USB1.1版本的USB設(shè)備,支持全速12 Mb/s低速通訊(1.5 Mb/s);USB2.0版本的USB設(shè)備,支持高速通訊(480 Mb/s)。由于USB2.0的通訊速率太高,必須由單獨(dú)芯片控制,所以芯片仿真無法實(shí)現(xiàn)。
1.4 通訊建立?
??? 串口通訊另一個(gè)標(biāo)準(zhǔn)RS232的通訊發(fā)起方可以從兩端發(fā)起,而USB通訊發(fā)起方總是在主機(jī)端(HOST),設(shè)備端總是響應(yīng)主機(jī)端的通訊請(qǐng)求。主機(jī)端如果是PC機(jī),每隔1ms發(fā)起一次對(duì)一個(gè)設(shè)備的通訊建立請(qǐng)求,設(shè)備接收到訪問己方請(qǐng)求后,立即與主機(jī)建議起通訊連接。
1.5 電氣特性
??? “D-是低速信號(hào)總線,D+是高速信號(hào)總線”的說法是不準(zhǔn)確的,因?yàn)閁SB信號(hào)總線是平衡差分式的,這點(diǎn)類似于485總線。所謂“D-是低速信號(hào)總線”是指對(duì)于低速設(shè)備(如鼠標(biāo)、鍵盤) 時(shí),D-這條線在USB設(shè)備端加1.5 kΩ上拉電阻。反之對(duì)于全速設(shè)備(如U盤、打印機(jī)、掃描儀),D+信號(hào)線加1.5 kΩ上拉電阻。
1.6 NRZI編碼及位填充
??? 由于USB總線沒有同步時(shí)鐘信號(hào)線,想要主機(jī)與設(shè)備建立良好通訊同步效果,只有從數(shù)據(jù)序列中提取同步時(shí)鐘。類似RS232串口通訊,USB通訊的建立也有起始信息,RS232是一個(gè)起始位,而USB起始位有8位,稱之為同步域(或段)格式為01010100。由于RS232的通訊速率較低,所以兩端同步時(shí)鐘不大于5%即可實(shí)現(xiàn)良好通訊。然而USB通訊最低速率也大于1 Mb/s,對(duì)于時(shí)鐘的同步要求嚴(yán)格得多,況且USB的數(shù)據(jù)包中的每個(gè)字節(jié)不象RS232每個(gè)字節(jié)都有起始位(僅在包頭有同步域)。鑒此,USB通訊時(shí)必須在數(shù)據(jù)包的位序列中提取同步信息。想象一下,如果數(shù)據(jù)包序列中數(shù)據(jù)位全是邏輯“1”或者全是邏輯“0”,芯片是無法提取同步信息的,為此需要一個(gè)高效的編碼方案,于是就有了NRZI和位填充概念。何謂NRZI,如圖3所示,NRZI是非“1”跳變。
?
?
??? 對(duì)于NRZI編碼方式會(huì)遇到一個(gè)嚴(yán)重的問題,即若一長(zhǎng)串連續(xù)的“1”將會(huì)導(dǎo)致無電平跳變,逐漸地累積,以致引起機(jī)收起,最終丟失同步信號(hào),使得讀取的時(shí)序發(fā)生嚴(yán)重的錯(cuò)誤。因此,在NRZI編碼之間,還需執(zhí)行所謂的位填充(bit-stuffing)工作。連續(xù)地傳輸6個(gè)“1”位,強(qiáng)制在NRZI編碼的數(shù)據(jù)流中加入跳變。這就確保接收器至少可以在每7 bit的時(shí)間間隔內(nèi)檢測(cè)到一次跳變,使接收器和傳送的數(shù)據(jù)保持同步。圖4說明了位填充的工作方式。
?
?
1.7 USB通訊模式
??? 4種傳輸方式:控制(control)、同步(isochronous)、中斷(interrupt)、大量(bulk)。
??? 其中中斷方式傳輸主要用于定時(shí)查詢?cè)O(shè)備是否有中斷數(shù)據(jù)要傳送。設(shè)備的端點(diǎn)模式器的結(jié)構(gòu)決定了它的查詢頻率,這種傳輸方式的典型應(yīng)用在少量的、分散的、不可預(yù)測(cè)數(shù)據(jù)的傳輸。鍵盤、操縱桿和鼠標(biāo)就屬于這一類型。中斷方式傳送是單向的,并且對(duì)于host來說只有輸入的方式。
1.8 包的概念
??? 一個(gè)最小的USB數(shù)據(jù)塊叫做包(packet),它包括同步信號(hào)、包標(biāo)識(shí)(packet ID)、CRC和傳送的數(shù)據(jù)。
1.9 端點(diǎn)
??? 端點(diǎn)也可稱為設(shè)備終端,每個(gè)USB設(shè)備(USB芯片)內(nèi)可以有1~16個(gè)端點(diǎn)。相對(duì)USB芯片而言,各端點(diǎn)在通訊中功能傳輸?shù)臄?shù)據(jù)包的大小和傳輸模式有所不同,在芯片內(nèi)數(shù)據(jù)緩沖區(qū)的地址也有所變化。
2? LM3S316控制器
??? Luminary Micro StellarisTM系列的微控制器是首款基于ARM CortexTM-M3的控制器,它將高性能的32位計(jì)算引入到對(duì)價(jià)格敏感的嵌入式微控制器應(yīng)用中。這些堪稱先鋒的器件擁有與8位和16位器件相同的價(jià)格,卻能為用戶提供32位器件的性能,而且所有器件都以小型封裝形式提供。
??? Stellaris系列的LM3S316微控制器擁有ARM微控制器所具有的眾多優(yōu)點(diǎn),如擁有廣泛使用的開發(fā)工具、片上系統(tǒng)(SoC)的底層結(jié)構(gòu)IP的應(yīng)用,以及眾多的用戶群體。此外,控制器還采用了ARM可兼容Thumb的Thumb-2指令集來降低內(nèi)存需求量,進(jìn)而降低成本。 與早期的ARM7相比較,功耗更低、中斷延時(shí)更小、代碼執(zhí)行速度更快、價(jià)格更低。
??? LM3S316微控制器具有如下特性:
??? (1) 32位RISC性能;
??? (2) 內(nèi)部16 KB單周期Flash存儲(chǔ)器,4 KB單周期SRAM;
??? (3) 3個(gè)通用定時(shí)器;
??? (4) 同步串行接口(SCI);
??? (5) 串行UART接口;
??? (6) 3個(gè)獨(dú)立的模擬比較器;
??? (7) PWM;
??? (8) 3~36個(gè)可配置的GPIO,每個(gè)GPIO都可配置邊沿或電平觸發(fā)中斷;
??? (9) 48腳LQFP封裝。
3 實(shí)現(xiàn)原理
??? 由于LM3S316控制器每個(gè)GPIO都可配置為中斷引腳,所以在這個(gè)應(yīng)用中只需要用2個(gè)同Port的相鄰引腳仿真USB的D+和D-,如圖5所示。
4 軟件設(shè)計(jì)
??? USB總線屬一種輪訊方式的總線,主機(jī)控制端口初始化所有的數(shù)據(jù)傳輸。
??? 每一總線執(zhí)行動(dòng)作最多傳送3個(gè)數(shù)據(jù)包。按照傳輸前制定好的原則,在每次傳送開始時(shí),主機(jī)控制器發(fā)送一個(gè)描述傳輸運(yùn)作的種類、方向、USB設(shè)備地址和終端號(hào)的USB數(shù)據(jù)包,這個(gè)數(shù)據(jù)包通常稱為標(biāo)志包(token packet)。USB設(shè)備從解碼后的數(shù)據(jù)包的適當(dāng)位置取出屬于自己的數(shù)據(jù)。數(shù)據(jù)傳輸方向不是從主機(jī)到設(shè)備就是從設(shè)備到主機(jī)。在傳輸開始時(shí),由標(biāo)志包來標(biāo)志數(shù)據(jù)的傳輸方向,然后發(fā)送端開始發(fā)送包含信息的數(shù)據(jù)包或表明沒有數(shù)據(jù)傳送。接收端也要相應(yīng)發(fā)送一個(gè)握手的數(shù)據(jù)包表明是否傳送成功。發(fā)送端和接收端之間的USB數(shù)據(jù)傳輸,在主機(jī)和設(shè)備的端口之間,可視為一個(gè)通道。 事務(wù)預(yù)處理允許對(duì)一些數(shù)據(jù)流的通道進(jìn)行控制,從而在硬件級(jí)上防止了對(duì)緩沖區(qū)的高估或低估,通過發(fā)送不確認(rèn)握手信號(hào)從而阻塞了數(shù)據(jù)的傳輸速度。當(dāng)不確認(rèn)信號(hào)發(fā)過后,若總線有空閑,數(shù)據(jù)傳輸將再做一次。這種流控制機(jī)制允許靈活的任務(wù)安排,可使不同性質(zhì)的流通道同時(shí)正常工作,這樣多種流通??稍诓煌g隔進(jìn)行工作,傳送不同大小的數(shù)據(jù)包。
??? LM3S316芯片利用2個(gè)GPIO的中斷監(jiān)控USB總線,當(dāng)USB總線從空閑狀態(tài)變?yōu)閭鬏敔顟B(tài),也就是總線由主機(jī)發(fā)起與同步域(SYN),LM3S316進(jìn)入U(xiǎn)SB接收程序。略過同步階段,收到的第一個(gè)字節(jié)是PID字段(包標(biāo)識(shí)類型)。這字段的低4位描述此包類型方向(IN或OUT),接下來7位表示設(shè)備的地址,然后是4位端點(diǎn)號(hào)索引。LM3S316根據(jù)設(shè)備地址判定主機(jī)向本設(shè)備發(fā)起的請(qǐng)求,如果是則根據(jù)包的類型決定繼續(xù)接收數(shù)據(jù)或向主機(jī)發(fā)送數(shù)據(jù)。對(duì)OUT類型數(shù)據(jù)的后5~16位是CRC校驗(yàn)(根據(jù)配置決定CRC的位數(shù))。對(duì)IN類型,LM3S316將準(zhǔn)備好數(shù)據(jù)連同CRC校驗(yàn)數(shù)據(jù)一同發(fā)往主機(jī)。數(shù)據(jù)傳輸階段完成后,主機(jī)或設(shè)備要發(fā)回ACK響應(yīng),確認(rèn)傳輸成功。
??? 使用LM3S316控制器仿真USB設(shè)備的方法,極大地方便了用戶的開發(fā),同時(shí)降低了功耗、成本。本方法在USB讀卡器、USB編程器、USB接口轉(zhuǎn)RS232等方面具有良好的應(yīng)用前景。
參考文獻(xiàn)
[1]?Micro 2005.LM3S316數(shù)據(jù)手冊(cè).http://www.zlgmcu.com/luminary/stellaris/lm3S316_ds_cn.pdf.2008.
[2]?USB技術(shù)大全(電子教程).http://d.download.csdm.net/down/374639/deepbluesean.2007.
[3]?郭佑民,王杰,孫啟國(guó). 基于嵌入式微處理器S3C44B0X的USB通信[J].微計(jì)算機(jī)信息,2008(1-2):21-23.
[4]?肖踞雄.USB系統(tǒng)結(jié)構(gòu)與應(yīng)用設(shè)計(jì)[OL].論文天下論文網(wǎng),http://www.lunwentianxia.am/product.free.6096001.2007.11.