<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式USB的以太網(wǎng)應(yīng)用系統(tǒng)設(shè)計(jì)

          基于嵌入式USB的以太網(wǎng)應(yīng)用系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2010-03-16 來源:網(wǎng)絡(luò) 收藏
          3 軟件
            系統(tǒng)軟件主要由TCP/IP程序和兩個(gè)部分組成。系統(tǒng)程序通過收到的數(shù)據(jù)包的類型來進(jìn)行相應(yīng)的處理,完成特定的功能。例如通過遠(yuǎn)程登陸的方式瀏覽和修改本地?cái)?shù)據(jù),達(dá)到本地?cái)?shù)據(jù)網(wǎng)絡(luò)共享的目的。
          3.1 TCP/IP實(shí)現(xiàn)
            嵌入式TCP/IP實(shí)現(xiàn)包括控制器ENC28J60底層驅(qū)動(dòng)、TCP/IP協(xié)議。ENC28J60 可與許多主控制器上的SPI接口直接相連。此器件只支持SPI 的0,0模式。另外,SPI 端口要求SCK 在空閑狀態(tài)時(shí)為低電平,不支持時(shí)鐘極性選擇。在SCK 的每個(gè)上升沿移入數(shù)據(jù),命令和數(shù)據(jù)通過SI 引腳送入器件。 ENC28J60在SCK的下降沿從SO引腳輸出數(shù)據(jù)。當(dāng)執(zhí)行操作時(shí)CS 引腳必須保持低電平,當(dāng)操作完成時(shí)返回高電平[4]。
          3.1.1ENC28J60底層驅(qū)動(dòng)
            在使用ENC28J60發(fā)送和接收數(shù)據(jù)包前,必須對器件進(jìn)行初始化設(shè)置。根據(jù)應(yīng)用的不同,一些配置選項(xiàng)可能需要更改。通常初始化任務(wù)會(huì)在復(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)過足夠長的時(shí)間。(4)PHY初始化:PHY寄存器不能通過SPI控制接口直接訪問,而是通過一組帶有MIIM的特殊MAC控制寄存器來完成的。程序中在配置LED時(shí)用到了PHY寫函數(shù)。寫PHY寄存器時(shí),先將PHY寄存器的地址寫入MIREGADR,然后將要寫入高低8位的內(nèi)容分別寫入MIWRH、MIWRL即可。
            發(fā)送數(shù)據(jù)包時(shí),ENC28J60會(huì)自動(dòng)生成前導(dǎo)符和幀起始定界符。此外MAC還可以根據(jù)配置自動(dòng)生成填充和CRC字段。主控制器要生成所有其他幀字段,并將他們寫入緩沖器,以待發(fā)送。此外,ENC28J60還要求在待發(fā)送的數(shù)據(jù)包前添加一個(gè)包的控制字節(jié)。接收數(shù)據(jù)包時(shí)可以使用中斷的方式,也可以使用查詢的方式。由于本對實(shí)時(shí)性要求不是很高,故采用查詢的方式。如果有數(shù)據(jù)包到達(dá),ENC28J60將置位EIR寄存器的PTKIF位。程序運(yùn)行時(shí)不斷地查詢該位以判斷有無數(shù)據(jù)包到達(dá)。
          3.1.2 以太網(wǎng)數(shù)據(jù)包處理
            網(wǎng)絡(luò)協(xié)議通常是在不同的協(xié)議層上進(jìn)行開發(fā),每一層負(fù)責(zé)不同的通信功能。TCP/IP 協(xié)議是一組不同層次上的多個(gè)協(xié)議的組合。當(dāng)系統(tǒng)收到以太網(wǎng)的數(shù)據(jù)時(shí),數(shù)據(jù)就開始從協(xié)議中由數(shù)據(jù)鏈路層逐層剝離其中各層協(xié)議所加的首部。主程序按照以太網(wǎng)數(shù)據(jù)幀分用的思路進(jìn)行編制,程序框架如圖4所示。

          本文引用地址:http://www.ex-cimer.com/article/152024.htm

          圖4


          3.2 嵌入式實(shí)現(xiàn)[5-6]
            嵌入式軟件主要分成4個(gè)部分:SL811HS初始化、USB設(shè)備的識別及配置、海量存儲協(xié)議和FAT文件系統(tǒng)。SL811HS共有16個(gè)配置寄存器,其中00-04H、08H-0CH是USB-A、USB-B的工作配置寄存器,05H是控制寄存器1,06H是中斷使能寄存器,07H的各位均為保留位,0DH為狀態(tài)寄存器,0EH為SOF計(jì)數(shù)寄存器,0FH為SOF計(jì)數(shù)寄存器的高位和控制寄存器2。在SL811HS上電開始工作之后,首先將寄存器05H的第3位置1,延時(shí)30 ms后清零,便可以對USB總線復(fù)位;然后在06H寄存器中寫入61H,使能設(shè)備檢測中斷。
            當(dāng)有設(shè)備插入時(shí),會(huì)使SL811HS的D+管腳置高,SL811HS的寄存器0DH的第7位置1并產(chǎn)生中斷,系統(tǒng)會(huì)識別到有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)建文件、目錄和讀寫文件等,實(shí)現(xiàn)了USB設(shè)備網(wǎng)絡(luò)共享的目的。 但是由于不同USB設(shè)備的驅(qū)動(dòng)通常也不同,USB作為嵌入式應(yīng)用時(shí)不可能像PC機(jī)操作系統(tǒng)把所有的驅(qū)動(dòng)都裝上。但是隨著嵌入式技術(shù)的發(fā)展,可以采用網(wǎng)絡(luò)更新驅(qū)動(dòng)的方式,只要某種USB設(shè)備接上就可以通過更新系統(tǒng)的固件,達(dá)到識別該設(shè)備和使用該設(shè)備的目的。這也是本系統(tǒng)目前這也是本系統(tǒng)目前需要完善的地方。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();