千兆網(wǎng)絡接口在S3C2440A系統(tǒng)中的應用
摘要:本文介紹了一種在ARM 微處理器S3C2440A應用系統(tǒng)中加入千兆以太網(wǎng)接口的設計方案,闡述了總體設計方法,分析了在設計過程中需要解決的一些技術問題和難點,重點分析了系統(tǒng)中網(wǎng)絡設備驅動程序的結構及設計。
關鍵詞:S3C2440A;嵌入式系統(tǒng);千兆以太網(wǎng);Linux;驅動
嵌入式系統(tǒng)廣泛應用在工業(yè)測控、智能儀表、智能家庭等很多領域。隨著嵌入式系統(tǒng)應用范圍的不斷擴展及網(wǎng)絡應用的日益普及,使得越來越多的嵌入式系統(tǒng)需要網(wǎng)絡功能。三星公司S3C2440A是國內應用較多的嵌入式微處理器之一,在S3C2440A應用系統(tǒng)中,目前只支持10/100M的網(wǎng)絡接口,有很大的實用價值,既可以拓展S3C2440A的應用領域,也可以給其它嵌入式系統(tǒng)高速接入網(wǎng)絡提供一種簡單易行的參考。
設計方案
本系統(tǒng)主要由S3C2440A、存儲器、AX88180、千兆PHY芯片88E1111、嵌入式Linux、網(wǎng)絡驅動程序等組成(見圖1)。嵌入式Linux內核負責系統(tǒng)任務的管理并集成TCP/IP協(xié)議,方便實現(xiàn)網(wǎng)絡功能控制。S3C2440A負責整個系統(tǒng)的控制,它與AX88180以總線方式連接,是通信控制的主體。S3C2440A通過網(wǎng)絡驅動程序實現(xiàn)對AX88180內部寄存器編程,實現(xiàn)對以太網(wǎng)數(shù)據(jù)的發(fā)送和接收,從而完成網(wǎng)絡與系統(tǒng)之間的數(shù)據(jù)傳輸。AX88180與88E1111之間采用RGMII接口方式互連,負責數(shù)據(jù)傳送底層協(xié)議的實現(xiàn)。
這里簡要介紹一下S3C2440A與AX88180器件,這兩個器件是通信控制的主體。
圖1 系統(tǒng)結構框圖
S3C2440A是基于ARM920T 核的16/32 位RISC微處理器,運行頻率高達500MHz,主要面向手持設備以及高性價比、低功耗的應用,適用于開發(fā)各類高端手持、小型終端以及網(wǎng)絡應用產品,具有非常豐富的片上資源,比如LCD、SDRAM、NAND FLASH、DMA、AD、PWM控制器,以及UART、USB、攝像頭、觸摸屏、IIC、IIS、SPI、SD、MMC、AC97等接口。
AX88180是臺灣亞信公司推出的一款Non-PCI千兆以太網(wǎng)控制芯片,內置1000Mbps以太網(wǎng)媒體存取控制器(MAC);有40KBytes SRAM網(wǎng)絡封包緩存器;硬件支持IP/TCP/UDP checksum offloads。它可以十分方便地實現(xiàn)與一般16/32位微處理器連接,可以象SRAM一樣被訪問。它符合IEEE 802.3/IEEE 802.3u/IEEE 802.3ab協(xié)議,適用于串流媒體、多媒體網(wǎng)絡、高頻寬傳輸?shù)阮I域,如數(shù)字媒體、家用網(wǎng)關及IP電視等。
硬件設計
由于硬件電路比較復雜,這里只給出核心電路連接,如圖2所示。S3C2440A與AX88180之間采用總線方式相連,地址總線A2-A15、數(shù)據(jù)總線D0-D31、讀寫信號等可以直接連接,AX88180的40M~100M時鐘信號由S3C2440A提供,AX88180中斷信號與S3C2440A EINT11相連,整個接口電路無需外加電路;AX88180與PHY芯片之間采用簡化的千兆比特媒體獨立接口RGMII接口,信號一一對應直接相連即可。
圖2 S2C2440A、AX88180與88E1111接口電路
軟件設計
從整體角度考慮,Linux網(wǎng)絡系統(tǒng)可以分為硬件層、設備驅動層、網(wǎng)絡協(xié)議層和應用層。在S3C2440A系統(tǒng)上移植有嵌入式Linux、集成TCP/IP等協(xié)議棧,應用層的程序可以自己編寫也可以移植,這里我們主要分析一下設備驅動程序的實現(xiàn)。
在嵌入式Linux中,整個網(wǎng)絡驅動程序的框架可分為四層,分別為協(xié)議接口層、網(wǎng)絡設備接口層、設備驅動功能層、網(wǎng)絡設備和網(wǎng)絡媒介層,這個框架在內核網(wǎng)絡模塊中已經(jīng)搭建完成,在設計驅動程序的時候,要做的主要工作就是根據(jù)上層網(wǎng)絡設備接口層定義的device結構和底層具體的硬件特性,來完成設備驅動的功能。驅動程序主要由初始化、打開、關閉、數(shù)據(jù)接收及發(fā)送等函數(shù)組成。
初始化函數(shù)
初始化函數(shù)完成網(wǎng)絡設備的初始化,由數(shù)據(jù)結構device中的init函數(shù)指針來調用,加載AX88180驅動模塊后,就會調用初始化過程。該首先通過檢測物理設備的硬件特征來檢測網(wǎng)絡物理設備是否存在,之后配置設備所需要的資源,比如中斷等。這些過程完成后,就要構造設備設備數(shù)據(jù)結構,用檢測到的數(shù)據(jù)初始化其相關變量,最后向Linux內核注冊設備并申請內存空間。
打開函數(shù)
打開函數(shù)在網(wǎng)絡設備驅動程序中是在網(wǎng)絡設備狀態(tài)由down狀態(tài)轉為up狀態(tài)時,即被激活的時候被調用,有很多AX88180及88E1111的初始化工作可以放在這里做。在驅動程序作為一個模塊被裝入時,打開函數(shù)還要防止模塊卸載時設備處于打開狀態(tài)。
關閉函數(shù)
關閉函數(shù)和打開函數(shù)做相反的工作,是在設備狀態(tài)由up轉為down時被調用的,作用是釋放資源以減少系統(tǒng)負擔。在驅動程序作為模塊裝入時,關閉函數(shù)還要減少設備被引用的次數(shù),以便卸載驅動程序。
發(fā)送函數(shù)
發(fā)送函數(shù)是網(wǎng)絡驅動程序的關鍵過程之一,它與dev->hard_start_xmit連接,在內核通過設備向外發(fā)送數(shù)據(jù)時調用它。系統(tǒng)給AX88180分配一塊64K的地址空間, 其中8000H-FBFFH作為發(fā)送緩沖區(qū)地址,在系統(tǒng)調用驅動程序的xmit時,發(fā)送的數(shù)據(jù)放在一個sk_buff結構中,發(fā)送到數(shù)據(jù)緩沖區(qū)地址,再由AX88180發(fā)送到網(wǎng)絡上。如果發(fā)送成功,hard_start_xmit釋放sk_buff,返回0;如果設備暫時無法處理,則返回1。硬件在發(fā)送結束后產生中斷。
中斷和接收函數(shù)
中斷和接收函數(shù)也是驅動程序的關鍵過程之一,如果有數(shù)據(jù)收到,AX88180會產生一個中斷通知系統(tǒng),在中斷處理程序中驅動程序申請一塊sk_buff(),從AX88180讀出數(shù)據(jù)并放置到接收緩沖區(qū)地址0000H~7000H里,然后來填充sk_buff中的一些信息,由skb->dev = dev判斷收到幀的協(xié)議類型,填入skb->protocol,再把指針skb->mac.raw指向硬件數(shù)據(jù),然后丟棄幀頭。之后還要設置skb->pkt_type,標明鏈路層數(shù)據(jù)類型,最后調用netif_rx()把數(shù)據(jù)傳送給協(xié)議層。
下面是發(fā)送函數(shù)部分代碼:
static int ax88180_start_xmit (struct sk_buff *skb, struct net_device *global_dev)
{ struct _AX88180_PRIVATE *pax88180_local;
unsigned char *txdata;
unsigned long TXDES_addr;
unsigned long txcmd_txdp, txbs_txdp;
unsigned long txdes0_val, txdes1_val, txdes2_val, txdes3_val;
unsigned long tmp_data;
int i;
pax88180_local = (struct _AX88180_PRIVATE *) global_dev->priv;
txdata = skb->data;
netif_stop_queue(global_dev);
pax88180_local->FirstTxDesc = pax88180_local->NextTxDesc;
txbs_txdp = 1 << pax88180_local->FirstTxDesc; i = 0;
READ_MACREG(TXBS, tmp_data);
READ_MACREG(TXBS, tmp_data);
...
PRINTK(TX_MSG, "ax88180: ax88180_start_xmit end ..........nn");
return 0;}[3]
結語
本文介紹的千兆網(wǎng)絡接口在S3C2440A系統(tǒng)中的應用方案已經(jīng)得以實現(xiàn),1000 Full- duplex模式下,數(shù)據(jù)傳輸速率可以達到200Mbp,在使用FTP下載數(shù)據(jù)時,速度可以達到4Mbps以上,是使用100M網(wǎng)絡接口的5~6倍。如果使用其它更高速度的微處理器,網(wǎng)絡接口的速度會更高?!?/P>
參考文獻:
1. 曲延濱.在TMS320VC5402上實現(xiàn)的嵌入式TCP/IP協(xié)議棧[J]. 單片機及嵌入式系統(tǒng)應用. 2005
2. 于明.ARM9嵌入式系統(tǒng)設計與開發(fā)教程[M].電子工業(yè)出版社.2006年4月
3. Allan Chou. Ax88180.c.ASIX Electronics Corporation.2005
評論