摘 要: 介紹了一種基于ARM7實現(xiàn)的通過以太網(wǎng)訪問嵌入式USB的方法,。利用該方法可以通過網(wǎng)絡(luò)對不具備聯(lián)網(wǎng)功能的USB設(shè)備進(jìn)行操作,,達(dá)到USB設(shè)備網(wǎng)絡(luò)共享的目的。
關(guān)鍵詞: 嵌入式,;USB,;以太網(wǎng)
隨著USB技術(shù)的迅速發(fā)展,人們對USB的期望也越來越高,。雖然USB技術(shù)在臺式計算機(jī)領(lǐng)域的地位已經(jīng)固如磐石,,但是由于其以主機(jī)為中心的拓?fù)浣Y(jié)構(gòu),任何一次USB的數(shù)據(jù)傳輸都必須由主機(jī)來發(fā)起和控制,,所有的 USB設(shè)備都只能與主機(jī)建立連接,。不僅如此,軟件復(fù)雜性以及較高的功率要求,,使得人們對嵌入式設(shè)備中使用USB的興趣與日俱增[1],。嵌入式USB結(jié)合以太網(wǎng)技術(shù)可以將USB設(shè)備轉(zhuǎn)換到TCP/IP,讓USB 設(shè)備不再受距離限制,可以通過網(wǎng)絡(luò)隨時隨地訪問USB設(shè)備,,可以讓一個USB設(shè)備供多個用戶使用,從而提高USB設(shè)備的利用率,。通過使USB設(shè)備具備聯(lián)網(wǎng)能力的設(shè)備聯(lián)網(wǎng)服務(wù)器,可以實現(xiàn)聯(lián)網(wǎng)使用USB存儲,、USB視頻和USB打印等,。本文提出了一種利用ARM7來實現(xiàn)嵌入式USB的方法,,并結(jié)合以太網(wǎng)應(yīng)用技術(shù),使得通過網(wǎng)絡(luò)可以方便地訪問USB設(shè)備,。
1 系統(tǒng)組成及工作原理
系統(tǒng)硬件結(jié)構(gòu)如圖1所示,系統(tǒng)采用LPC2148控制嵌入式SL811HS和ENC28J60,實現(xiàn)了USB設(shè)備與以太網(wǎng)的連接,,便于USB設(shè)備的網(wǎng)絡(luò)共享和數(shù)據(jù)的遠(yuǎn)距離傳輸,。SL811HS主要實現(xiàn)USB HOST的功能,,它能夠識別USB設(shè)備,并能夠?qū)υ撛O(shè)備進(jìn)行讀寫操作,。ENC28J60主要完成系統(tǒng)的網(wǎng)絡(luò)通信,,實現(xiàn)對系統(tǒng)USB設(shè)備的遠(yuǎn)程訪問,。
2 系統(tǒng)模塊設(shè)計[2-3]
LPC2148是一個支持實時仿真和跟蹤的16/32位ARM7TDMI-STM CPU的微控制器,,并帶有512KB嵌入的高速片內(nèi)Flash存儲器,。片內(nèi)128位寬度的存儲器接口和獨特的加速結(jié)構(gòu)使32位代碼能夠在最大的時鐘頻率下運行,。對代碼規(guī)模有嚴(yán)格控制的應(yīng)用可以使用16位Thumb模式將代碼降低超過30%,,而犧牲的性能卻很小,。LPC2148具有較小的64腳封裝,,最多可以使用46個GPIO,。其極低的功耗、多個32位定時器,、多路10位ADC,、1路DAC以及豐富的接口使其特別適合于工業(yè)控制,、醫(yī)療系統(tǒng),、訪問控制嵌入式MODEM等各種類型的應(yīng)用,。選用LPC2148的原因是它片內(nèi)集成了Flash,、RAM、SPI接口,,使得外圍電路簡單,,性價比高。
ENC28J60是美國微芯科技公司于2005年推出的全球首枚28引腳獨立以太網(wǎng)控制器,,可為嵌入式應(yīng)用提供低引腳數(shù),、低成本且高效易用的遠(yuǎn)程通信解決方案。此外,,ENC28J60以太網(wǎng)控制器采用業(yè)界標(biāo)準(zhǔn)的SPI串行接口,,只需很少的連線即可與主控芯片機(jī)連接,使如圖2所示,。其中的CS和RESET接到主控芯片是為了使軟件設(shè)計更靈活,。
SL811HS是Cypress公司設(shè)計的嵌入式USB主機(jī)設(shè)備控制器,在嵌入式系統(tǒng)中應(yīng)用很廣泛,,能通過軟件控制選擇主從方式,,支持低速和全速傳輸并自動檢測低速或全速設(shè)備,通過A0區(qū)分地址和數(shù)據(jù),,并支持地址自增模式,。SL811HS與主控芯片的接口電路如圖3所示。
3 軟件設(shè)計
系統(tǒng)軟件主要由嵌入式TCP/IP程序和嵌入式USB兩個部分組成,。系統(tǒng)程序通過收到的以太網(wǎng)數(shù)據(jù)包的類型來進(jìn)行相應(yīng)的處理,,完成特定的功能。例如通過以太網(wǎng)遠(yuǎn)程登陸的方式瀏覽和修改本地數(shù)據(jù),,達(dá)到本地數(shù)據(jù)網(wǎng)絡(luò)共享的目的,。
3.1 嵌入式TCP/IP實現(xiàn)
嵌入式TCP/IP實現(xiàn)包括以太網(wǎng)控制器ENC28J60底層驅(qū)動、TCP/IP協(xié)議,。ENC28J60 可與許多主控制器上的SPI接口直接相連,。此器件只支持SPI 的0,0模式。另外,,SPI 端口要求SCK 在空閑狀態(tài)時為低電平,,不支持時鐘極性選擇。在SCK 的每個上升沿移入數(shù)據(jù),,命令和數(shù)據(jù)通過SI 引腳送入器件,。 ENC28J60在SCK的下降沿從SO引腳輸出數(shù)據(jù)。當(dāng)執(zhí)行操作時CS 引腳必須保持低電平,,當(dāng)操作完成時返回高電平[4],。
3.1.1ENC28J60底層驅(qū)動
在使用ENC28J60發(fā)送和接收數(shù)據(jù)包前,必須對器件進(jìn)行初始化設(shè)置,。根據(jù)應(yīng)用的不同,,一些配置選項可能需要更改。通常初始化任務(wù)會在復(fù)位之后立即完成,,并且不再需要更改,。初始化任務(wù)主要包括:(1)初始化接收緩沖器:在接收數(shù)據(jù)包前,必須編程ERXST和ERXND指針來對接收緩沖器進(jìn)行初始化,。ERXST與ERXND之間的存儲空間專供接收硬件使用,。(2)初始化發(fā)送緩沖器:所有未被用作接收緩沖器的存儲空間都將作為發(fā)送緩沖器,,故不需要專門對發(fā)送緩沖器進(jìn)行專門的初始化。(3)等待OST:如果在上電復(fù)位后立即進(jìn)行初始化,,應(yīng)查詢ESTAT.CLKRDY位,,確保在開始修改MAC和PHY寄存器前已經(jīng)經(jīng)過足夠長的時間。(4)PHY初始化:PHY寄存器不能通過SPI控制接口直接訪問,,而是通過一組帶有MIIM的特殊MAC控制寄存器來完成的,。程序中在配置LED時用到了PHY寫函數(shù)。寫PHY寄存器時,,先將PHY寄存器的地址寫入MIREGADR,,然后將要寫入高低8位的內(nèi)容分別寫入MIWRH、MIWRL即可,。
發(fā)送數(shù)據(jù)包時,,ENC28J60會自動生成前導(dǎo)符和幀起始定界符。此外MAC還可以根據(jù)配置自動生成填充和CRC字段,。主控制器要生成所有其他幀字段,,并將他們寫入緩沖器,以待發(fā)送,。此外,,ENC28J60還要求在待發(fā)送的數(shù)據(jù)包前添加一個包的控制字節(jié)。接收數(shù)據(jù)包時可以使用中斷的方式,,也可以使用查詢的方式,。由于本設(shè)計對實時性要求不是很高,故采用查詢的方式,。如果有數(shù)據(jù)包到達(dá),,ENC28J60將置位EIR寄存器的PTKIF位。程序運行時不斷地查詢該位以判斷有無數(shù)據(jù)包到達(dá),。
3.1.2 以太網(wǎng)數(shù)據(jù)包處理
網(wǎng)絡(luò)協(xié)議通常是在不同的協(xié)議層上進(jìn)行開發(fā),,每一層負(fù)責(zé)不同的通信功能。TCP/IP 協(xié)議是一組不同層次上的多個協(xié)議的組合,。當(dāng)系統(tǒng)收到以太網(wǎng)的數(shù)據(jù)時,,數(shù)據(jù)就開始從協(xié)議中由數(shù)據(jù)鏈路層逐層剝離其中各層協(xié)議所加的首部。主程序按照以太網(wǎng)數(shù)據(jù)幀分用的思路進(jìn)行編制,,程序框架如圖4所示,。
圖4
3.2 嵌入式USB實現(xiàn)[5-6]
嵌入式USB軟件主要分成4個部分:SL811HS初始化、USB設(shè)備的識別及配置,、海量存儲協(xié)議和FAT文件系統(tǒng),。SL811HS共有16個配置寄存器,其中00-04H,、08H-0CH是USB-A,、USB-B的工作配置寄存器,05H是控制寄存器1,,06H是中斷使能寄存器,,07H的各位均為保留位,0DH為狀態(tài)寄存器,,0EH為SOF計數(shù)寄存器,,0FH為SOF計數(shù)寄存器的高位和控制寄存器2。在SL811HS上電開始工作之后,,首先將寄存器05H的第3位置1,,延時30 ms后清零,便可以對USB總線復(fù)位,;然后在06H寄存器中寫入61H,,使能設(shè)備檢測中斷。
當(dāng)有設(shè)備插入時,,會使SL811HS的D+管腳置高,,SL811HS的寄存器0DH的第7位置1并產(chǎn)生中斷,系統(tǒng)會識別到有USB設(shè)備插入,,即可對USB設(shè)備進(jìn)行配置了,。通過標(biāo)準(zhǔn)設(shè)備請求函數(shù)ClearFeaure()、GetConfiguration(),、GetDescriptor(),、SetAddress()等函數(shù)完成對設(shè)備的配置。
本系統(tǒng)可以檢測U盤的狀態(tài)(如接入,、拔出),,通過網(wǎng)絡(luò)對U盤的訪問,包括創(chuàng)建文件,、目錄和讀寫文件等,,實現(xiàn)了USB設(shè)備網(wǎng)絡(luò)共享的目的。 但是由于不同USB設(shè)備的驅(qū)動通常也不同,,USB作為嵌入式應(yīng)用時不可能像PC機(jī)操作系統(tǒng)把所有的驅(qū)動都裝上,。但是隨著嵌入式技術(shù)的發(fā)展,可以采用網(wǎng)絡(luò)更新驅(qū)動的方式,,只要某種USB設(shè)備接上就可以通過更新系統(tǒng)的固件,,達(dá)到識別該設(shè)備和使用該設(shè)備的目的。這也是本系統(tǒng)目前這也是本系統(tǒng)目前需要完善的地方,。
參考文獻(xiàn)
[1] 張念淮.USB總線接口開發(fā)指南[M].北京:國防工業(yè)大學(xué)出版社,,2002.
[2] 周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2005.
[3] 馬文華.嵌入式系統(tǒng)設(shè)計與開發(fā)[M].北京:科學(xué)出版社,2006.
[4] 高傳善. 數(shù)據(jù)通信與計算機(jī)網(wǎng)絡(luò)[M].北京:高等教育出版社,,2006.
[5] 姚玲,曾春年,黃利權(quán).基于嵌入式 USB主機(jī)的 CAN網(wǎng)絡(luò)數(shù)據(jù)記錄系統(tǒng)的設(shè)計與實現(xiàn)[J]. 電氣應(yīng)用,2006,25(3) 56-58.
[6] 陳斯敏, 植 涌.基于SL811的嵌入式 USB主機(jī)設(shè)計[J]. 四川理工學(xué)院學(xué)報,2005,,18(2);7-9.