0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于S3C2410A處理器實現(xiàn)增強型網(wǎng)絡(luò)驅(qū)動的應用方案

電子設(shè)計 ? 來源:微計算機信息 ? 作者:錢華明;趙斌 ? 2021-05-14 17:13 ? 次閱讀

VxWorks是美國風河公司(Wind River)推出的具備網(wǎng)絡(luò)功能的實時嵌入式操作系統(tǒng)。VxWorks以其良好的可靠性和卓越的實時性被廣泛應用于航海、軍事、航窄、通信等高精尖技術(shù)及實時性要求極高的領(lǐng)域中。vxWorks在各種CPU平臺上提供了統(tǒng)一的編程接口和一致的運行特性,盡可能屏蔽不同CPU之間的底層差異。所以,VxWorks可以方便地移植到不同的CPU平臺上,如ARM、PowerPC、x86等。

增強犁網(wǎng)絡(luò)驅(qū)動(Enhanced Network Driver,END)是一個使用MUX(多路復用)功能來與網(wǎng)絡(luò)協(xié)議進行通信的數(shù)據(jù)鏈路層驅(qū)動。本文主要研究基于sumsang公司S3C2410A處理器的網(wǎng)絡(luò)硬件環(huán)境下VxWorks嵌入式操作系統(tǒng)增強型網(wǎng)絡(luò)驅(qū)動程序的構(gòu)建和編寫。

1 S3C2410A的網(wǎng)絡(luò)硬件平臺

S3C2410A微處理器是sumsang半導體公司為手持設(shè)備等相關(guān)應用設(shè)計的一款低功耗、高集成度的處理器,包含一個ARM920T芯片。S3C2419A內(nèi)嵌的CS8900A作為主控芯片的以太網(wǎng)模塊,是一款低成本的以太局域網(wǎng)控制器,包含片上RAM、10Base-T傳輸和接收濾波器,以及帶24mA驅(qū)動的直接ISA總線接口,還集成了一個10Mbps的以太網(wǎng)收發(fā)器.以及所有用于和局域網(wǎng)通信的模擬數(shù)字電路,通過一個電磁隔離器E2023直接和局域網(wǎng)相連。RJ45為網(wǎng)絡(luò)接頭,可連接10M/100M的網(wǎng)絡(luò)集線器。CS8900A工作在全艤工模式下.支持包括用于流控的暫停操作的IEEE802.3MAC控制層協(xié)議。其硬件原理圖如圖1所示。

2 增強型網(wǎng)絡(luò)驅(qū)動END

VxWorks支持兩種模式的網(wǎng)絡(luò)設(shè)備驅(qū)動程序,即BSD 4.3網(wǎng)絡(luò)驅(qū)動程序和可裁剪的增強型網(wǎng)絡(luò)設(shè)備驅(qū)動SENS。SENS(Sealable Enhanced Network Stack)是由BSD 4.3 TCP/IP網(wǎng)絡(luò)協(xié)議棧發(fā)展而來的,并包含了許多原協(xié)議棧沒有的協(xié)議。而且SENS在實現(xiàn)新的協(xié)議時增加了一些新特性,如在IP協(xié)議實現(xiàn)時增加了多播功能。為實現(xiàn)網(wǎng)絡(luò)接口程序可替換,WindRiver專為SENS設(shè)計了一種增強的網(wǎng)絡(luò)驅(qū)動程序END。SENS模型包含3個部分:協(xié)議驅(qū)動程序、多路復用接口(MUX)和增強的網(wǎng)絡(luò)驅(qū)動(END)。在驅(qū)動程序和上層協(xié)議之間,SENS模型提供了協(xié)議驅(qū)動層。在協(xié)議驅(qū)動層和END驅(qū)動層之間,SENS模型提供了MUX層,使其直接與END驅(qū)動程序進行交互。它們之間的結(jié)構(gòu)關(guān)系如圖2所示。

在BSD 4.3模型下,VxWorks網(wǎng)絡(luò)驅(qū)動程序與協(xié)議緊密結(jié)合,它們依賴于彼此的數(shù)據(jù)結(jié)構(gòu);而在基于MUX模型下,網(wǎng)絡(luò)驅(qū)動程序和協(xié)議之間沒有內(nèi)部交換數(shù)據(jù),它們只通過MUX間接相互作用。MUX接口的作用便是分解網(wǎng)絡(luò)驅(qū)動程序和協(xié)議,使它們幾乎獨立。這種獨立使得添加新的驅(qū)動程序和協(xié)議變得非常簡單。

