嵌入式系統中常見的網卡驅動比較(CS8900A,RTL8019,DM9000)

1. CS8900A CS8900芯片是Cirrus Logic公司生產的一種局域網處理芯片,在嵌入式領域中使用非常常見。它的封裝是100-pin TQFP,內部集成了在片RAM、10BASE-T收發濾波器,並且提供8位和16位兩種接口。CS8900與ARM芯片按照16位方式連接,網卡芯片復位後默認工作方式爲I/O連接,基址是300H。 CS8900A還提供其它性能和配置選擇.它獨特的Packet Page結構可自動適應網絡通信量模式的改變和現有系統資源,從而提高系統效率。 MCU與CS8900A的數據傳輸有三種模式:I/O模式,存儲器模式和DMA模式.本設計採用CS8900A默認的I/O模式,因爲I/O模式簡單易用. 在I/O模式下,通過訪問8個16位的寄存器來訪問PacketPage結構,這8個寄存器被映射到2410地址空間的16個連續地址。當CS8900A上電後,寄存器默認的基址爲0x300h。 電路連接如下: CS8900A的IO模式特點就是這個PacketPage結構,使用PacketPagePointer和PacketPageData Port這兩個寄存器對CS8900A的內部寄存器進行配置,非常方便。 #define CS8900_PPTR *(volatileCS8900_REG*) (CS8900_BASE+0x05*CS8900_OFF) //PacketPagePointer的定義 #define CS8900_PDATA *(volatile CS8900_REG *)(CS8900_BASE+0x06*CS8900_OFF) //PacketPageData Port 通過如下函數對cs8900a設置 get_reg(int regno) //32位模式,讀寄存器的數據 { CS8900_PPTR = regno; // regno爲要讀的寄存器偏移地址 return (unsigned short) CS8900_PDATA; //返回要讀寄存器的數據 } static void put_reg(int regno, unsigned short val) //寫寄存器 { CS8900_PPTR = regno; CS8900_PDATA = val; //寫寄存器 } 其中CS8900_BASE爲基址與硬件連接有關。硬件原理圖決定在S3C2410的地址空間中,CS8900A的基地址爲x19000000。那麼在I/O模式下,CS8900A的內部寄存器默認基地址爲0x300h,在S3C2410的地址空間中的地址爲0x19000300。 #define CS8900_BASE 0x19000300 完成以上,下面的驅動就非常好寫了,用網卡掛起函數示例: void eth_halt( void ) { /* disable transmitter/receiver mode */ put_reg(PP_LineCTL, 0); //禁止網卡 /* "shutdown" to show ChipID or kernel wouldn't find he cs8900 ... */ get_reg_init_bus(PP_ChipID); } 2. rtl8019 RTL8019AS 是高度集成以太網控制器,爲了提供完全解決即插即用方案,RTL8019AS 在集成10BASET 收發器,BNC,和AUI 接口之間的自動檢測功能。此外,8 條IRQ 總線和16 條基本地址總線爲大資源情況下提供了寬鬆的環境。 RTL8019AS 支持16k,32k,和64k 字節BROM 和閃存接口。它仍然提供頁面模式功能,這種功能能支持在僅16k 字節內存系統空間下的4M 字節的BROM. 此外,BROM 的無用命令被用來釋放BROM 內存空間。RTL8019AS 用16k 字節SRAM 設計在單片芯片上,它的設計不僅提供了更多友好的功能,而且節省了SRAM 存儲資源。 RTL8019選擇的端口I/O基地址爲300H。它的地址偏移量共32個,用到的地址空間爲300H-31FH,將地址線SA0-SA4與CPU的A0-A4連接,SA8-SA9接高電平,其餘地址線接低。ARM的A22和nGCS3信號的連接,確定地址映射在系統的哪個Bank上,從而確定基地址。如若A22接SA8,nGCS3接SA5,那麼尋址範圍就是0x8340001F~0x83400000。 驅動特點是,對其寄存器的訪問與CPU對自己內對存訪問幾乎一樣。寄存器採用了分頁技術,每頁寄存器的便宜都是00~1F。這樣使硬件連接簡單。另外RTL8019有BROM接口,可以接非易失存儲器,復位時可以讀取其內部數據,十分方便。 由於類似同意編址,而不像CS8900A那樣採用PacketPage結構,因此驅動寫起來更加容易,但是多一個頁確定函數: 寄存器配置函數: static unsigned char get_reg (unsigned int regno) //得到寄存器的值 { return (*(unsigned char *) regno); } static void put_reg (unsigned int regno, unsigned char val) //給寄存器賦值 { *(volatile unsigned char *) regno = val; } 頁面切換方法: put_reg (RTL8019_COMMAND, RTL8019_PAGE0); 網卡掛起函數示例: void eth_halt (void) { put_reg (RTL8019_COMMAND, 0x01); //掛起網卡 } 3. DM9000 該DM9000是一款完全集成的和符合成本效益單芯片快速以太網MAC控制器與一般處理接口,一個10/100M自適應的PHY和4K DWORD值的SRAM 。它的目的是在低功耗和高性能進程的3.3V與5V的支持寬容。 DM9000還提供了介質無關的接口,來連接所有提供支持介質無關接口功能的家用電話線網絡設備或其他收發器。該DM9000支持8位, 16位和32 -位接口訪問內部存儲器,以支持不同的處理器。 隨着其成本的降低和功能的強大越來越被廣泛使用。 對DM9000讀寫操作,首先對DM9000正確尋址。AEN(地址允許)是輸入引腳片選信號。SA4~SA9是地址總線4~9位,當AEN低且SA9和SA8高,而SA7、SA6、SA5、SA4爲低時,則DM9000被選中。DM9000默認I/0基地址爲300H。 CMD引腳用於設置COMMAND模式,CMD爲高時,選擇數據端口。CMD爲低時,選地址端口。數據端口和地址端口的地址碼由下式決定: DM9000地址端口=高位片選地址+300H+0H DM9000數據端口=高位片選地址+300H+4H 其中,高位片選地址由S3C2410的NGCS3提供,即爲:0X100000000H。 驅動編寫特點: 採用一個CMD信號來控制是對DM9000讀還是寫,架構非常簡單,容易理解.有點類似CS8900A的PacketPage結構. 驅動關鍵如下: 讀端口與寫端口的宏 #define DM9000_outb(d,r) ( *(volatile u8 *)r = d ) #define DM9000_outw(d,r) ( *(volatile u16 *)r = d ) #define DM9000_outl(d,r) ( *(volatile u32 *)r = d ) #define DM9000_inb(r) (*(volatile u8 *)r) #define DM9000_inw(r) (*(volatile u16 *)r) #define DM9000_inl(r) (*(volatile u32 *)r) 配置寄存器的函數: static u8 DM9000_ior(int reg) //讀寄存器的值 { DM9000_outb(reg, DM9000_IO); //類似cs8900a 把寄存器索引寫道DM9000_IO return DM9000_inb(DM9000_DATA); //讀取DM9000_DATA即是寄存器的數值 } static void DM9000_iow(int reg, u8 value) { DM9000_outb(reg, DM9000_IO); DM9000_outb(value, DM9000_DATA); //給寄存器賦值 } 其中DM9000_IO就是DM9000的基地址,由高位片選地址+300H+0H,CMD接了A2,所以DM9000_DATA就是DM9000_IO+4,即是高位片選地址+300H+4H. 掛起函數示例 void eth_halt(void) { DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */ DM9000_iow(DM9000_IMR, 0x80); /* Disable all interrupt */ DM9000_iow(DM9000_RCR, 0x00); /* Disable RX */ } 總結:可以看出CS8900A的接線最爲複雜需要將地址線全部接上,CS8900A支持內存模式和IO模式; rtl8019功能較CS8900A強大,提供了BROM接口,採用寄存器統一編址,驅動簡單.接線相對簡單隻要若干根地址線;DM9000,功能最強大,自適應以太網速度(10M/100M).接線最爲簡單隻要一個地址線+一個片選線.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章