1 引言
隨著Internet 的出現和以太網的迅速發展,基于以太網的設備控制越來越多。目前市場上大部分以太網控制器采用的封裝均超過80 引腳,如RTL8019AS、DM9008、CS8900A等。這些器件不僅結構復雜,面積龐大,且系統開銷較大。近來,Microchip推出全球首枚28 引腳獨立以太網控制器ENC28J60,可為嵌入式系統提供低引腳數、低成本、精簡的遠程通訊解決方案。
設計了以ENC28J60為核心的以太網接口實現方案,描述了該系統硬件架構的設計方法。在簡要介紹了以太網控制器ENC28J60的結構、功能、外圍電路的基礎上,對ENC28J60 與Atmega16的SPI通訊進行了闡述。此方案不僅成本低,而且可以實現500Kbps以上的傳輸速率,滿足了嵌入式系統的Internet控制要求。
2 ENC28J60 網絡接口體系結構
ENC28J60 是帶有行業標準串行外設接口(Serial PeripheralInterface, SPI)的獨立以太網控制器。它符合IEEE 802.3 的全部規范, 采用了一系列包過濾機制以對傳入數據包進行限制。它還提供了一個內部DMA 模塊, 以實現快速數據吞吐和硬件支持的IP 校驗和計算。與主控制器的通信通過兩個中斷引腳(INT和WOL)和SPI 腳(SO、SI、SCK、CS)實現, 數據傳輸速率高達10Mb/s.兩個專用的引腳(LEDA、LEDB)用于連接LED, 進行網絡活動狀態指示。圖1 所示為ENC28J60 的典型應用電路。
ENC28J60 由7個主要功能模塊組成:SPI接口,充當主控制器和ENC28J60 之間通信通道;控制寄存器,用于控制和監視ENC28J60;雙端口RAM緩沖器,用于接收和發送數據包;判優器, 當DMA、發送和接收模塊發出請求時對RAM緩沖器的訪問進行控制; 總線接口,對通過SPI 接收的數據和命令進行解析;MAC模塊:實現符合IEEE 802.3標準的MAC 邏輯;PHY 模塊, 對雙絞線上的模擬數據進行編碼和譯碼。ENC28J60 還包括其他支持模塊,諸如振蕩器、片內穩壓器、電平變換器(提供可以接受5V 電壓的I/O 引腳)和系統控制邏輯。
根據以上說明,ENC28J60應用于嵌入式網絡接口是非常合適的,有廣闊的應用發展前景。
3 ENC28J60在嵌入式網絡接口的應用
3.1硬件電路設計
利用ENC28J60 可以構成不同功能的網絡終端節點, 如網絡服務器、帶Internet 功能的設備、遠程監控(數據采集, 診斷)設備等。圖2 所示為基于ENC28J60 的嵌入式網絡接口的硬件電路原理圖。電路中有:2 個LED 狀態指示燈主要用來顯示網絡連接狀態,包括PHY 是否沖突、連接是否建立、是否接收數據、連接速度、雙工模式等; 必需的偏置電阻R3(2kΩ, 精度為1%);高速局域網電磁隔離模塊(即RJ45 以太網接口),應用中,ENC28J60 的物理端口與隔離變壓器HR901170A 連接時必須符合IEEE802.3 對物理層規范的要求, 如RJ45 的插孔與隔離變壓器的間隔應盡量小, 輸出和輸入差分信號對的走線要有很好的隔離。
電路中的主控制器采用Atmel 公司的ATmega16 單片機,它具有先進的RISC(精簡指令集計算機)結構、16 kB 可編程Flash 存儲器、512 B 的EEPROM和1 kB 片內SRAM, 具有豐富的外設接口, 其SPI 接口允許ATmega16 與外設進行高速的同步數據傳輸。本設計中ATmega16 SPI 配置為主機模式,ENC28J60 為從設備。ATmega16 的SPI 工作模式由CPOL、CPHA 設置,根據ENC28J60 的SPI 讀寫時序, ATmega16 的SPI工作模式應設置為模式0.ATmega16 通過將ENC28J60 的CS引腳置低實現與其的同步。SPI 時鐘由寫入到SPI 發送緩沖寄存器的數據啟動, SPI MOSI(PB5)引腳上的數據發送秩序由寄存器SPCR 的DORD 位控制, 置位時數據的LSB(最低位)首先發送, 否則數據的MSB(最高位)首先發送。我們選擇先發送MSB,同時接收到的數據傳送到接收緩沖寄存器, CPU 進行右對齊從接收緩沖器中讀取接收到的數據。應該注意, 當需要從ENC28J60 中讀取多個數據時, 即使ENC28J60 并不需要ATmega16 串行輸出的數據, 每讀取一個數據前都要向SPI 發送緩沖器寫一個數據以啟動SPI 接口時鐘。由于SPI 系統的發送方向只有1 個緩沖器, 而在接收方向有2 個緩沖器, 所以在發送時一定要等到移位過程全部結束后,才能對SPI 數據寄存器執行寫操作; 而在接收數據時, 需要在下一個字節移位過程結束之前通過訪問SPI 數據寄存器讀取當前接收到的數據, 否則第1 個數據丟失。
3.2 ENC28J60 軟件初始化
在使用ENC28J60 發送和接收數據包前, 必須對器件進行初始化設置。根據不同的應用,一些配置選項可能需要更改。初始化設置工作包括接收和發送緩沖器、接收過濾器、晶振啟動時間、MAC 寄存器、PHY 寄存器。初始化芯片之前先關閉單片機的中斷輸入, 對RESET 引腳給定一個持續的低電平復位信號,然后對相應的寄存器進行設置。設置完成所有需要的寄存器后, 判斷以太網狀態中的時鐘啟動標志位是否置位, 然后開中斷。
系統初始化后進入主程序循環, 包括單片機的控制作用和網絡數據傳輸。對于以太網傳輸部分來說。主要有兩個作用:一是對要發送的數據按照以太網數據幀格式進行封裝并發送; 二是對接收的以太網數據幀進行解包, 供應用程序使用。
3.3 ENC28J60 發送數據包
在進行數據包發送或接收時, 要先對寫緩沖存儲器(WriteBuffer Memory, WBM)命令掌握。WBM允許主控制器將字節寫入8KB 發送和接收緩沖存儲器。如果ECON2 寄存器中的AUTOINC 位置1, 那么在寫完每個字節的最后一位之后,EWRPT 指針將會自動地遞增指向下一個地址(當前地址加1)。
如果寫入地址1FFF 且AUTOINC 置1, 則寫指針加1 指向0000h.將CS 引腳拉為低電平啟動WBM命令。然后將WBM操作碼及隨后的5 位常量1Ah 送入ENC28J60.在發送WBM命令和常量之后, 由EWRPT 指向的存儲器中的數據將移入ENC28J60, 首先移入最高位。在接收到8 個數據位后, 如果AUTOINC 置1, 寫指針將自動遞增。主控制器可以繼續在SCK引腳提供時種信號、在SI 引腳發送數據同時保持/CS 為低電平, 從而可以連續寫入存儲器。當AUTOINC 被使能時, 以該方式就可以連續地向緩沖存儲器寫入字節而無需多余的SPI命令。拉高CS 引腳電平可結束WBM命令。在WBM操作期間,SO 引腳一直為高阻態, WBM操作時序, 請參見圖3.
ENC28J60 內的MAC 在發送時會自動生成前導符和幀起始定界符。此外, MAC 可根據配置生成填充(如果需要)和CRC字段。主控制器必須生成所有其他幀字段, 并將它們寫入緩沖存儲器, 以待發送。此外, ENC28J60 還要求在待發送的數據包前添加一個包控制字節。主控制器應:1.正確編程ETXST 指針,使之指向存儲器中未用的單元。它將指向包控制字節, 在本設計方案中, 指針應編程為0120h; 2.使用WBM SPI 命令寫入包控制字節、目標地址、源MAC 地址、類型/ 長度和數據有效負載; 3.正確編程ETXND 指針。它應指向數據有效負載的最后一個字節, 在本設計方案中, 指針應編程為0156h; 4.將EIR.TXIF位清零、將EIE.TXIE 位和EIE.INTIE 位置1 允許在發送完成后產生中斷(如果需要); 5.將ECON1.TXRTS 位置1 開始發送。如果在TXRTS 位置1 時正在進行DMA 操作, ENC28J60 會等待DMA 操作完成再發送。這種等待是必需的, 因為DMA 和發送引擎共享同一個存儲器訪問端口。同樣如果在TXRTS 已置1后, ECON1 中DMAST 位才置1, DMA 在TXRTS 位清零前不會采取任何動作。如果正在進行發送, 不應通過SPI 讀取或寫入任何待發送的字節。主控制器將TXRTS 位清零可取消發送。如果數據包發送完成或因錯誤取消而中止發送, ECON1.TXRTS位會被清零, 一個7 字節的發送狀態向量將被寫入由ETXND +1 指向的單元, EIR.TXIF 會被置1 并產生中斷(如果允許)。要驗證數據包是否成功發送,應讀取ESTAT.TXABRT 位。如果該位置1, 主控制器在查詢發送狀態向量的各個字段外,還應查詢ESTAT.LATECOL 位, 以確定失敗的原因。下面給出寫數據包的源代碼:
3.3 ENC28J60 接收數據包
假設接收緩沖器已完成初始化, MAC 已正確配置而且接收過濾器已配置為接收以太網數據包,主控制器應該:1.如果需要在接收到數據包時產生一個中斷, 就要將EIE.PKTIE 位和EIE.INTIE位置1; 2. 如果需要在由于緩沖空間不足導致數據包丟失時產生一個中斷,就要將EIR.RXERIF 位清零, 并將EIE.RXERIE位和EIE.INTIE 位置1;3.通過將ECON1.RXEN 位置1使能接收。在將RXEN 置1后,將不能修改雙工模式和接收緩沖器起始和結束指針。此外, 要阻止不期望接收的數據包,在更改接收過濾器配置寄存器(ERXFCON) 和MAC 地址前建議將RXEN 清零。在使能接收后,沒有過濾掉的數據包將寫入循環接收緩沖器。任何不符合過濾條件的數據包將被丟棄,但主控制器無法識別一個數據包已被丟棄。當接收到一個數據包并將其完整寫入緩沖器時,EPKTCNT 寄存器將遞增, EIR.PKTIF 位將置1,并產生一個中斷(如果允許),同時硬件寫指針ERXWRPT 自動遞增。
4 結束語
本文作者的創新點:通過ENC28J60 芯片所設計的嵌入式網絡接口可以在多種環境中應用,能按需要進行配置來完成系統功能,并且在成本、體積、功耗、靈活性等方面具有明顯的優勢,能為智能化儀器與設備、信息家電等開拓新的應用前景。