基于嵌入式USB的以太網應用系統設計
系統軟件主要由嵌入式TCP/IP程序和嵌入式USB兩個部分組成。系統程序通過收到的以太網數據包的類型來進行相應的處理,完成特定的功能。例如通過以太網遠程登陸的方式瀏覽和修改本地數據,達到本地數據網絡共享的目的。
3.1 嵌入式TCP/IP實現
嵌入式TCP/IP實現包括以太網控制器ENC28J60底層驅動、TCP/IP協議。ENC28J60 可與許多主控制器上的SPI接口直接相連。此器件只支持SPI 的0,0模式。另外,SPI 端口要求SCK 在空閑狀態時為低電平,不支持時鐘極性選擇。在SCK 的每個上升沿移入數據,命令和數據通過SI 引腳送入器件。 ENC28J60在SCK的下降沿從SO引腳輸出數據。當執行操作時CS 引腳必須保持低電平,當操作完成時返回高電平[4]。
3.1.1ENC28J60底層驅動
在使用ENC28J60發送和接收數據包前,必須對器件進行初始化設置。根據應用的不同,一些配置選項可能需要更改。通常初始化任務會在復位之后立即完成,并且不再需要更改。初始化任務主要包括:(1)初始化接收緩沖器:在接收數據包前,必須編程ERXST和ERXND指針來對接收緩沖器進行初始化。ERXST與ERXND之間的存儲空間專供接收硬件使用。(2)初始化發送緩沖器:所有未被用作接收緩沖器的存儲空間都將作為發送緩沖器,故不需要專門對發送緩沖器進行專門的初始化。(3)等待OST:如果在上電復位后立即進行初始化,應查詢ESTAT.CLKRDY位,確保在開始修改MAC和PHY寄存器前已經經過足夠長的時間。(4)PHY初始化:PHY寄存器不能通過SPI控制接口直接訪問,而是通過一組帶有MIIM的特殊MAC控制寄存器來完成的。程序中在配置LED時用到了PHY寫函數。寫PHY寄存器時,先將PHY寄存器的地址寫入MIREGADR,然后將要寫入高低8位的內容分別寫入MIWRH、MIWRL即可。
發送數據包時,ENC28J60會自動生成前導符和幀起始定界符。此外MAC還可以根據配置自動生成填充和CRC字段。主控制器要生成所有其他幀字段,并將他們寫入緩沖器,以待發送。此外,ENC28J60還要求在待發送的數據包前添加一個包的控制字節。接收數據包時可以使用中斷的方式,也可以使用查詢的方式。由于本設計對實時性要求不是很高,故采用查詢的方式。如果有數據包到達,ENC28J60將置位EIR寄存器的PTKIF位。程序運行時不斷地查詢該位以判斷有無數據包到達。
3.1.2 以太網數據包處理
網絡協議通常是在不同的協議層上進行開發,每一層負責不同的通信功能。TCP/IP 協議是一組不同層次上的多個協議的組合。當系統收到以太網的數據時,數據就開始從協議中由數據鏈路層逐層剝離其中各層協議所加的首部。主程序按照以太網數據幀分用的思路進行編制,程序框架如圖4所示。本文引用地址:http://www.j9360.com/article/152024.htm
圖4
3.2 嵌入式USB實現[5-6]
嵌入式USB軟件主要分成4個部分:SL811HS初始化、USB設備的識別及配置、海量存儲協議和FAT文件系統。SL811HS共有16個配置寄存器,其中00-04H、08H-0CH是USB-A、USB-B的工作配置寄存器,05H是控制寄存器1,06H是中斷使能寄存器,07H的各位均為保留位,0DH為狀態寄存器,0EH為SOF計數寄存器,0FH為SOF計數寄存器的高位和控制寄存器2。在SL811HS上電開始工作之后,首先將寄存器05H的第3位置1,延時30 ms后清零,便可以對USB總線復位;然后在06H寄存器中寫入61H,使能設備檢測中斷。
當有設備插入時,會使SL811HS的D+管腳置高,SL811HS的寄存器0DH的第7位置1并產生中斷,系統會識別到有USB設備插入,即可對USB設備進行配置了。通過標準設備請求函數ClearFeaure()、GetConfiguration()、GetDescriptor()、SetAddress()等函數完成對設備的配置。
本系統可以檢測U盤的狀態(如接入、拔出),通過網絡對U盤的訪問,包括創建文件、目錄和讀寫文件等,實現了USB設備網絡共享的目的。 但是由于不同USB設備的驅動通常也不同,USB作為嵌入式應用時不可能像PC機操作系統把所有的驅動都裝上。但是隨著嵌入式技術的發展,可以采用網絡更新驅動的方式,只要某種USB設備接上就可以通過更新系統的固件,達到識別該設備和使用該設備的目的。這也是本系統目前這也是本系統目前需要完善的地方。
評論