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

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

3天内不再提示

基于POWERPC860T芯片和VxWorks操作系统实现以太网通信系统设计

电子设计 来源:单片机与嵌入式系统应用 作者:王保华,方惠如 2020-06-08 08:00 次阅读

通过TCP/IP协议栈来实现数据通信,是目前大多数通信设备所必备的。在以太网上实现TCP/IP更是一种价廉物美的选择。本文描述的正是这种通信设备一种实现方法。

通信控制设备大多是嵌入式系统,求CPU功耗低、接口种类丰富。POWERPC 860T芯片是摩托罗拉公司MPC860系列通信专用嵌入式CPU的产品,主要特点是增加了1个10/100M自适应以太网口,工作频率可达80MHz,广泛地用于中、高档通信设备。其内部结构框图如图1所示。

从图1中可以看出,860T芯片主要由微处理器内核(embedded POWEPRPC core)、系统接口单元SIU(System Interface Unit)、通信处理器单元CPM(Communication Processor Module)和快速以太网模块FEM(Fast Ethernet Module)等组成。由于860T中集成了许多外围接口的控制器,同FLASH、SRAMSDRAM等各种存储器可实现无缝隙连接。外部通信接口一般只需添加线路接口单元。本文实现的系统硬件框图如图2所示。FLASH采用的是AM29LV017,SRAM为SODIMM SDRAM条。

基于POWERPC860T芯片和VxWorks操作系统实现以太网通信系统设计

CPU部分的4个SCC均可配置为10M以太网控制器,FEM为一个10/100M以太网自适应控制器。通过这些以太网控制器,只需简单的线路接口单元就可构成10M以太网口和10/100M自适应网口。该以太网口符合IEEE802.3规范。实际使用中,860T设备多少个网口,应根据芯片的运行主频和接口要求来统筹考虑。在设计时,相关的性能计算可使用摩托罗拉公司推供的软件进行估算。我们在50 MHz MPC860T芯片上,实现了1个10M网口(采用SCC1实现,如图3所示)和1个10/100M自适应网口(如图4所示)。

MPC860T中I/O口引脚几乎都有多种功能,通过对有关的寄存器进行设置或将某些引脚设置成指定电位,使得有关I/O口的功能为设计指定的功能。在设计时,可能会发现某些多功能引脚要么只能处于A功能,要么处于B功能,无法使得A、B功能同时满足。由于MPC860T的引脚多、各引脚的功能也多,为了能够尽快地确定各引脚的功能,可利用摩托罗拉公司提供的引脚功能安排工具,检查引脚功能上的冲突。

MPC860T是遵照POWERPC结构体系的嵌入式芯片系列,因此可实现多任务操作,并支持多种内存映射方式,完全能够运行实时多任务操作系统,以便满足通信控制设备所要求的实时性。

Wind River公司的VxWorks实时多任务嵌入式操作系统是大多数实时嵌入式系统的首选,具有其它嵌入式操作系统无法比拟的内核代码少、裁剪性强、实时性强、软件模块多等优点。本文的多网口通信实现是在VxWorks集成环境TORNADO 2.0下开发的。关于VxWorks实时嵌入式操作系统可参见Wind River公司的相关资料

VxWorks支持TCP/IP协议栈,用户程序可通过BSD套接字方式访问网络,工作方式和Windows下的BSD套接字方式基本一样。

VxWorks的TCP/IP协议栈与网络设备驱动的接口有两种。一种是标准的BSD4驱动程序。它将驱动程序和协议紧密关联在一起,不利于多协议的支持(后期BSD进行了改进,可实现多协议的支持)。VxWorks不推荐使用BSD4驱动程序。另一种标准是VxWorks专有的END(Enhanced Network Driver)驱动程序。它通过一个称为MUX的薄层,将驱动程序和协议栈隔离开,达到驱动程序独立于具体协议的目的,从而实现多协议的支持。END驱动程序技术多播和轮询通信方式。因此,我们采用END驱动程序方式来实现网络设备驱动程序,扩展通信功能。

VxWorks的驱动程序既可以在启动时加载,也可以在系统启动后加载。不过网络驱动程序,最好是在启动时加载(本文采用此方式)。VxWorks启动时,发起的tUsrRoot任务初始化网络任务的JOB队列,同时发起tNetTask任务来处理网络任务中的JOB队列,调用muxDevLoad()装载用户网络设备驱动程序。之后,通过muxDevStart()启动该网络设备驱动程序。

用户驱动程序的中断例程,通过sysIntConnect()挂接在系统的中断结构上。一般在muxDevStart()中完成该工作。

驱动程序的中断例程,一般尽可能少地做一些将接收的数据包搬移工作,以减少中断关闭的时间。用户的实际中断处理服务例程放在netJob任务中完成(中断例程通过netJobAdd()函数将实际中断处理服务例程加到netJob任务的队列中)。

用户在编写好驱动程序后,应根据要求修改板级支持软件包(BSP)中confignet.h的内容,以例系统正确加载。主要修改endTb1表。

