BM3803MG是由北京微電子技術研究所研製的、具有自主智慧財產權的SPARC V8構架的國產高可靠嵌入式控制器,能夠穩定運行VxWorks實時作業系統,其性能高、功耗低,可應用於航空、航天等高可靠領域的32 bit抗輻射RISC晶片。本文用該款控制器以及工業級乙太網晶片KSZ8851-16mll為某型號研製了系統主控板,該板採用實時作業系統 VxWorks編程,並對主控板的板級支持包(BSP)進行設計,從而實現了基於乙太網的高可靠和實時的數據處理。本文主要介紹主控板乙太網晶片 KSZ8851-16mll的VxWorks驅動設計。
本文引用地址:http://www.eepw.com.cn/article/201602/287214.htm1 硬體系統構成
如圖1所示,硬體系統由BM30803MG、FPGA、SDRAM和乙太網控制器構成硬體系統。
BM3803MG 是基於SPARC V8體系結構的32 bit處理器,可用於板上嵌入式實時計算機系統。BM3803MG晶片內部包含有:整數處理單元、浮點處理單元、獨立的指令和數據Cache、硬體乘法器和除法器、中斷控制器、帶有跟蹤緩衝器的硬體調試單元、2個24 bit定時器、通用I/O接口、看門狗;能夠支持PROM、SRAM、SDRAM和I/O映射空間訪問的存儲器控制器;具有軟體可以控制的省電工作模式;具有可實現 PCI 主機橋(Host bridge)和從屬橋(Guest bridge)功能的PCI 控制器;符合PCI2.3規範的33 MHz PCI接口;完全的三模冗餘設計、 EDAC和奇偶校驗。
主要性能指標[1]:
(1)用Dhrystone 2.1作為測試程序、CPU主頻為100 MHz時,處理能力為86 MIPS;用Whetstone作為測試程序、CPU主頻為100 MHz時,浮點處理能力為23 MFLOPS。
(2)抗輻性能:總劑量抗輻能力為100 Krad(Si), 優於1 E-5錯誤/器件/day的SEU事件,優於70 MeV cm2/mg的抗閂鎖能力。BM3803MG總體結構框圖如圖2所示。
2 VxWorks BSP設計
VxWorks 是美國風河公司(現已被Intel收購)推出的一款高性能、可裁減的嵌入式實時作業系統,它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中[2]。由於作業系統廠商不能對所有設備的處理器驅動提供支持,故需要針對不同的硬體平臺進行相關驅動的開發。
2.1 BSP
板級支持包BSP(Board Support Package)是介於底層硬體和上層軟體之間的底層軟體開發包,它將系統中與硬體直接相關的一層軟體獨立出來。本設計中BSP的主要功能是屏蔽硬體、提供作業系統的驅動及硬體驅動。具體功能包括[3]:(1)目標板硬體初始化。主要是CPU的初始化,為整個系統提供底層硬體支持;(2)為作業系統提供設備驅動程序和系統中斷服務程序;(3)定製作業系統的功能。為軟體系統提供一個實時多任務的運行環境;(4)初始化作業系統。為作業系統的正常運行做好準備。
在網卡驅動開發之前,BSP中包括makefile、depend.bm3803、config.h、bm3803.h、 romlnit.S、sysALib.S、sysLib.c、sysSeria1.c等,其中config.h中包含特定CPU板的所有包含文件和定義。
2.2 KSZ8851-16mll乙太網控制器
KSZ8851-16mll 是美國Micrel公司研製的單埠嵌入式控制晶片,它包括一個快速乙太網的 MAC控制器、一個8/16 bit的普通主機處理器接口以及在 RXQ(12 KB)和 TXQ(6 KB)之間進行共享的18 KB內部緩衝存儲器,並提供了Wake-on-LAN技術,可有效地解決快速乙太網的應用[4];支持大端(Big-Endian)和小端 (Little-Endian)的處理器、多幀數據傳輸和接收、IPv4/ IPv6 checksum和32 bit CRC的生成與校驗。此外,KSZ8851-16mll還提供了強大的功率管理功能。
2.3 驅動程序的實現
2.3.1 SENS協議棧
VxWorks 支持可裁減的增強型網絡堆棧SENS(Scalable Enhanced Networks Stack),提供了可替換的網絡設備驅動程序。SENS 的基本層次結構與傳統的TCP/IP網絡協議棧相似,但SENS最大的特點是在數據鏈路層和網絡協議層之間多了MUX層。在SENS中,網絡接口的驅動程序即END網絡驅動程序處於數據鏈路層。IP層和TCP/ UDP層合稱為網絡協議層。在數據鏈路層和網絡協議層之間有應用程式接口(API),這個接口在SENS中稱為MUX(Multiplexer)接口。 MUX層直接與END 驅動程序相交互,其應用程式提供了獨立於網絡協議的驅動程序接口,可以與多個獨立的END驅動程序同時交互。接口層MUX 起到了隔離網絡協議和網絡驅動程序的作用,並管理協議層和數據鏈路層之間的通信,使數據的發送和接收過程變得簡單,而不需要通過掛接鉤子函數來解決 [5]。
2.3.2 編程架構
KSZ8851-16mll BIU主機接口是間接存取數據的總線接口。共享數據總線SD[15:0]由CMD控制信號來決定是地址線還是數據線。由於KSZ8851-16mll 是單埠晶片,外界與晶片只能通過單埠進行交互。下面簡單介紹KSZ8851-16mll 的寄存器的讀寫以及數據的接收與發送過程。
(1)寄存器讀寫操作
訪問KSZ8851-16mll寄存器需要兩個步驟:①置CMD為高,寫寄存器的偏移地址和字節使能號(BEn)到共享數據總線上;②置CMD為低,讀或者寫數據到共享數據總線上。
本文網卡晶片採用大端模式,並且晶片的CMD管腳與主機的地址線A2相連,可以得到KSZ8851-16mll 讀寫寄存器的兩個重要操作程序:
讀寄存器:
*((volatile unsigned short*)(KS8851_IO_BASE+CMD_HIGH))=(unsigned short)(addr | ((BE1 | BE0) <<
((addr+2) & 0x02)));
*data= *((volatile unsigned short *)(KS8851_IO_BASE +
CMD_LOW ));
寫寄存器:
*((volatile unsigned short * )(KS8851_IO_BASE +
CMD_HIGH )) =(UINT16)( addr | ((BE1 | BE0) <<
((addr+2) & 0x02)));
*((volatile unsigned short *)(KS8851_IO_BASE +
CMD_LOW )) = ( UINT16 )( data );
其中,KS8851_IO_BASE表示網卡晶片基地址,CMD_LOW=0(CMD=0),表示共享數據總線是數據線;CMD_HIGH=4(CMD=1),表示共享數據總線是地址線。