3 END網(wǎng)絡(luò)驅(qū)動程序的裝載和啟動

在基于S3C2410A的VxWorks BSP設(shè)計中,configNet.h文件定義了一個END_TBL_ENTRY結(jié)構(gòu)的數(shù)組endDevTbl[],該數(shù)組將網(wǎng)絡(luò)設(shè)備驅(qū)動程序的裝載函數(shù)cs8900EndLoad()入口點及相關(guān)參數(shù)添加到網(wǎng)絡(luò)設(shè)備表endDevTbl[]中。endDevTbl[]數(shù)組描述了系統(tǒng)所有網(wǎng)絡(luò)設(shè)備的裝載入口點及其相關(guān)參數(shù).其中的一個參數(shù)CS_LOAD_STRING進行資源字符串的初始化工作。資源字符串的描述和加載程序的處理有關(guān),需要包含網(wǎng)卡基地址、中斷向量號、中斷號、偏移、配置值、MAC地址等。不同網(wǎng)卡的資源字符串有所不同,而且排列順序也沒有硬性的規(guī)定,只要提供的數(shù)據(jù)能滿足endLoad()的需要即可。

在使用編寫好的vxworks BSP引導操作系統(tǒng)時,系統(tǒng)將執(zhí)行usrRoot()函數(shù)來實現(xiàn)以下功能:首先初始化網(wǎng)絡(luò)任務的工作隊列,然后調(diào)用tNetTask()任務來處理網(wǎng)絡(luò)任務工作隊列中的任務。tNetTask()通過調(diào)用muxDevLoad()來裝載網(wǎng)絡(luò)接口驅(qū)動,在tNetTask()中已經(jīng)定義了網(wǎng)絡(luò)驅(qū)動設(shè)備的endLoad()接入點,muxDevLoad()也要執(zhí)行endLoad()。endLoad()執(zhí)行設(shè)備初始化并返回一個名為END_OBJ的結(jié)構(gòu)體。MUX在END_OBJ上加一個指針,指向能夠?qū)?shù)據(jù)包向MUX上層發(fā)送的函數(shù)。然后MUX把返同的END_OBJ加入到END_OBJ結(jié)構(gòu)鏈表中。當從muxDevLoad()返回后,網(wǎng)絡(luò)設(shè)備就準備好可以使用了。設(shè)備裝載完成后,muxDevload()調(diào)用muxDevStart()啟動函數(shù),該函數(shù)通過intConnect()和intEnable()實現(xiàn)中斷服務的注冊并打開中斷宏。當有數(shù)據(jù)交換時,打開中斷服務程序,調(diào)用排列網(wǎng)絡(luò)任務處理函數(shù)netJobAdd(),指派網(wǎng)絡(luò)系統(tǒng)任務tNeflask(),由tNetTask()數(shù)據(jù)接收和發(fā)送任務。其網(wǎng)絡(luò)設(shè)備的驅(qū)動程序安裝順序如圖3

所示。

圖3 END加載順序圖

在VxWorks中添加END網(wǎng)絡(luò)驅(qū)動,需要在文件config.h中添加#define INCLUDEEE_NETWORK和#define INCLUDE_END。在configNet.h中添加END驅(qū)動的入口函數(shù)#define LOAD_FUNC_0 cs8900aLoad和一些相關(guān)的初始化字符串。這樣就會在生成的BSP中包含END/MUX。

調(diào)試時,配置Tomado的目標服務器(Target Server),通過選擇Tools-》Target Server-》Configure來啟動目標服務器的配置程序.選擇wbdrpc后臺,選中Add description to menu,根據(jù)BSP中的配置填寫IP地址。

4 END驅(qū)動程序相關(guān)函數(shù)的設(shè)計

END網(wǎng)絡(luò)驅(qū)動程序相關(guān)處理函數(shù)的設(shè)計是網(wǎng)絡(luò)驅(qū)動和管理的關(guān)鍵部分,它包括ioctl、收/發(fā)處理、中斷處理函數(shù)和網(wǎng)絡(luò)驅(qū)動程序函數(shù)。

(1) ioctl函數(shù)的編寫

ioctl函數(shù)主要完成網(wǎng)卡的啟動和停止,以及MAC地址的設(shè)置等,由文件cs8900aEnd.c中的es8900aloctl()函數(shù)實現(xiàn)。在函數(shù)中可以通過輸入命令行參數(shù)分別對設(shè)置MAC地址請求、獲取MAC地址請求、設(shè)置設(shè)備標志、獲取設(shè)備標志、啟動輪詢操作、結(jié)束輪詢操作、返網(wǎng)MIB信息、返同第一個最小的緩沖區(qū)和返同頭的大小等進行參數(shù)設(shè)置。

