當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]1前言嵌入式以太網(wǎng)開(kāi)發(fā),可以分為兩個(gè)部分,一個(gè)是以太網(wǎng)收發(fā)芯片的使用,一個(gè)是嵌入式以太網(wǎng)協(xié)議棧的實(shí)現(xiàn)。以太網(wǎng)收發(fā)芯片的使用要比串口收發(fā)芯片的使用復(fù)雜的多,市面上流通比較廣泛的以太網(wǎng)收發(fā)芯片種類還不少,有

1前言
嵌入式以太網(wǎng)開(kāi)發(fā),可以分為兩個(gè)部分,一個(gè)是以太網(wǎng)收發(fā)芯片的使用,一個(gè)是嵌入式以太網(wǎng)協(xié)議棧的實(shí)現(xiàn)。以太網(wǎng)收發(fā)芯片的使用要比串口收發(fā)芯片的使用復(fù)雜的多,市面上流通比較廣泛的以太網(wǎng)收發(fā)芯片種類還不少,有SPI接口的ENC28J60,也有并口形式的RTL8019S,CS8900A等。嵌入式以太網(wǎng)協(xié)議棧有著名的uIP協(xié)議棧,Lwip協(xié)議棧,還有其他嵌入式高手開(kāi)發(fā)的協(xié)議棧。無(wú)論是硬件還是軟件,都無(wú)法分出高下,適合項(xiàng)目需求的才是最好的。
1.1 寫作理由
在前言的最后,再說(shuō)明一下我寫作的理由。以前從淘寶上購(gòu)買過(guò)ENC28J60,店家信誓旦旦地說(shuō)能提供51 AVR LPC STM32等多個(gè)平臺(tái)的代碼,可以實(shí)現(xiàn)一個(gè)網(wǎng)頁(yè)控制LED。頭腦一熱買了回來(lái),買回來(lái)才發(fā)現(xiàn),店家提供的資料零零散散,非常難懂,雖然不貴僅僅需要40多元,現(xiàn)在只需要20多元。但是總感覺(jué)有欺騙的嫌疑,這也可以映射出中國(guó)人做技術(shù)買賣的原則,產(chǎn)品多是實(shí)物而非服務(wù)。幾經(jīng)周轉(zhuǎn),發(fā)現(xiàn)原來(lái)這些ENC28J60的代碼都出自一個(gè)地方——AVRNET,源自老外的一個(gè)開(kāi)源項(xiàng)目。把最原始的代碼拿來(lái)細(xì)細(xì)品味,以太網(wǎng)協(xié)議就不那么神秘了。在這里說(shuō)一下ENC28J60的使用,熟悉了ENC28J60的驅(qū)動(dòng)可以分幾步走。第一步,通過(guò)ENC28J60移植uIP或者lwIP協(xié)議棧,實(shí)現(xiàn)TCP或是UDP通信,第二,順著AVRNET項(xiàng)目走,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的web服務(wù)器,運(yùn)行靜態(tài)或者動(dòng)態(tài)網(wǎng)頁(yè)。嵌入式以太網(wǎng)和計(jì)算機(jī)以太網(wǎng)開(kāi)發(fā)不同,對(duì)于TCP通信而言沒(méi)有windwos socke用,對(duì)于網(wǎng)頁(yè)編程而言也沒(méi)有ISS或PHP,所示實(shí)現(xiàn)起來(lái)會(huì)比較麻煩,但是也非常有樂(lè)趣。
1.2 平臺(tái)說(shuō)明
硬件平臺(tái) Atmega32 + proteus 7.10+WinPcap
編譯平臺(tái) AVR Studio 6
關(guān)于硬件平臺(tái),由于AVRNET項(xiàng)目采用ATmega32,分析的時(shí)候也采用Atmega32。就ENC28J60而言,對(duì)于其他的平臺(tái),例如STM32或是MSP而言只需要修改SPI操作即可。由于沒(méi)有硬件平臺(tái),所以使用proteus仿真,注意仿真以太網(wǎng)是proteus需要安裝WinPcap。
關(guān)于編譯平臺(tái),AVRNET項(xiàng)目使用的是AVR Stdui 4.XX。這個(gè)版本稍顯老舊,我就進(jìn)行了相關(guān)修改,在AVR Studio 6中重新編譯,并修正了幾個(gè)錯(cuò)誤。當(dāng)然其他的編譯平臺(tái)也適用。
總結(jié)一句,平臺(tái)選用原則——“求同存異”。
1.3 資料準(zhǔn)備
以太網(wǎng)開(kāi)發(fā)是非常復(fù)雜的工作,在開(kāi)始之前最好先大致瀏覽一些ENC28J60的使用手冊(cè),MICROCHIP可以下載,中文版本閱讀非常方便。除此之外,需要認(rèn)真閱讀TCP IP相關(guān)知識(shí),推薦一本圖書《嵌入式Internet TCP/IP基礎(chǔ)、實(shí)現(xiàn)和應(yīng)用》。
嵌入式開(kāi)發(fā)總是一個(gè)反復(fù)借鑒的過(guò)程。該部分代碼參考了AVRNET項(xiàng)目和奮斗開(kāi)發(fā)板的相關(guān)范例。AVRNET項(xiàng)目網(wǎng)址鏈接http://www.avrportal.com/?page=avrnet。
2寄存器和寄存器操作