修改config.h中的相关内容:在默认情况下,系统仅仅支持1个网络接口。如果在config.h包含了#define FADS_860T,那么默认启动能够工作的是100M的网络接口(motfec0);如果在config.h中没有包含#define FADS_860T,那么默认启动能够工作的是10M的网络接口(cpm0)。

操作系统根据启动参数来对网络接口进行配置,简要流程如下:

①在usrRoot()中调用usrNetworkInit()(在prjConfig.c中)。在usrNetworkInit()中调用:

*usrNetProtoInit()初始化网络协议堆栈(包括BSD Socket Support、Host Table、BSD4.4Ipv4、BSD4.4UDPv4、BSD4.4TCPv4、BSD4.4ICMPv4、BSD4.4IGMPv4以及调试和show facility部分等等)。

*muxLibInit()初始化连接协议与END driver的mux层。

*usrEndLibInit()(在comps/src/net/usrEndLib.c中)支持使用mux/END接口的网络设备。

*usrNetworkBoot()使用启动参数来初始化一个网络设备。

*usrNetAppInit()初始化网络应用协议和一些server,比如RPC、rlogin、telnet server以及ftp server等等。

②在usrEndibInit()中,遍历configNet.h内的endDevTb1[]数组,调用muxDevLoad(…)装载END驱动程序,并调用muxDevStart(…)将它启动。

③在usrNetworkBoot()中调用:

*usrNetBoot()从命令参数行(bootline)提取网络接口的IP地址、目标名字(target name)以及单元号(unit number)。

*usrNetmaskGet()获取接口的网络掩码。

*usrNetworkDevStart()加入并配置一个网络设备(cpm或者motfec)。

④在usrNetworkDevStart()中,调用usrNetEndDevStart(…)、usrNetBsdDevStart(…)以及usrNetLoopbackStart()。以上3个函数中,使用命令参数行启动了1个物理网络接口以及1个本地回路接口。

从以上流程来看,当定义了FADS_860T时,默认根据命令参数行(在config.h中,有一个初始的默认值DEFAULT_BOOT_LINE)启动并配置了一个motfec网络接口。

支持双网口时的修改:

①在config.h中加入#define INCLUDE_CPM这一行。

②在configNet.h中,于#ifndef IP_MAX_UNITS行之前加入1行:#undef IP_MAX_UNITS。在默认情况下,由于仅仅支持motfec接口,IP_MAX_UNITS的值为1。因此,需要重新定义IP_MAX_UNITS,使其等于我们加入的mux有关的网络接口的个数。

③在usrNetEndDevStart(…)中的#endif /*

CPU = =SIMNT*/行之后加入以下几行代码;

#ifdef FADS_860T

#ifdef INCLUDE_CPM

usrCPMEndDevStart(“cpm”,1,InInfo[0].target_name,InPnfo[0].ip_address,InInfo[0].netmask);

routeAdd(IpInfo[0].network,IpInfo[0].gateway);

#endif

#endif/*FADS_860T*/

以下是有关定义以及usrCPMEndDevStart(…)的源代码:

struct cpmInInfo{

char *target_name; /*目标的名称*/

char *ip_address; /*目标的IP地址*/

char *network; /*网络*/

int netmask; /*网络的掩码*/

char *gateway; /*网关*/

};

struct cpmInInfo IpInfo[]= {

{NULL,NULL,NULL,0,NULL},

{NULL,NULL,NULL,0,NULL},

{NULL,NULL,NULL,0,NULL}

};

void usrCPMEndDevStart ();

void usrCPMEndDevStart (

char* pDevName, /*设备的名称*/

int unitNum, /*单元号*/

char* pTgtName, /*目标机名称*/

char* pAddrString, /*网络地址*/

int netmask /*网络掩码*/

{

END_OBJ* pEnd;

M2_INTERFACETBL endM2Tb1;

if(pDevName= =NULL)

return;

#ifdef INCLUDE_END

pEnd=endFindByName(pDevName,unitNum);

if(pEnd= =NULL){

printf(Could not find %s%d,pDevName,unitNum);

returm;

}

if(muxIoctl(pEnd,EIOCGMIB2,(caddr_t)endM2Tbl)= =ERROR)}

printf(Cannot perform EIOCMIB2 ioctl.);

return;

}

if(ipAttach(unitNum,pDevName)!=OK){

printf(Failed to attach to device %s,pDevName);

return;

}

if(usrNetIfConfig(pDevName,unitNum,pAddrString,pTgtName,netmask)!=OK){

printf(Failed to configure %s%d for IP.,pDevName,unitNum);

return;

}

printf(Attached TCP/IP interface to %s unit %d,

pDevName,unitNum);

#endif /*INCLUDE_END*/

return;

}

以上我们加入的设备名字由设备名和unit number组成。在加入第2个网络接口之前,第1个网络接口motfec0已经可以正常工作了。由于所有的ENDDRIVER都是通过遍历在configNet.h中的endDevTbl[]数组而启动的,因此第2个网络接口的unit number是1。依次数推,第3个网络接口的unit number是2…。我们加入的第2个网络接口的名字为cpml。