(2)數(shù)據(jù)接收函數(shù)的編寫

為了保證數(shù)據(jù)幀接收的實時性,在cs8900aRecv()函數(shù)中使用中斷的方式處理數(shù)據(jù)幀的接收。中斷中應盡可能做較少的處理,所以當網(wǎng)絡(luò)設(shè)備產(chǎn)生中斷時,用戶中斷服務程序最好包含任務級別的處理服務程序.可以通過調(diào)用netJobAdd()實現(xiàn)。它接收一個程序指針和多達5個附加自變量,可以將應用程序用來處理數(shù)據(jù)包的入口點設(shè)定為任務級別。然后把任務放入tNetTask隊列,可以用tNetTask來處理任務級別的網(wǎng)路處理。只要tNetTask隊列中有函數(shù),它就會一直工作,直到隊列為空,進入睡眠狀態(tài)。

當有數(shù)據(jù)到達網(wǎng)絡(luò)設(shè)備時,觸發(fā)中斷進入中斷服務程序cs8900aEndInt。在中斷服務程序里查看中斷狀態(tài)寄存器,如果ReceiveComplete位為高則進入cs8900aMacRxInt()。在cs8900aMacRxInt()中關(guān)閉中斷.并調(diào)用BeOobAdd()將cs8900aEndHandleRcvInt()添加到tNetTask要處理的網(wǎng)絡(luò)任務隊列中。cs8900aEndHandleRevlnt()主要完成以下工作:

通過netClBtkGet()來預定一個clBlk結(jié)構(gòu);

通過netClBlkJoin()把clBlk結(jié)構(gòu)鏈接到包含數(shù)據(jù)包的cluster;

通過netMblkGet()來預定一個mBlk結(jié)構(gòu);

通過netMblkClJoin()把mBlk連接到clBlk、cluster;

通過netClusterGel()重新預定一個cluster給收緩沖描述符供下次接收使用;

重新開啟中斷。

(3)數(shù)據(jù)發(fā)送函數(shù)的編寫

數(shù)據(jù)幀的發(fā)送不采用中斷模式,直接調(diào)用底層驅(qū)動發(fā)送函數(shù)cs8900aEndSend()。發(fā)送的步驟如下:1.用戶凋用write()通過socket套接字訪問網(wǎng)絡(luò);2.網(wǎng)絡(luò)協(xié)議拷貝到網(wǎng)絡(luò)緩沖區(qū),并調(diào)用協(xié)議驅(qū)動的發(fā)送程序;3.協(xié)議驅(qū)動發(fā)送程序調(diào)用muxSend()啟動發(fā)送;4.muxSend()通過調(diào)用send()回調(diào)函數(shù),把緩沖區(qū)傳遞給END;5.數(shù)據(jù)發(fā)送程序cs8900aEndSend()調(diào)用netMblkToBufCopy()將數(shù)據(jù)拷貝到緩沖中,并立即發(fā)送出去??截愅瓿珊?,調(diào)用netMblkClChainFree()釋放所有鏈中的mBlk緩沖并歸還到內(nèi)存池。

(4)修改cs8900a.h文件

由于S3C2410A芯片內(nèi)部集成了MAC控制器,由芯片內(nèi)部寄存器進行控制。因此不需要為網(wǎng)卡模塊另外分配外設(shè)端口或映射寄存器地址。雖然S3C2410A芯片和物理層接口芯片在外部足兩個部分,但是從開發(fā)的角度看它們是一個整體。在cs8900a.h文件中主要完成一些基本配置的設(shè)定:

#define CS_CHIP_FRAME_BUF_SIZE (2048)

#define CS_PKTPG_DMA_NUM (0x0024)

#define CS_INIT_DMA_NUM (3)

#define CS_INIT_INT_NUM (0)

#define CS_CHIP_MEM_BASE (0x28100000)

#define CS_CHlP_IO_BASE (0x28000000)

#define CS_CHIP_IO_0FFSET (0x300)

#define CS_CHIP_MEM_OFFSET (0)

(5)修改cs8900aEND.c文件

cs8900aEND.c 主要完成設(shè)備驅(qū)動程序函數(shù)的編寫:

//從MIB獲取硬件地址

#define END_HADDR(pEnd) ((pEnd)-》mib2Tbl.ifPhysAddress.phyAddress)

#defitae END_HADDR_LEN(pEnd) ((pEnd)-》mib2Tbl.ifPhysAddress.addrLength)

//配置設(shè)定

#define END_BUFSIZ (ETHERMTU+SIZEOF_ETHERHEADER+6)

#define END_SPEED_10M 10000000 /*10Mbs*/

#define END_SPEED END_SPEED_10M

//定義名稱

#define DRV_NAME “cs”

。。.。。.

然后添加驅(qū)動控制結(jié)構(gòu),其結(jié)構(gòu)如下:

typedef struct end device

{

END_0BJ end //繼承的END_OBJ結(jié)構(gòu)

int unit; //設(shè)備單元數(shù)

int ivecBdmaTx; //bdmaTx中斷向量

int ivecBdmaRx; //bdmaRx中斷向量

。。.。。.

UCHAR csAddr[6]; //以太網(wǎng)地址

CACHE_FUNS * cacheFuns; //高速緩沖功能函數(shù)指針

。。.。。.

}

該結(jié)構(gòu)中的內(nèi)容是根據(jù)網(wǎng)絡(luò)設(shè)備和用戶需要而設(shè)計的,其中END_OBJ結(jié)構(gòu)必須包含。并放置在結(jié)構(gòu)的第一項。

5 結(jié)束語

VxWorks下增強型網(wǎng)絡(luò)驅(qū)動是一個鏈路層驅(qū)動程序,它通過MUX層函數(shù)與網(wǎng)絡(luò)協(xié)議層進行通信,本文分析了基于samsung公司的S3C2410A處理器的VxWorks操作系統(tǒng)嵌入式網(wǎng)絡(luò)硬件平臺,闡述了VxWorks操作系統(tǒng)下增強型網(wǎng)絡(luò)接口結(jié)構(gòu),并根據(jù)硬件的設(shè)計環(huán)境詳盡描述并給出了適合該硬件系統(tǒng)的END型網(wǎng)卡驅(qū)動的編寫及其在vxWorks系統(tǒng)中的加載,滿足系統(tǒng)網(wǎng)絡(luò)傳輸?shù)囊?。由于硬件環(huán)境不間,所以不同開發(fā)板上END的設(shè)計會在驅(qū)動的初始化、發(fā)送和接收函數(shù)的配置上有所不同,但根據(jù)相應的硬件用戶手冊稍加改動即可使用,對其他開發(fā)板的網(wǎng)絡(luò)驅(qū)動開發(fā)具有一定的參考和借鑒價值。

本文作者創(chuàng)新點:本文闡述了vxworks操作系統(tǒng)下增強型網(wǎng)絡(luò)驅(qū)動的構(gòu)成原理,給出了基于S3C2410A芯片的增強型網(wǎng)絡(luò)驅(qū)動的具體實現(xiàn)方法。

責任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    18927

    瀏覽量

    227228
  • 嵌入式
    +關(guān)注

    關(guān)注

    5046

    文章

    18817

    瀏覽量

    298548
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6545

    瀏覽量

    122743
收藏 人收藏

    評論

    相關(guān)推薦

    S3C2410A如何在外擴的SDRAM中調(diào)試程序?

    菜鳥求助:S3C2410A只有4K的RAM,硬件設(shè)計的時候誤用了個SDRAM,想用仿真在線調(diào)試,如何將程序下載到SDRAM中調(diào)試?
    發(fā)表于 01-23 20:52

    S3C2410處理器

    S3C2410處理器通過GPD端口連接LED1-4四個燈,試著畫出其電路連接圖,并變成實現(xiàn)其逐一點亮功能。
    發(fā)表于 11-23 21:50

    s3c2410協(xié)處理器指令的意思是什么?

    呵呵,s3c2410...在vivi中的s3c2410.h文件中設(shè)置時鐘時 有這么一段mrc p15,0,r1,c1,c0,0orr r1,r1,#0xc0000000;mcr p15
    發(fā)表于 02-25 12:34

    Nucleus PLUS在S3C2410A上的移植過程和方法是什么?

    Nucleus PLUS啟動過程Nucleus PLUS移植過程Nucleus PLUS在S3C2410A上的移植過程和方法
    發(fā)表于 04-25 07:05

    Nucleus PLUS在S3C2410A上的移植過程和方法,總結(jié)的太棒了

    本文詳細介紹了Nucleus PLUS在S3C2410A上的移植過程和方法,移植后的代碼在深圳優(yōu)龍科技有限公司的FS2410開發(fā)板上運行正常,可以實現(xiàn)多任務調(diào)度、任務間通信和中斷響應。
    發(fā)表于 04-26 06:38

    怎么設(shè)計一種基于ARM9 S3C2410A的智能車載系統(tǒng)?

    本文設(shè)計一種基于ARM9 S3C2410A的智能車載系統(tǒng),它能夠通過GPS全球定位系統(tǒng)和GPRS無線通信技術(shù),實現(xiàn)車輛定位以及車輛與控制中心之間的數(shù)據(jù)通信,構(gòu)建CAN總線控制模塊用于采集車輛主要部分的工作狀態(tài),實時監(jiān)控汽車的主要技術(shù)參數(shù),并通過LCD模塊顯示車載信息的綜合
    發(fā)表于 05-17 06:03

    s3c2410中文資料下載

    s3c2410中文資料手冊:2.1概述:有第1章,第2章,第十六章,第五章,第六章. S3C2410A采用了非常先進的ARM920T內(nèi)核,它是由ARM(Advanced RISC Machines)公司研制的。 2.2處理
    發(fā)表于 07-10 23:52 ?1584次下載

    s3c2410中文手冊(第1,2,3,5,6,8,16章)

    s3c2410中文手冊,S3C2410A采用了非常先進的ARM920T內(nèi)核,它是由ARM(Advanced RISC Machines)公司研制的。S3C2410A采用了非常先進的ARM920T內(nèi)核,它是由ARM(Advance
    發(fā)表于 08-04 12:33 ?17次下載

    基于ARM9的VxWorks增強型網(wǎng)絡(luò)驅(qū)動設(shè)計

    VxWorks 下增強型網(wǎng)絡(luò)驅(qū)動是一個鏈路層驅(qū)動程序,它通過MUX 層函數(shù)與網(wǎng)絡(luò)協(xié)議層進行通信,分析了基于
    發(fā)表于 09-12 17:15 ?16次下載

    基于S3C2410A的嵌入式系統(tǒng)的U-Boot移植

    基于S3C2410A的嵌入式系統(tǒng)的U-Boot移植 0 引 言    ARM嵌入式處理器已被廣泛應用于消費電子產(chǎn)品、無線通信、網(wǎng)絡(luò)通信和工業(yè)控制等領(lǐng)域。其中,ARM9的芯片
    發(fā)表于 12-24 17:08 ?1250次閱讀
    基于<b class='flag-5'>S3C2410A</b>的嵌入式系統(tǒng)的U-Boot移植

    基于S3C2410A設(shè)計的工程地震儀方案

    摘要:闡述基于三星ARM處理器S3C2410A和嵌入式操作系統(tǒng)Windows CE.net構(gòu)造微型工程地震儀的設(shè)計原理和實現(xiàn)方法。在現(xiàn)有
    發(fā)表于 07-21 16:40 ?1124次閱讀
    基于<b class='flag-5'>S3C2410A</b>設(shè)計的工程地震儀<b class='flag-5'>方案</b>

    S3C2410A USER'S MANUAL

    S3C2410A USER'S MANUAL
    發(fā)表于 10-25 14:59 ?15次下載
    <b class='flag-5'>S3C2410A</b> USER'<b class='flag-5'>S</b> MANUAL

    基于S3C2410處理器和Linux實現(xiàn)嵌入式網(wǎng)關(guān)的設(shè)計

    介紹了一種基于ARM9的嵌入式以太網(wǎng)的設(shè)計方案?;贏RM內(nèi)核微處理器S3C2410的功能特點及其外擴組成部分,分析了以太網(wǎng)控制芯片RTL8019AS的性能以及與
    的頭像 發(fā)表于 06-22 14:28 ?2500次閱讀
    基于<b class='flag-5'>S3C2410</b>微<b class='flag-5'>處理器</b>和Linux<b class='flag-5'>實現(xiàn)</b>嵌入式網(wǎng)關(guān)的設(shè)計

    基于S3C2410A的嵌入式織物密度檢測裝置研究

    電子發(fā)燒友網(wǎng)站提供《基于S3C2410A的嵌入式織物密度檢測裝置研究.pdf》資料免費下載
    發(fā)表于 10-19 10:36 ?1次下載
    基于<b class='flag-5'>S3C2410A</b>的嵌入式織物密度檢測裝置研究

    S3C2410A存儲控制中文數(shù)據(jù)手冊

    S3C2410A的存儲控制提供訪問外部存儲所需要的存儲控制信號。S3C2410A的存儲
    發(fā)表于 10-20 16:12 ?2次下載
    <b class='flag-5'>S3C2410A</b>存儲控制<b class='flag-5'>器</b>中文數(shù)據(jù)手冊