ENC28J60的寄存器很多,操作這些寄存器需要一個(gè)良好的代碼組織工作。在AVRNET項(xiàng)目中,把ENC28J60的驅(qū)動(dòng)分解成ENC28J60.h文件和ENC28J60.c文件。H文件中主要描述ENC28J60寄存器的基本定義,而C文件主要實(shí)現(xiàn)了這些寄存器的操作。

2.1寄存器定義

首先分析一下ENC28J60頭文件。閱讀數(shù)據(jù)手冊(cè)之后,會(huì)發(fā)現(xiàn)ENC28J60寄存器數(shù)量較多,通過(guò)分析和整理,操作ENC28J60的寄存器需要注意以下3點(diǎn)。

(1) 共有三種不同形式的寄存器——控制寄存器,以太網(wǎng)寄存器和PHY寄存器,不同的寄存器以不同的字母開(kāi)頭,以E、MA和MI加以區(qū)分。操作這三種不同的寄存器需要不同的組合命令。

(2) 寄存器被分布在4個(gè)不同的bank中,也就是說(shuō)存在地址相同的寄存器,但是這些寄存器卻位于不同的分區(qū)中,在操作寄存器之前必須選中正確的bank。

(3)雖然存在4個(gè)bank,但是有5個(gè)寄存器在4個(gè)bank的位置相同,它們是EIE、EIR、ESTAT、ECON1、ECON2。不言而喻,這5個(gè)寄存器將會(huì)非常重要。

AVRNET項(xiàng)目中,寄存器被定義成8位長(zhǎng)度,而這8位長(zhǎng)度包含了三個(gè)部分,地址bit7(最高位)用以區(qū)分PHY和MAC寄存器;地址bit6和bit5用以區(qū)分BANK,2位空間正好區(qū)分4個(gè)BANK;地址的最后5位才是寄存器的地址。通過(guò)這種方式就可以區(qū)分所有的寄存器了。列舉了幾行代碼。由于頭文件很長(zhǎng),所以不全部列出。

// bank0寄存器

#defineERDPTL (0x00|0x00)

#defineERDPTH (0x01|0x00)

#defineEWRPTL (0x02|0x00)

// bank1寄存器

#defineEHT0 (0x00|0x20)

#defineEHT1 (0x01|0x20)

#defineEHT2 (0x02|0x20)

// bank2寄存器

#defineMACON1 (0x00|0x40|0x80)

#defineMACON2 (0x01|0x40|0x80)

#defineMACON3 (0x02|0x40|0x80)

//bank3寄存器

#defineMAADR1 (0x00|0x60|0x80)

#defineMAADR0 (0x01|0x60|0x80)

#defineMAADR3 (0x02|0x60|0x80)

例如ERDPTH為位于BANK0的以太網(wǎng)寄存器,第一個(gè)數(shù)字0x01代表BANK0中的地址,該地址為0x01,第二個(gè)數(shù)字0x00代表BANK編號(hào),該編號(hào)為0,意味第0個(gè)BANK;EHT1為位于BANK1中的控制寄存器,第二個(gè)0x20代表BANK地址為1,請(qǐng)注意由于BANK編號(hào)被保存在bit6和bit5,所以此處為0x20,絕不是0x10;MACON2為位于bank2的以太網(wǎng)寄存器,第一個(gè)數(shù)字0x01代表在該BANK中的寄存器地址,第二個(gè)數(shù)字0x40代表BANK編號(hào),而第三個(gè)數(shù)字0x80代表該寄存器為以太網(wǎng)寄存器或是PHY寄存器,這些寄存器的操作和控制寄存器有區(qū)別。

為了方便寄存器操作,h文件中還定義了寄存器地址操作的掩碼,簡(jiǎn)單而言就是需要查看哪些位,不需要查看哪些位。

/*寄存器地址掩碼*/

#defineADDR_MASK 0x1F

/*存儲(chǔ)區(qū)域掩碼*/

#defineBANK_MASK 0x60

/* MAC和MII寄存器掩碼*/

#defineSPRD_MASK 0x80

另外還有比較特殊的5個(gè)控制寄存器,EIE,EIR,ESTAT,ECON2和ECON1

/*關(guān)鍵寄存器*/

#defineEIE 0x1B

#defineEIR 0x1C

#defineESTAT 0x1D

#defineECON2 0x1E

#defineECON1 0x1F

2.2寄存器操作命令

寄存器操作命令也可稱為寄存器操作碼。為了實(shí)現(xiàn)寄存器的操作,ENC28J60定義了6+1個(gè)寄存器操作命令(操作碼)。操作相關(guān)寄存器至少有讀寄存器命令,寫寄存器命令;發(fā)送或接收以太網(wǎng)數(shù)據(jù)則必有寫緩沖區(qū)命令或讀緩沖區(qū)命令;為了加快操作,對(duì)于某些控制寄存器而言還可以有置位或者清零某位的命令;最后加上一個(gè)軟件復(fù)位命令,錦上添花。

/* 讀控制寄存器 */

#define ENC28J60_READ_CTRL_REG 0x00

/* 讀緩沖區(qū) */

#define ENC28J60_READ_BUF_MEM 0x3A

/* 寫控制寄存器 */

#define ENC28J60_WRITE_CTRL_REG 0x40

/* 寫緩沖區(qū) */

#define ENC28J60_WRITE_BUF_MEM 0x7A

/* 位域置位 */

#define ENC28J60_BIT_FIELD_SET 0x80

/* 位域清零 */

#define ENC28J60_BIT_FIELD_CLR 0xA0

/* 系統(tǒng)復(fù)位 */

#define ENC28J60_SOFT_RESET 0xFF

復(fù)制代碼

2.3接收和發(fā)送緩沖區(qū)分配

以太網(wǎng)數(shù)據(jù)的接收和發(fā)送離不開(kāi)驅(qū)動(dòng)芯片內(nèi)部的RAM,也可稱之為硬件緩沖區(qū)。ENC28J60包括8K的硬件緩沖區(qū),該硬件緩沖區(qū)一部分被接收緩沖區(qū)使用,另一部分為發(fā)送緩沖區(qū)使用。操作ENC28J60的最終目的為操作該硬件緩沖區(qū)。執(zhí)行以太網(wǎng)發(fā)送命令時(shí),向發(fā)送緩沖區(qū)中填充數(shù)據(jù),并觸發(fā)相關(guān)寄存器發(fā)送以太網(wǎng)數(shù)據(jù);執(zhí)行以太網(wǎng)接收命令時(shí),通過(guò)查詢相關(guān)寄存器或者外部中斷的方式獲得以太網(wǎng)數(shù)據(jù)輸入事件,接著從接收緩沖區(qū)中讀取相關(guān)數(shù)據(jù)。

(1) 把緩沖區(qū)劃分為兩個(gè)部分。把8K的硬件緩沖區(qū)劃分為兩個(gè)部分至少需要四個(gè)參數(shù),接收緩沖區(qū)需要一個(gè)起始地址和一個(gè)結(jié)束地址加以描述,發(fā)送緩沖區(qū)也需要一個(gè)起始地址和一個(gè)結(jié)束地址加以描述。最理想的方式,兩個(gè)緩沖區(qū)完全占據(jù)

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