基于S3C44B0X的嵌入式以太網(wǎng)接口設計
在互聯(lián)網(wǎng)絡(luò )和局域網(wǎng)絡(luò )飛速發(fā)展的今天,計算機進(jìn)行網(wǎng)絡(luò )互聯(lián)的同時(shí),各種家電設備、儀器儀表、工業(yè)生產(chǎn)中的數據采集和控制正在走向網(wǎng)絡(luò )化。
以太網(wǎng)(Ethemet)由于它的普遍性及低廉的接口價(jià)格,因而已經(jīng)作為一種最通用的網(wǎng)絡(luò ),廣泛應用于生產(chǎn)和生活中。另一方面,嵌入式設備在價(jià)格、體積及實(shí)時(shí)性等方面是通用計算機無(wú)法比擬的,也已廣泛應用于自動(dòng)化控制、數據采集、通信網(wǎng)絡(luò )等領(lǐng)域。因此,嵌入式以太網(wǎng)技術(shù)有著(zhù)廣闊的前景,首先要解決的問(wèn)題就是嵌入式以太網(wǎng)接口問(wèn)題。
本文基于最常用的嵌入式處理器S3C44B0X和以太網(wǎng)驅動(dòng)器RTL8019AS來(lái)設計了一款嵌入式以太網(wǎng)接口。本設計的特點(diǎn)是,既可僅用于嵌入式以太網(wǎng)驅動(dòng)設備,方便簡(jiǎn)單,又可進(jìn)行擴展其他模塊,必要時(shí)可以移植操作系統,應用于其他復雜領(lǐng)域。本文從RTL8019AS的內部結構工作原理出發(fā),介紹了基于 S3C44B0X的硬件接口電路,詳細說(shuō)明了基于硬件層的驅動(dòng)程序C語(yǔ)言的設計。
1以太網(wǎng)幀結構
一個(gè)標準的以太網(wǎng)物理傳輸幀由7部分組成:PR(同步位)、SD(分隔位)、DA(目的地址)、SA(源地址位)、TYPE(類(lèi)型字段)、DATA(數據段)、FCS(幀校驗)。
其傳輸幀結構(及各部分長(cháng)度)如圖1所示。
除了數據段的長(cháng)度不定外,其他部分的長(cháng)度固定不變。數據段為46~1500字節。以太網(wǎng)規定整個(gè)傳輸包的最大長(cháng)度不能超過(guò)1514字節(14字節為DA、 SA、TYPE),最小不能小于60字節。需填充時(shí),填充字符的個(gè)數不包括在長(cháng)度字段中;超過(guò)1 500字節時(shí),需拆成多個(gè)幀傳送。事實(shí)上,發(fā)送數據時(shí),PR、SD、FCS及填充字段這幾個(gè)數據段由以太網(wǎng)控制器自動(dòng)產(chǎn)生;而接收數據時(shí),PR、SD被跳過(guò),控制器一旦檢測到有效的前序字段(即PR、SD),就認為接收數據開(kāi)始。
2芯片簡(jiǎn)介
S3C44B0X是三星公司使用ARM7TDMI核生產(chǎn)的16/32位RISC(精簡(jiǎn)指令集計算機)處理器,它提供了豐富的內置模塊,包括:8 kB Cache和內部SRAM,LCD(液晶顯示器)控制器,2通道的UART,4通道的DMA(直接存儲器存取),存儲器管理,帶PWM(脈寬調制)的定時(shí)器,I/O口,8通道10位的A/D轉換器,IIC、IIS總線(xiàn),同步SIO接口和PLL(鎖相環(huán))倍頻器,可根據需要進(jìn)行接口擴展,并且價(jià)格低廉,目前已被廣泛應用于嵌入式領(lǐng)域中。
RTL8019AS是在嵌入式領(lǐng)域應用廣泛且性?xún)r(jià)比很高的網(wǎng)絡(luò )控制芯片。RTL8019AS的主要性能有:符號EthernetⅡ與IEEE 802.3(10Base5、10Base2、10BaseT)標準;全雙工,收發(fā)可同時(shí)達到10 Mbit/s的速率;內置16 kB的SRAM,用于收發(fā)緩沖,降低對主處理器的速度要求;支持8/16位數據總線(xiàn),8個(gè)中斷申請線(xiàn)以及16個(gè)I/O基地址選擇;支持UTP、AUI、 BNC自動(dòng)檢測,還支持對10BaseT拓撲結構的自動(dòng)極性修正;允許4個(gè)診斷LED引腳可編程輸出。
RTL8019AS可分為以下幾部分功能模塊:
a)遠程DMA接口:處理器與RTL8019AS收發(fā)緩沖的連接通道,處理器只需對遠程DMA操作。
b)本地DMA接口:RTL8019AS與網(wǎng)線(xiàn)的連接通道,完成控制器與網(wǎng)線(xiàn)的數據交換。
c)MAC(介質(zhì)訪(fǎng)問(wèn)控制)邏輯:完成對遠程DMA和本地DMA數據包傳輸、中斷的產(chǎn)生等自動(dòng)控制。
d)地址識別邏輯:將接收到的數據幀中的目的地址和地址寄存器中的地址進(jìn)行比較,判斷其是否為發(fā)到本地的幀。
e)CRC(循環(huán)冗余校驗)產(chǎn)生校驗邏輯:在發(fā)送數據時(shí),產(chǎn)生CRC碼,對接收幀進(jìn)行CRC。
f)協(xié)議PCA:負責實(shí)施以太網(wǎng)規范。
RTL8019AS內部有16kB SRAM,分為64頁(yè),256字節/頁(yè),組成環(huán)形隊列作為收發(fā)緩沖區,只能按頁(yè)操作,頁(yè)地址從0x4000~0x7FFF??梢酝ㄟ^(guò)相關(guān)的寄存器讀寫(xiě)操作,可以對緩沖區進(jìn)行設置及狀態(tài)的讀取。由于接收緩沖區是按頁(yè)即256 B來(lái)操作的,與緩沖區地址有關(guān)的寄存器中只需存儲緩沖區的高16位地址即可。在本設計中,將前32頁(yè)(0x400~0x5fff)作為接收緩沖區,將后 32頁(yè)(0x6000~0x7ff)作為發(fā)送緩沖區。
RTL8019AS具有32位輸入輸出地址,地址偏移量為00H~1FH。其中,00H~0FH共16個(gè)地址為寄存器地址。遠程DMA地址包括 10H~17H,都可以用來(lái)做遠程DMA端口,只要用其中的一個(gè)就可以了。復位端口包括18H~1FH共8個(gè)地址,功能相同,用于RTL8019AS復位。RTL8019AS的內部I/O基址是00H,但微處理器要訪(fǎng)問(wèn)8019的地址卻不是00H,該地址是由處理器與網(wǎng)絡(luò )控制器的連線(xiàn)決定的。
RTL8019AS寄存器分為4頁(yè),即PAGE0~PAGE3,每一頁(yè)的地址偏移量均為0x00~0x1f由RTL8019AS的CR(命令寄存器)中的 PS1、PS0位來(lái)決定要訪(fǎng)問(wèn)的頁(yè),每一頁(yè)中的寄存器由SA0~SA3尋址。第0頁(yè)和第1頁(yè)的寄存器很重要,用于數據收發(fā)的控制和中斷管理等,使用前必須對其進(jìn)行配置。第2頁(yè)和第3頁(yè)只用于診斷和其他一些配置,很少使用。
3設計思路
首先,S3C44B0X通過(guò)RTL8019AS的I/O口,對其相關(guān)寄存器進(jìn)行配置。在通信時(shí),S3C44B0X與RTL8019AS的收發(fā)緩存器的數據交換由遠程DMA控制,而RTL81019AS收發(fā)緩存器與以太網(wǎng)總線(xiàn)之間的數據交換由它的本地DMA控制。RTL8019AS通過(guò)中斷的方式通知 S3C44B0X數據收發(fā)的結果和狀態(tài),S3C44B0X通過(guò)查詢(xún)中斷狀態(tài)寄存器的值,作出相應處理。
系統結構如圖2所示。
4接口電路設計
接口電路如圖3所示。
S3C 44B0X的nOE、nWE分別與RTL8019AS的IORB、IOWB相連,控制數據的讀和寫(xiě)操作,低電平有效。RTL8019使用中斷0,對應S3C4480的外部中斷1。
RTL8019AS RTL8019AS有3種工作方式:
a)跳線(xiàn)方式:I/O和中斷由跳線(xiàn)決定;
b)即插即用方式(PNP):由軟件進(jìn)行自動(dòng)配置,使用這種方法時(shí),系統的啟動(dòng)程序必須包含支持PNP的函數;
c)免跳線(xiàn)方式:I/O和中斷由外接的EEPROM93C46中的內容決定。
b)即插即用方式(PNP):由軟件進(jìn)行自動(dòng)配置,使用這種方法時(shí),系統的啟動(dòng)程序必須包含支持PNP的函數;
c)免跳線(xiàn)方式:I/O和中斷由外接的EEPROM93C46中的內容決定。
在本設計中,為了降低啟動(dòng)程序和接口電路的復雜性,選擇跳線(xiàn)方式,故JP接高電平。
X1、X2分別為20 MHz晶振的輸入輸出端。LED0~2分別連接3個(gè)發(fā)光二極管,指示網(wǎng)絡(luò )連接、數據傳輸和發(fā)送的情況。 20F001為網(wǎng)卡濾波器,內部包含一對低通濾波器和一對隔離變壓器,其輸出TX+/-、RX+/- 與RJ45的信號口相連
由于在本設計中RTL8019AS的AEN與S3C44B0X的nGCS2相連,所以對應S3C44B0X的存儲器的起始地址0x0600-0000;并且,由于RTL8019AS的IOS0~IOS3接地,在跳線(xiàn)模式下,當IOS0~IOS1為0000時(shí),RTL8019AS的基址為0300H。因此,在本設計中,S3C44B0X訪(fǎng)問(wèn)RTL8019AS的基址就是0x0600-0300。
5驅動(dòng)程序設計
5.1程序設計思路
在本設計方案中,驅動(dòng)程序主要包含3個(gè)函數,即系統的初始化函數、接收數據包函數、發(fā)送數據包函數。初始化部分完成RTL8019AS在使用之前的初始化工作,包括設置相關(guān)工作模式的寄存器、分配和初始化接收和發(fā)送緩沖區、初始化網(wǎng)卡接收地址等。
MAR0-MAR7-多點(diǎn)地址寄存器:這8個(gè)寄存器的值是根據多播地址數組的值生成的,提供對多播地址的過(guò)濾,過(guò)濾掉一些不屬于自己接收多播數據包。
這里均設為FFH,接所有多播地址的數據包:
下面6條語(yǔ)句設置MAC地址,寄存器為PAR0~PAR5:實(shí)際地址寄存器,這些寄存用來(lái)對目標地址數據包進(jìn)行比較,以確定接收或者拒絕接收。地址放在數組add[6]中。
5.2數據的傳輸和發(fā)送
數據的傳輸和發(fā)送由本地DMA傳輸和與遠程DMA傳輸兩部分完成,前者大部分工作由RTL8019AS自動(dòng)完成,我們要做的是設置收發(fā)緩沖區的大小及指針變量,這些工作在RTL8019AS的初始化時(shí)已完成,因此只需要編寫(xiě)遠程DMA讀寫(xiě)函數。對遠端DAM口的讀寫(xiě),不同的只是數據傳輸方向,這里,僅以讀操作為例,即編寫(xiě)從RTL8019AS接收緩沖區取數據包到S3C4480X。(注意:遠程DMA的寫(xiě)函數,即向RTL8019AS發(fā)送緩沖區寫(xiě)數據函數 --send_data()省略。)
5.3以太網(wǎng)接口通信函數流程
這里采用中斷和查詢(xún)相結合的方式來(lái)決定是否發(fā)送和接收數據。當RTL8019AS的ISR(中斷狀態(tài)寄存器)的任意一中斷位置位時(shí),S3C4B0X都要對其進(jìn)行中斷相應(在這里只關(guān)注第0中斷位和第1中斷位,即分別反映RTL8019AS已正確接收到數據和已成功發(fā)送數據包,因此在初始化函數中將其他位屏蔽)。這時(shí)要對ISR進(jìn)行訪(fǎng)問(wèn),來(lái)判斷是何種中斷,進(jìn)而作出相應的響應,如圖4所示。
6結束語(yǔ)
本設計經(jīng)過(guò)軟硬件的調試,并已成功地進(jìn)行以太網(wǎng)數據傳輸。由于S3C4480X出眾的性?xún)r(jià)比及豐富的外圍接口,通過(guò)擴展本設計可以應用到嵌入式儀器儀表、工業(yè)數據采集網(wǎng)絡(luò )、嵌入式網(wǎng)絡(luò )控制等許多領(lǐng)域。
評論