本文介紹了帶有行業(yè)標準串行外設(shè)接口(Serial Peripheral Interface,SPI)的獨立以太網(wǎng)控制器ENC28J60 在AVR單片機接口開發(fā)設(shè)計中的應用,以及單片機控制ENC28J60的程序及計算機與ENC28J60進行網(wǎng)絡(luò)通信的有關(guān)程序設(shè)計段。
一、概述
帶SPI接口的ENC28J60由七個主要功能模塊組成:1. SPI 接口:充當主控制器和ENC28J60 之間通信通道;2. 控制寄存器:用于控制和監(jiān)視ENC28J60;3. 雙端口RAM緩沖器:用于接收和發(fā)送數(shù)據(jù)包;4. 判優(yōu)器:當DMA、發(fā)送和接收模塊發(fā)出請求時對RAM 緩沖器的訪問進行控制;5. 總線接口:對通過SPI 接收的數(shù)據(jù)和命令進行解析;6. MAC (Medium Access Control)模塊:實現(xiàn)符合IEEE 802.3 標準的MAC 邏輯;7. PHY(物理層)模塊——對雙絞線上的模擬數(shù)據(jù)進行編碼和譯碼。該器件還包括其他支持模塊,諸如振蕩器、片內(nèi)穩(wěn)壓器、電平變換器(提供可以接受5V 電壓的I/O 引腳)和系統(tǒng)控制邏輯。
二、器件結(jié)構(gòu)接口示意框圖
ENC28J60 中所有的存儲器都是以靜態(tài)RAM 的方式實現(xiàn)的。ENC28J60 中有三種類型的存儲器:控制寄存器、以太網(wǎng)緩沖器和PHY寄存器,控制寄存器類存儲器包含控制寄存器(Control Register,CR)。它們用于進行ENC28J60 的配置、控制和狀態(tài)獲取。可以通過SPI 接口直接讀寫這些控制寄存器。PHY 寄存器用于進行PHY 模塊的配置、控制和狀態(tài)獲取。PHY 寄存器用于進行PHY 模塊的配置、控制和狀態(tài)獲取。不可以通過SPI 接口直接訪問這些寄存器,只可通過MAC 中的MII (Media Independent Interface)訪問這些寄存器。
ENC28J60的接口示意框圖如圖1所示:
三、工作原理
如圖1所示,在ENC28J60中接口SO、SI、SCK和CS可與許多單片機(本遠程監(jiān)控系統(tǒng)中使用單片機的是ATMEGA1280-16AU)上的串行外設(shè)接口SPI(如圖2中PB0、PB1、PB2和PB3)直接相連。另外,在ENC28J60的SPI 端口要求SCK 在空閑狀態(tài)時為低電平,并且不支持時鐘極性選擇。在SCK 的每個上升沿移入數(shù)據(jù),命令和數(shù)據(jù)通過SI 引腳送入器件。ENC28J60 在SCK 的下降沿從SO 引腳輸出數(shù)據(jù)。當執(zhí)行操作時CS 引腳必須保持低電平,當操作完成時返回高電平。
主機和從機之間的SPI 連接系統(tǒng)包括兩個移位寄存器和一個主機時鐘發(fā)生器。通過將需要的從機的 SS 引腳拉低,主機啟動一次通訊過程。主機和從機將需要發(fā)送的數(shù)據(jù)放入相應的移位寄存器。該移位寄存器可存儲8位二進制數(shù),主機在SCK 引腳上產(chǎn)生時鐘脈沖以交換數(shù)據(jù)。主機的數(shù)據(jù)從主機的MOSI 移出,從從機的MOSI 移入;從機的數(shù)據(jù)從從機的MISO 移出,從主機的MISO 移入。主機通過將從機的SS 拉高實現(xiàn)與從機的同步。如圖3所示:
配置為SPI 主機時, SPI 接口不自動控制 SS 引腳,必須由用戶軟件來處理。對 SPI 數(shù)據(jù)寄存器寫入數(shù)據(jù)即啟動SPI 時鐘,將8 比特的數(shù)據(jù)移入從機。傳輸結(jié)束后SPI 時鐘停止,傳輸結(jié)束標志SPIF 置位。如果此時SPCR 寄存器的SPI 中斷使能位SPIE 置位,中斷就會發(fā)生。主機可以繼續(xù)往SPDR 寫入數(shù)據(jù)以移位到從機中去,或者是將從機的SS拉高以說明數(shù)據(jù)包發(fā)送完成。最后進來的數(shù)據(jù)將一直保存于緩沖寄存器里。
配置為從機時,只要SS 為高,SPI 接口將一直保持睡眠狀態(tài),并保持MISO 為三態(tài)。在這個狀態(tài)下軟件可以更新SPI 數(shù)據(jù)寄存器SPDR 的內(nèi)容。即使此時SCK 引腳有輸入時鐘,SPDR 的數(shù)據(jù)也不會移出,直至SS 被拉低。一個字節(jié)完全移出之后,傳輸結(jié)束標志SPIF置位。如果此時SPCR寄存器的SPI中斷使能位SPIE置位,就會產(chǎn)生中斷請求。在讀取移入的數(shù)據(jù)之前從機可以繼續(xù)往SPDR 寫入數(shù)據(jù)。最后進來的數(shù)據(jù)將一直保存于緩沖寄存器里。
SPI 系統(tǒng)的發(fā)送方向只有一個緩沖器,而在接收方向有兩個緩沖器。也就是說,在發(fā)送時一定要等到移位過程全部結(jié)束后才能對SPI 數(shù)據(jù)寄存器執(zhí)行寫操作。而在接收數(shù)據(jù)時,需要在下一個字符移位過程結(jié)束之前通過訪問SPI 數(shù)據(jù)寄存器讀取當前接收到的字符。否則第一個字節(jié)將丟失。
四、網(wǎng)絡(luò)編程以及程序?qū)崿F(xiàn)
本文以調(diào)諧器為例進行說明,使用iccavr-v7.17b軟件對單片機ATMEGA1280-16AU進行編程,其中在protocol.c中需要對主控制器的網(wǎng)絡(luò)通信IP地址、子網(wǎng)掩碼等進行初始化,如
電腦端接收字節(jié)數(shù)據(jù)的程序段如下:
電腦端接收字節(jié)數(shù)據(jù)的程序段如下: