0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于S3C2410A处理器实现增强型网络驱动的应用方案

电子设计 来源:微计算机信息 作者:钱华明;赵斌 2021-05-14 17:13 次阅读

VxWorks是美国风河公司(Wind River)推出的具备网络功能的实时嵌入式操作系统。VxWorks以其良好的可靠性和卓越的实时性被广泛应用于航海、军事、航窄、通信等高精尖技术及实时性要求极高的领域中。vxWorks在各种CPU平台上提供了统一的编程接口和一致的运行特性,尽可能屏蔽不同CPU之间的底层差异。所以,VxWorks可以方便地移植到不同的CPU平台上,如ARM、PowerPC、x86等。

增强犁网络驱动(Enhanced Network Driver,END)是一个使用MUX(多路复用)功能来与网络协议进行通信的数据链路层驱动。本文主要研究基于sumsang公司S3C2410A处理器的网络硬件环境下VxWorks嵌入式操作系统增强型网络驱动程序的构建和编写。

1 S3C2410A的网络硬件平台

S3C2410A微处理器是sumsang半导体公司为手持设备等相关应用设计的一款低功耗、高集成度的处理器,包含一个ARM920T芯片。S3C2419A内嵌的CS8900A作为主控芯片的以太网模块,是一款低成本的以太局域网控制器,包含片上RAM、10Base-T传输和接收滤波器,以及带24mA驱动的直接ISA总线接口,还集成了一个10Mbps的以太网收发器.以及所有用于和局域网通信的模拟数字电路,通过一个电磁隔离器E2023直接和局域网相连。RJ45为网络接头,可连接10M/100M的网络集线器。CS8900A工作在全舣工模式下.支持包括用于流控的暂停操作的IEEE802.3MAC控制层协议。其硬件原理图如图1所示。

2 增强型网络驱动END

VxWorks支持两种模式的网络设备驱动程序,即BSD 4.3网络驱动程序和可裁剪的增强型网络设备驱动SENS。SENS(Sealable Enhanced Network Stack)是由BSD 4.3 TCP/IP网络协议栈发展而来的,并包含了许多原协议栈没有的协议。而且SENS在实现新的协议时增加了一些新特性,如在IP协议实现时增加了多播功能。为实现网络接口程序可替换,WindRiver专为SENS设计了一种增强的网络驱动程序END。SENS模型包含3个部分:协议驱动程序、多路复用接口(MUX)和增强的网络驱动(END)。在驱动程序和上层协议之间,SENS模型提供了协议驱动层。在协议驱动层和END驱动层之间,SENS模型提供了MUX层,使其直接与END驱动程序进行交互。它们之间的结构关系如图2所示。

在BSD 4.3模型下,VxWorks网络驱动程序与协议紧密结合,它们依赖于彼此的数据结构;而在基于MUX模型下,网络驱动程序和协议之间没有内部交换数据,它们只通过MUX间接相互作用。MUX接口的作用便是分解网络驱动程序和协议,使它们几乎独立。这种独立使得添加新的驱动程序和协议变得非常简单。

3 END网络驱动程序的装载和启动

在基于S3C2410A的VxWorks BSP设计中,configNet.h文件定义了一个END_TBL_ENTRY结构的数组endDevTbl[],该数组将网络设备驱动程序的装载函数cs8900EndLoad()入口点及相关参数添加到网络设备表endDevTbl[]中。endDevTbl[]数组描述了系统所有网络设备的装载入口点及其相关参数.其中的一个参数CS_LOAD_STRING进行资源字符串的初始化工作。资源字符串的描述和加载程序的处理有关,需要包含网卡基地址、中断向量号、中断号、偏移、配置值、MAC地址等。不同网卡的资源字符串有所不同,而且排列顺序也没有硬性的规定,只要提供的数据能满足endLoad()的需要即可。

在使用编写好的vxworks BSP引导操作系统时,系统将执行usrRoot()函数来实现以下功能:首先初始化网络任务的工作队列,然后调用tNetTask()任务来处理网络任务工作队列中的任务。tNetTask()通过调用muxDevLoad()来装载网络接口驱动,在tNetTask()中已经定义了网络驱动设备的endLoad()接入点,muxDevLoad()也要执行endLoad()。endLoad()执行设备初始化并返回一个名为END_OBJ的结构体。MUX在END_OBJ上加一个指针,指向能够将数据包向MUX上层发送的函数。然后MUX把返同的END_OBJ加入到END_OBJ结构链表中。当从muxDevLoad()返回后,网络设备就准备好可以使用了。设备装载完成后,muxDevload()调用muxDevStart()启动函数,该函数通过intConnect()和intEnable()实现中断服务的注册并打开中断宏。当有数据交换时,打开中断服务程序,调用排列网络任务处理函数netJobAdd(),指派网络系统任务tNeflask(),由tNetTask()数据接收和发送任务。其网络设备的驱动程序安装顺序如图3

所示。

图3 END加载顺序图

在VxWorks中添加END网络驱动,需要在文件config.h中添加#define INCLUDEEE_NETWORK和#define INCLUDE_END。在configNet.h中添加END驱动的入口函数#define LOAD_FUNC_0 cs8900aLoad和一些相关的初始化字符串。这样就会在生成的BSP中包含END/MUX。

调试时,配置Tomado的目标服务器(Target Server),通过选择Tools-》Target Server-》Configure来启动目标服务器的配置程序.选择wbdrpc后台,选中Add description to menu,根据BSP中的配置填写IP地址。

4 END驱动程序相关函数的设计

END网络驱动程序相关处理函数的设计是网络驱动和管理的关键部分,它包括ioctl、收/发处理、中断处理函数和网络驱动程序函数。

(1) ioctl函数的编写

ioctl函数主要完成网卡的启动和停止,以及MAC地址的设置等,由文件cs8900aEnd.c中的es8900aloctl()函数实现。在函数中可以通过输入命令行参数分别对设置MAC地址请求、获取MAC地址请求、设置设备标志、获取设备标志、启动轮询操作、结束轮询操作、返网MIB信息、返同第一个最小的缓冲区和返同头的大小等进行参数设置。

(2)数据接收函数的编写

为了保证数据帧接收的实时性,在cs8900aRecv()函数中使用中断的方式处理数据帧的接收。中断中应尽可能做较少的处理,所以当网络设备产生中断时,用户中断服务程序最好包含任务级别的处理服务程序.可以通过调用netJobAdd()实现。它接收一个程序指针和多达5个附加自变量,可以将应用程序用来处理数据包的入口点设定为任务级别。然后把任务放入tNetTask队列,可以用tNetTask来处理任务级别的网路处理。只要tNetTask队列中有函数,它就会一直工作,直到队列为空,进入睡眠状态。

当有数据到达网络设备时,触发中断进入中断服务程序cs8900aEndInt。在中断服务程序里查看中断状态寄存器,如果ReceiveComplete位为高则进入cs8900aMacRxInt()。在cs8900aMacRxInt()中关闭中断.并调用BeOobAdd()将cs8900aEndHandleRcvInt()添加到tNetTask要处理的网络任务队列中。cs8900aEndHandleRevlnt()主要完成以下工作:

通过netClBtkGet()来预定一个clBlk结构;

通过netClBlkJoin()把clBlk结构链接到包含数据包的cluster;

通过netMblkGet()来预定一个mBlk结构;

通过netMblkClJoin()把mBlk连接到clBlk、cluster;

通过netClusterGel()重新预定一个cluster给收缓冲描述符供下次接收使用;

重新开启中断。

(3)数据发送函数的编写

数据帧的发送不采用中断模式,直接调用底层驱动发送函数cs8900aEndSend()。发送的步骤如下:1.用户凋用write()通过socket套接字访问网络;2.网络协议拷贝到网络缓冲区,并调用协议驱动的发送程序;3.协议驱动发送程序调用muxSend()启动发送;4.muxSend()通过调用send()回调函数,把缓冲区传递给END;5.数据发送程序cs8900aEndSend()调用netMblkToBufCopy()将数据拷贝到缓冲中,并立即发送出去。拷贝完成后,调用netMblkClChainFree()释放所有链中的mBlk缓冲并归还到内存池。

(4)修改cs8900a.h文件

由于S3C2410A芯片内部集成了MAC控制器,由芯片内部寄存器进行控制。因此不需要为网卡模块另外分配外设端口或映射寄存器地址。虽然S3C2410A芯片和物理层接口芯片在外部足两个部分,但是从开发的角度看它们是一个整体。在cs8900a.h文件中主要完成一些基本配置的设定:

#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 主要完成设备驱动程序函数的编写:

//从MIB获取硬件地址

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

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

//配置设定

#define END_BUFSIZ (ETHERMTU+SIZEOF_ETHERHEADER+6)

#define END_SPEED_10M 10000000 /*10Mbs*/

#define END_SPEED END_SPEED_10M

//定义名称

#define DRV_NAME “cs”

。。.。。.

然后添加驱动控制结构,其结构如下:

typedef struct end device

{

END_0BJ end //继承的END_OBJ结构

int unit; //设备单元数

int ivecBdmaTx; //bdmaTx中断向量

int ivecBdmaRx; //bdmaRx中断向量

。。.。。.

UCHAR csAddr[6]; //以太网地址

CACHE_FUNS * cacheFuns; //高速缓冲功能函数指针

。。.。。.

}

该结构中的内容是根据网络设备和用户需要而设计的,其中END_OBJ结构必须包含。并放置在结构的第一项。

5 结束语

VxWorks下增强型网络驱动是一个链路层驱动程序,它通过MUX层函数与网络协议层进行通信,本文分析了基于samsung公司的S3C2410A处理器的VxWorks操作系统嵌入式网络硬件平台,阐述了VxWorks操作系统下增强型网络接口结构,并根据硬件的设计环境详尽描述并给出了适合该硬件系统的END型网卡驱动的编写及其在vxWorks系统中的加载,满足系统网络传输的要求。由于硬件环境不间,所以不同开发板上END的设计会在驱动的初始化、发送和接收函数的配置上有所不同,但根据相应的硬件用户手册稍加改动即可使用,对其他开发板的网络驱动开发具有一定的参考和借鉴价值。

本文作者创新点:本文阐述了vxworks操作系统下增强型网络驱动的构成原理,给出了基于S3C2410A芯片的增强型网络驱动的具体实现方法。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19281

    浏览量

    229789
  • 嵌入式
    +关注

    关注

    5082

    文章

    19118

    浏览量

    305102
  • 操作系统
    +关注

    关注

    37

    文章

    6818

    浏览量

    123326
收藏 人收藏

    评论

    相关推荐

    S3C2410A如何在外扩的SDRAM中调试程序?

    菜鸟求助:S3C2410A只有4K的RAM,硬件设计的时候误用了个SDRAM,想用仿真在线调试,如何将程序下载到SDRAM中调试?
    发表于 01-23 20:52

    S3C2410处理器

    S3C2410处理器通过GPD端口连接LED1-4四个灯,试着画出其电路连接图,并变成实现其逐一点亮功能。
    发表于 11-23 21:50

    s3c2410处理器指令的意思是什么?

    呵呵,s3c2410...在vivi中的s3c2410.h文件中设置时钟时 有这么一段mrc p15,0,r1,c1,c0,0orr r1,r1,#0xc0000000;mcr p15
    发表于 02-25 12:34

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

    Nucleus PLUS启动过程Nucleus PLUS移植过程Nucleus PLUS在S3C2410A上的移植过程和方法
    发表于 04-25 07:05

    Nucleus PLUS在S3C2410A上的移植过程和方法,总结的太棒了

    本文详细介绍了Nucleus PLUS在S3C2410A上的移植过程和方法,移植后的代码在深圳优龙科技有限公司的FS2410开发板上运行正常,可以实现多任务调度、任务间通信和中断响应。
    发表于 04-26 06:38

    怎么设计一种基于ARM9 S3C2410A的智能车载系统?

    本文设计一种基于ARM9 S3C2410A的智能车载系统,它能够通过GPS全球定位系统和GPRS无线通信技术,实现车辆定位以及车辆与控制中心之间的数据通信,构建CAN总线控制模块用于采集车辆主要部分的工作状态,实时监控汽车的主要技术参数,并通过LCD模块显示车载信息的综合
    发表于 05-17 06:03

    s3c2410中文资料下载

    s3c2410中文资料手册:2.1概述:有第1章,第2章,第十六章,第五章,第六章. S3C2410A采用了非常先进的ARM920T内核,它是由ARM(Advanced RISC Machines)公司研制的。 2.2处理
    发表于 07-10 23:52 1584次下载

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

    s3c2410中文手册,S3C2410A采用了非常先进的ARM920T内核,它是由ARM(Advanced RISC Machines)公司研制的。S3C2410A采用了非常先进的ARM920T内核,它是由ARM(Advance
    发表于 08-04 12:33 17次下载

    基于ARM9的VxWorks增强型网络驱动设计

    VxWorks 下增强型网络驱动是一个链路层驱动程序,它通过MUX 层函数与网络协议层进行通信,分析了基于
    发表于 09-12 17:15 16次下载

    基于S3C2410A的嵌入式系统的U-Boot移植

    基于S3C2410A的嵌入式系统的U-Boot移植 0 引 言    ARM嵌入式处理器已被广泛应用于消费电子产品、无线通信、网络通信和工业控制等领域。其中,ARM9的芯片
    发表于 12-24 17:08 1303次阅读
    基于<b class='flag-5'>S3C2410A</b>的嵌入式系统的U-Boot移植

    基于S3C2410A设计的工程地震仪方案

    摘要:阐述基于三星ARM处理器S3C2410A和嵌入式操作系统Windows CE.net构造微型工程地震仪的设计原理和实现方法。在现有
    发表于 07-21 16:40 1170次阅读
    基于<b class='flag-5'>S3C2410A</b>设计的工程地震仪<b class='flag-5'>方案</b>

    S3C2410A USER'S MANUAL

    S3C2410A USER'S MANUAL
    发表于 10-25 14:59 15次下载
    <b class='flag-5'>S3C2410A</b> USER'<b class='flag-5'>S</b> MANUAL

    基于S3C2410处理器和Linux实现嵌入式网关的设计

    介绍了一种基于ARM9的嵌入式以太网的设计方案。基于ARM内核微处理器S3C2410的功能特点及其外扩组成部分,分析了以太网控制芯片RTL8019AS的性能以及与
    的头像 发表于 06-22 14:28 2633次阅读
    基于<b class='flag-5'>S3C2410</b>微<b class='flag-5'>处理器</b>和Linux<b class='flag-5'>实现</b>嵌入式网关的设计

    基于S3C2410A的嵌入式织物密度检测装置研究

    电子发烧友网站提供《基于S3C2410A的嵌入式织物密度检测装置研究.pdf》资料免费下载
    发表于 10-19 10:36 1次下载
    基于<b class='flag-5'>S3C2410A</b>的嵌入式织物密度检测装置研究

    S3C2410A存储控制中文数据手册

    S3C2410A的存储控制提供访问外部存储所需要的存储控制信号。S3C2410A的存储
    发表于 10-20 16:12 2次下载
    <b class='flag-5'>S3C2410A</b>存储控制<b class='flag-5'>器</b>中文数据手册