ARM7平臺(tái)下基于VxWorks的網(wǎng)絡(luò)接口設(shè)計(jì)
1 硬件設(shè)計(jì)
核心CPU采用三星公司的S3C44B0。S3C44B0采用ARM7TDMI內(nèi)核,它通過提供全面的、通用的片上外設(shè),大大減少了系統(tǒng)電路除處理器以外的元器件配置,降低了系統(tǒng)成本。 網(wǎng)絡(luò)接口芯片采用Realtek公司生產(chǎn)的RTL8019AS。它是一款高度集成的以太網(wǎng)控制器,不僅集成了MAC(介質(zhì)訪問控制)子層和物理層的性能,而且與NE2000兼容,具有軟件可移植性強(qiáng)以及價(jià)格低廉等優(yōu)點(diǎn)。
S3C4480與RTL8019AS的硬件接口原理如圖1所示。從圖1中可以看出,RTL8019AS的使能端連到S3C44B0的nGCS3,因此它的地址映射在系統(tǒng)的Bank3上,基地址為0x06000000。RTL8019AS支持8位/16位數(shù)據(jù)總線,在本電路中采用16位方式。
RTL8019AS共有32個(gè)輸入/輸出地址,對(duì)應(yīng)地址偏移量為0x00~0x1f?,F(xiàn)分別說明如下:
①0x00~0x0f的16個(gè)地址,為寄存器地址。
?、?x10~0xl7的8個(gè)地址,為數(shù)據(jù)讀寫端口地址。它們都是一樣的,每個(gè)都可以用來做數(shù)據(jù)讀寫端口,只要用其中一個(gè)就可以了。
?、?x18~0x1f的8個(gè)地址,為復(fù)位端口。它們的功能都是一樣的。但需要注意,實(shí)際上只有0x18、0x1a、0x1c、0xle這幾個(gè)復(fù)位端口是有效的,其他不要使用;因?yàn)橛行┘嫒菘ú恢С?xl9、0xlb、Oxld等奇數(shù)地址的復(fù)位。
在軟件設(shè)計(jì)時(shí),尤其要注意以下兩點(diǎn):
?、賀TL8019AS的地址線從SA0~SA4依次連到S3C4480的ADDR1~ADDR5上,因此,RTL8019的寄存器地址要左移1位。
?、赗TL8019AS使用EXINT1中斷,且上升沿觸發(fā)。
2 軟件實(shí)現(xiàn)
2.1 VxWorks的網(wǎng)絡(luò)協(xié)議棧和MUX接口
VxWorks中的網(wǎng)絡(luò)協(xié)議棧叫作"SENS(Scalable En-hanced Network STack)",即可裁減增強(qiáng)網(wǎng)絡(luò)協(xié)議棧。SENS是基于4.4BSDTCP/IP協(xié)議棧發(fā)展而來的。它包含了許多4.4BSDTCP/IP協(xié)議棧沒有的協(xié)議;而且SENS在實(shí)現(xiàn)一些協(xié)議功能時(shí)增加了許多新特性。如在IP協(xié)議實(shí)現(xiàn)時(shí)增加了多播功能。SENS協(xié)議棧層次如圖2所示。
SENS的基本特征與傳統(tǒng)的TCP/IP網(wǎng)絡(luò)協(xié)議棧相似,但從圖2中可以看出,SENS最大的特點(diǎn)是在數(shù)據(jù)鏈路層和網(wǎng)絡(luò)協(xié)議層之間多了MUX層。在SENS中網(wǎng)絡(luò)接口的驅(qū)動(dòng)程序叫作"END(Enhanced Network Driver)",即增強(qiáng)型網(wǎng)絡(luò)驅(qū)動(dòng)程序,它處于數(shù)據(jù)鏈路層。IP層和TCP/UDP層合稱為"網(wǎng)絡(luò)協(xié)議層"。在數(shù)據(jù)鏈路層和網(wǎng)絡(luò)協(xié)議層之間有應(yīng)用程序接口(API),這個(gè)接口在SENS中叫作"MUX(Multiplexer)接口"。MUX接口如圖3所示。MUX接口起到隔離網(wǎng)絡(luò)驅(qū)動(dòng)程序與網(wǎng)絡(luò)協(xié)議的作用。在老式的BSD4.3的驅(qū)動(dòng)模式下,網(wǎng)絡(luò)驅(qū)動(dòng)程序和協(xié)議是緊密聯(lián)結(jié)的,無論協(xié)議還是驅(qū)動(dòng)程序都需要了解對(duì)方的數(shù)據(jù)結(jié)構(gòu)。而在新的基于MUX的模式下,驅(qū)動(dòng)程序和協(xié)議并不需要了解對(duì)方。它們通過MUX接口來通信。例如,在收到一個(gè)包后,網(wǎng)絡(luò)驅(qū)動(dòng)程序并不直接訪問協(xié)議的數(shù)據(jù)結(jié)構(gòu);相反,當(dāng)準(zhǔn)備將數(shù)據(jù)傳給協(xié)議層時(shí),它調(diào)用一個(gè)MUX提供的函數(shù),該函數(shù)處理把數(shù)據(jù)傳給協(xié)議層的細(xì)節(jié)。這使得添加一個(gè)新的驅(qū)動(dòng)程序或協(xié)議十分容易。MUX實(shí)現(xiàn)了下面的一套函數(shù)集:muxBind()、muxUn-bind()、muxDevLoad()、muxDevUnload()、muxReceive()、muxError()、muxSend()、muxTxRestartRtn()、muxM castAddrDel()、muxMcastAddrGet()、mux-PollSend()、muxMcastAddrAdd()、muxPollReceive()、muxIoctrl()。網(wǎng)絡(luò)驅(qū)動(dòng)程序和協(xié)議都要調(diào)用上面的函數(shù),不需要為它們添加任何附加代碼。
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論