在支持双网口时,不同的网口应处在不同的网段上,每一个网口可支持多个网络地址。

责任编辑:gt


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

    关注

    447

    文章

    47804

    浏览量

    409173
  • 以太网
    +关注

    关注

    40

    文章

    5078

    浏览量

    166240
  • 操作系统
    +关注

    关注

    37

    文章

    6288

    浏览量

    121890
收藏 人收藏

    评论

    相关推荐

    实现以太网通信硬件电路方法

    实现以太网通信硬件电路方法很多,一般情况是CPU+MAC+PHY+网络变压器+RJ45。整个硬件电路最多用5个电子器件完成。
    发表于 10-20 09:25 620次阅读
    <b class='flag-5'>实现以太网通信</b>硬件电路方法

    VxWorks操作系统使用指南

    1. VxWorks操作系统概述1.1.VxWorks 操作系统简介1.2.VxWorks操作系统
    发表于 07-20 13:10

    怎样实现以太网通讯?

    用LabVIEW实现以太网通讯需要设置哪些参数?怎样实现通讯?
    发表于 12-14 19:31

    基于VxWorks和MPC860T的嵌入式串口通信服务器设计

    和应用的一个热点。论文以嵌入式实时操作系统VxWorks和高性能的嵌入式微处理器MPC860T为软硬件平台,提出了一个适合各种速率的串行设备接入IP网络的高性能通信服务器的解决方案,它
    发表于 07-19 07:07

    请问UDP SOCKET要用操作系统才可以实现以太网通信吗?

    公司一个项目要用UDP SOCKET实现以太网通信,能不用操作系统吗,如果不用的话这句又怎么破:#if ((LWIP_SOCKET||LWIP_NETCONN)&&(NO_SYS==1))#error"…" #endif
    发表于 03-26 04:36

    怎么实现以太网的光无线通信系统的设计?

    怎么实现以太网的光无线通信系统的设计?
    发表于 05-28 07:08

    VxWorks操作系统下光纤通道通信软件的实现

    VxWorks操作系统下光纤通道通信软件的实现道了主实(机中现适国光配纤航器通空的道计工技作算术原技在理术机,研栽分计析究算了所机该,世适陕中配的奎西器应 西提用安供,
    发表于 12-16 14:06 14次下载

    嵌入式实时操作系统VxWorks中串口通信实现

    嵌入式实时操作系统VxWorks中串口通信实现
    发表于 03-29 12:27 19次下载

    基于MPC8260和VxWorks实现快速以太网通信

    摩托罗拉MPC8260 微处理器芯片因其强大的通信处理能力和多种协议的支持而被广泛应用于通信和网络领域。本文以MPC8260 为例,探讨在嵌入式系统
    发表于 10-08 16:05 32次下载

    VxWorks以太网通信报文的粘连问题

    VxWorks以太网通信报文的粘连问题   VxWorks是美国Wind River公司推出的一款专门为实时系统设计开发的操作系统内核,
    发表于 03-29 15:14 846次阅读
    <b class='flag-5'>VxWorks</b>中<b class='flag-5'>以太网通信</b>报文的粘连问题

    单片机实现以太网通讯硬件设计

    介绍以太网的帧协议和以太网控制芯片RTL8019AS的结构特性;介绍单片机控制RTL8019AS实现以太网通讯的硬件设计方案;采用c51语言实现
    发表于 08-29 16:32 126次下载
    单片机<b class='flag-5'>实现以太网通</b>讯硬件设计

    W5100在单片机实现以太网通信中的应用

    在此介绍了一种基于单片机和W5100组合实现以太网通信的设计方法。采用以TCPdP协议为基础的网络解决方案。W5100是嵌入式以太网硬件协议栈芯片,它同时集TCP/IP协议栈、以太网M
    发表于 04-24 15:13 153次下载
    W5100在单片机<b class='flag-5'>实现以太网通信</b>中的应用

    瑞萨低功耗R-IN32M3系列工业以太网通信芯片

    近期,瑞萨电子宣布推出可支持多协议的工业级以太网通信芯片R-IN32M3系列产品,该产品在硬件中实现集成CPU实时操作系统高速运算,从而减轻负载引擎
    发表于 12-29 11:41 2445次阅读

    嵌入式VxWorks实时操作系统中串口通信实现

    嵌入式VxWorks实时操作系统中串口通信实现
    发表于 08-31 16:03 7次下载
    嵌入式<b class='flag-5'>VxWorks</b>实时<b class='flag-5'>操作系统</b>中串口<b class='flag-5'>通信</b>的<b class='flag-5'>实现</b>

    基于VxWorks操作系统下光纤通道通信软件的实现

    基于VxWorks操作系统下光纤通道通信软件的实现
    发表于 08-31 17:08 4次下载
    基于<b class='flag-5'>VxWorks</b><b class='flag-5'>操作系统</b>下光纤通道<b class='flag-5'>通信</b>软件的<b class='flag-5'>实现</b>