【正文】
nderstanding and analysis, and ultimately the network card driver functionality. Solve the data receiving and processing within the transmitter. So as to provide an interface to the upper application. Finally, an example of bining theory to plete the realization of an embedded network card driver, introduction and application software development environment, from outline design to detailed design, coding. Keywords: Internet of Things。 Embedded systems目錄1. 緒 論 1. 問題的提出及研究背景 1. 物聯(lián)網(wǎng)概念的提出與發(fā)展 1. 嵌入式系統(tǒng)的概念與發(fā)展 1. 課題的提出 2. 本文研究目的及其意義 2. 論文的基本結(jié)構(gòu) 32. 解決問題的理論和方法 4. 網(wǎng)絡(luò)基本知識 4. OSI七層結(jié)構(gòu) 4. 以太網(wǎng)和IEEE 802封裝 5. SPI通信原理 6. SPI的基本概念 6. SPI的通信原理[5] 6. SPI傳輸數(shù)據(jù)的時序 7. SPI指令集 7. 網(wǎng)卡控制器 8. 網(wǎng)卡基本概念 8. 網(wǎng)卡接口的種類 8. 以太網(wǎng)控制器 9. 以太網(wǎng)控制器基本結(jié)構(gòu) 9. 網(wǎng)卡的功能 103. 解決問題的一個實例 12. 網(wǎng)卡的硬件架構(gòu)(MB96338 + ENC28J60) 12. 底層驅(qū)動程序的實現(xiàn) 12. 概要設(shè)計 12. 詳細(xì)設(shè)計 16. 編譯與測試 29. 編譯環(huán)境 29. 網(wǎng)卡驅(qū)動編譯 294. 總結(jié)與展望 30參考文獻(xiàn) 31致 謝 321. 緒 論. 問題的提出及研究背景. 物聯(lián)網(wǎng)概念的提出與發(fā)展物聯(lián)網(wǎng)(The Internet of things):通過射頻識別(RFID)、紅外感應(yīng)器、全球定位系統(tǒng)、激光掃描器等信息傳感設(shè)備[1],按約定的協(xié)議,把任何物品與互聯(lián)網(wǎng)連接起來,進(jìn)行信息交換和通訊,以實現(xiàn)智能化識別、定位、跟蹤、監(jiān)控和管理的一種網(wǎng)絡(luò)。開放創(chuàng)新、共同創(chuàng)新、大眾創(chuàng)新、用戶創(chuàng)新成為了知識社會環(huán)境下創(chuàng)新的新特征,技術(shù)更加展現(xiàn)其以人為本的一面,以人為本的創(chuàng)新隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展成為現(xiàn)實。這也是物聯(lián)網(wǎng)概念中強(qiáng)調(diào)的一點。上面提起的電飯鍋,其核心功能就是煮飯,若沒有這個功能了它將不會叫電飯鍋。生產(chǎn)成本也會因此成倍的增加。許多軟件方面的系統(tǒng)都實現(xiàn)了網(wǎng)絡(luò)模塊,甚至可以在設(shè)備上嵌入Web瀏覽器,真正實現(xiàn)隨時隨地用各種設(shè)備上網(wǎng)。這樣既浪費了資源又增加了產(chǎn)品的生產(chǎn)成本。. 本文研究目的及其意義目前隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的電子設(shè)備已經(jīng)將網(wǎng)絡(luò)接入功能作為其默認(rèn)配置,若是物聯(lián)網(wǎng)的能夠真正的發(fā)展起來,則上網(wǎng)應(yīng)該是所有物品必須具備的最基本的特性,不能上網(wǎng)的東西也許將會被淘汰。本文的意義在于了解通信的過程數(shù)據(jù)是怎么從一個設(shè)備傳輸?shù)搅硗庖粋€設(shè)備中的,網(wǎng)卡是如何工作的。從串口通信到網(wǎng)卡結(jié)構(gòu)及數(shù)據(jù)的傳輸。 ISO 發(fā)布的最著名的ISO標(biāo)準(zhǔn)是ISO/IEC 7498,將OSI/RM依據(jù)網(wǎng)絡(luò)的整個功能劃分成7個層次,以實現(xiàn)開放系統(tǒng)環(huán)境中的互連性,互操作性和應(yīng)用的可移植性。傳輸層(Transport Layer) 實現(xiàn)通信子網(wǎng)端到端的可靠傳輸(保證通信的質(zhì)量)。當(dāng)兩個計算機(jī)通過網(wǎng)絡(luò)進(jìn)行通信時,除了物理層之外(說明了只有物理層才有直接連接),其余各對等層之間均不存在直接的通信關(guān)系,而是通過各對等層的協(xié)議來進(jìn)行通信,如兩個對等的網(wǎng)絡(luò)層使用網(wǎng)絡(luò)層協(xié)議通信。. 以太網(wǎng)和IEEE 802封裝以太網(wǎng)這個術(shù)語一般是指數(shù)字設(shè)備公司( Digital Equipment Corp.)、英特爾公司( I n t e l C o r p .)和X e r o x公司在1 9 8 2年聯(lián)合公布的一個標(biāo)準(zhǔn)。幾年后, I E E E(電子電氣工程師協(xié)會) 8 0 2委員會公布了一個稍有不同的標(biāo)準(zhǔn)集,其中8 0 2 . 3針對整個C S M A / C D網(wǎng)絡(luò),8 0 2 . 4針對令牌總線網(wǎng)絡(luò), 8 0 2 . 5針對令牌環(huán)網(wǎng)絡(luò)。在T C P / I P世界中,以太網(wǎng)I P數(shù)據(jù)報的封裝是在RFC 894[Hornig 1984]中定義的,IEEE 802網(wǎng)絡(luò)的I P數(shù)據(jù)報封裝是在RFC 1042[Postel and Reynolds 1988]中定義的。如果主機(jī)能同時發(fā)送兩種類型的分組數(shù)據(jù),那么發(fā)送的分組必須是可以設(shè)置的,而且默認(rèn)條件下必須是RFC 894分組。SPI總線系統(tǒng)是一種同步串行外設(shè)接口,它可以使MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。也是所有基于SPI的設(shè)備共有的,它們是:SDO(數(shù)據(jù)輸出) – 主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入;SDI(數(shù)據(jù)輸入) – 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出; SCLK(時鐘) – 時鐘信號,由主設(shè)備產(chǎn)生;CS(片選)– 從設(shè)備使能信號,由主設(shè)備控制。通訊是通過數(shù)據(jù)交換完成的,這里先要知道SPI是串行通訊協(xié)議,也就是說數(shù)據(jù)是一位一位的傳輸?shù)?。這樣,在至少8次時鐘信號的改變(上沿和下沿為一次),就可以完成8位數(shù)據(jù)的傳輸。也就是說,主設(shè)備通過對SCK時鐘線的控制可以完成對通訊的控制??赡苓€沒有片選發(fā)送的從機(jī),我們就已經(jīng)迫不及待的將數(shù)據(jù)寫到發(fā)送寄存器中了。假設(shè)現(xiàn)在有一字節(jié)數(shù)據(jù)(01010101)寫進(jìn)8位發(fā)送寄存器中,上升沿發(fā)送、下降沿接收、高位先發(fā)送。. SPI指令集主控制器訪問網(wǎng)卡主要是通過SPI對網(wǎng)卡寫相應(yīng)的命令,然后通過SPI把需要訪問的數(shù)據(jù)傳給主控制器,或者主控制把自己的數(shù)據(jù)寫給網(wǎng)卡。 指令至少包含一個3 位操作碼和一個用于指定寄存器地址或數(shù)據(jù)常量的5 位參數(shù)。. 網(wǎng)卡接口的種類 RJ45接口:這是最為常見的一種網(wǎng)卡,也是應(yīng)用最廣的一種接口類型網(wǎng)卡,這主要得益于雙絞線以太網(wǎng)應(yīng)用的普及?! UI接口:這種接口類型的網(wǎng)卡對應(yīng)用于以粗同軸電纜為傳輸介質(zhì)的以太網(wǎng)或令牌網(wǎng)中,這種接口類型的網(wǎng)卡目前更是很少見。它能提供物理的傳輸速度達(dá)155Mbps?,F(xiàn)在,以太網(wǎng)一詞泛指所有采用CSMA/CD協(xié)議的局域網(wǎng)。收發(fā)器執(zhí)行物理層的大部分功能,其中包括沖突檢測及收發(fā)器電纜將收發(fā)器連接到工作站上。 全雙工:就是能夠同時接收與發(fā)送信號,譬如電話就是一種全雙工傳輸設(shè)備,我們在聽對方講話的同時,也可以發(fā)話給對方。. 以太網(wǎng)控制器基本結(jié)構(gòu)我們可以看看以太網(wǎng)控制器(ENC28J60)的結(jié)構(gòu): 以太網(wǎng)內(nèi)部結(jié)構(gòu)Fig. Ethernet internal structure其核心內(nèi)容是由三大塊寄存器組成:控制寄存器 控制寄存器提供主控制器和片內(nèi)以太網(wǎng)控制器邏輯電路之間的主要接口。所有存儲區(qū)的最后五個單元(1Bh 到1Fh)都指向同一組寄存器:EIE、EIR、ESTAT、ECON2 和ECON1。該緩沖器大小為8 KB,分成單獨的接收和發(fā)送緩沖空間。 共有32個PHY 地址單元,但只可使用其中的9 個。這些控制寄存器被稱為MII 寄存器。因此,網(wǎng)卡的一個重要功能就是要進(jìn)行串行/并行轉(zhuǎn)換。網(wǎng)卡還要能夠?qū)崿F(xiàn)以太網(wǎng)協(xié)議。當(dāng)網(wǎng)卡收到一個正確的幀時,它就使用中斷來通知該計算機(jī)并交付給協(xié)議棧中的網(wǎng)絡(luò)層。接收時將以太網(wǎng)的幀剝?nèi)ナ撞亢臀膊浚缓笏徒簧弦粚?; :主要是CSMA/CD(Carrier Sense Multiple Access with Collision Detection ,帶沖突檢測的載波監(jiān)聽多路訪問)協(xié)議的實現(xiàn); :即曼徹斯特編碼與譯碼。雙端口RAM緩沖器——用于接收和發(fā)送數(shù)據(jù)包。PHY(物理層)模塊——對雙絞線上的模擬數(shù)據(jù)進(jìn)行編碼和譯碼。如何實現(xiàn)呢?主要是通過設(shè)置網(wǎng)卡中的一些特定的寄存器。要發(fā)送的數(shù)據(jù)應(yīng)寫入未使用的空間。初始化發(fā)送緩沖器:應(yīng)通過寫ERXFCON寄存器使能或禁止相應(yīng)的接收過濾器。初始化PHY:對3個PHY模塊寄存器中的位進(jìn)行配置,已實現(xiàn)不同功能。s。先讀哪一個寄存器都可以。2. 將數(shù)據(jù)的低8 位寫入MIWRL 寄存器。在MII 操作完成后寫PHY 寄存器, 236。讀緩沖存儲器命令讀緩沖存儲器(Read Buffer Memory,RBM)命令允許主控制器從8 KB 發(fā)送和接收緩沖存儲器中讀取字節(jié)。 這樣主控制器可以從接收緩沖器中連續(xù)讀取數(shù)據(jù)包,而無須跟蹤何時需要折回。當(dāng)AUTOINC 被使能時,使用該方式就可以連續(xù)地從緩沖存儲器中順序讀取字節(jié)而無需多余的SPI 命令。 如果寫入地址1FFF 且AUTOINC 置1,則寫指針加1 指向0000h。 當(dāng)AUTOINC 被使能時,以該方式就可以連續(xù)地向緩沖存儲器寫入字節(jié)而無需多余的SPI 命令。 2. 將RCR 操作碼和隨后的5 位寄存器地址(A4 到A0)發(fā)送給ENC28J60;3. 讀控制寄存器的內(nèi)容; 5 位地址決定將使用當(dāng)前存儲區(qū)中32 個控制寄存器中的哪一個。寫控制寄存器的命令寫控制寄存器(Write Control Register,WCR)命令允許主控制器以任何次序?qū)懭隕TH、MAC 和MII 控制寄存器。在發(fā)送WCR 命令和地址后,發(fā)送要實際寫入的數(shù)據(jù),首先發(fā)送最高位。. 詳細(xì)設(shè)計1) 文件說明表 文件一覽表Table List of documents文件名描述與網(wǎng)卡相關(guān)的宏定義和函數(shù)聲明與網(wǎng)卡相關(guān)的操作和函數(shù)定義2) 函數(shù)一覽表表 函數(shù)一覽表Table Function List文件名函數(shù)簡稱函數(shù)名類型概要F1_1ENC28J60_Init接口網(wǎng)卡初始化F1_2write_ENC28J60_Phy內(nèi)部讀PHY寄存器F1_3read_ENC28J60_Buffer內(nèi)部讀緩存器F1_4read_ENC28J60_cmd內(nèi)部讀控制寄存器F1_5read_ENC28J60內(nèi)部切換Bank時讀控制寄存器F1_6set_ENC28J60_Bank內(nèi)部切換Bank區(qū)F1_7write_ENC28J60內(nèi)部切換Bank時寫控制寄存器F1_8write_ENC28J60_Buffer內(nèi)部些緩存區(qū)F1_9write_ENC28J60_cmd內(nèi)部寫控制寄存器F1_10receive_Packet接口接收數(shù)據(jù)包F1_11send_Packet接口發(fā)送數(shù)據(jù)包3) 函數(shù)調(diào)用關(guān)系└─F1_10 ├─F1_3 │ └─F1_5 │ └─F1_4 │ └─F1_6 │ └─F1_7 │ └─F1_9 │ └─F1_6└─F1_11 ├─F1_8 │ └─F1_7 │ └─F1_9 │ └─F1_6 函數(shù)調(diào)用關(guān)系Figure The relationship between function call4) 宏定義 使用宏定義一覽表Table List of use of macro definitions宏名值描述SUCCESS0x01函數(shù)調(diào)用成功返回值FAILED0x00函數(shù)調(diào)用失敗返回值INT8Uunsigned char八位無符號數(shù)INT16Uunsigned short十六位無符號數(shù)5) 數(shù)據(jù)結(jié)構(gòu)表 數(shù)據(jù)類型一覽表Table List of data types類型名描述Struct BUF{ BUF * B_Next;INT16U B_Len;Void *B_Data ;INT8U B_Type ;}B_Next用于指向下一段數(shù)據(jù)緩存。INT8U MACADDR[6]存儲6字節(jié)的本機(jī)MAC地址6) 函數(shù)設(shè)計表 receive_Packet函數(shù)Table receive_Packet function函數(shù)名稱void receive_Packet(INT8U * packet, INT32U maxlen)。參數(shù)參數(shù)類型COMMENT參數(shù)列表VoidVoid返回值VoidVoid功能說明初始化網(wǎng)卡制約和注意事項無異常處理無函數(shù)流程圖參見鏈接 表 SPI_Init函數(shù)Table SPI_Init function函數(shù)名稱void SPI_Init(void)。. 網(wǎng)卡驅(qū)動編譯首先在宿主機(jī)上編寫代碼,并用編譯器編譯代碼。其網(wǎng)絡(luò)結(jié)構(gòu)的組成必然有家庭網(wǎng)關(guān)。南京東大移動互聯(lián)技術(shù)有限公司研制的智能多媒體家庭網(wǎng)關(guān),就是以嵌入式Linux作為該嵌入式設(shè)備的操作系統(tǒng),設(shè)備之間的相互通信遵從藍(lán)牙通信協(xié)議,可以支持多個設(shè)備同時接入到固定電話網(wǎng)、國際互聯(lián)網(wǎng)等其它外部網(wǎng)絡(luò)。近來,基于這些協(xié)議的嵌入式產(chǎn)品層出不窮,包括各種電話系統(tǒng)、無線公文包、各類數(shù)字電子設(shè)備以及在電子商務(wù)中的應(yīng)用。參考文獻(xiàn)[1]寧煥生,王炳輝。第一版,2008年[3]鄧順國。第一版,2000年[5]SPI原理。在此向我的導(dǎo)師表示衷心的感謝!另外我還要感謝在實習(xí)期間,王金鵬老師和陳小東老師給我的幫助,給我不少這方面的資料,是我完成論文的重要力量