《motfec设备启动,设备间通信》由会员分享,可在线阅读,更多相关《motfec设备启动,设备间通信(14页珍藏版)》请在金锄头文库上搜索。
1、网络设备驱动描述n简介n功能n初始化顺序n加载n最后一个问题简介(1)n网络设备顾名思义就是连接到网络中物理 实体,目前,网络设备种类繁多,常见的 有网卡,集线器,交换机,网桥,路由器 等。n如同网络上的设备需要通信那样,在一块 开发板上,各种不同的设备也需要相互间 进行通信,从而完成数据传递,执行相应 的功能。本篇将主要从此方面讲述设备间 通信驱动程序。简介(2)nFEC (Fast Ethernet Controller) 在bsp中,fec用来通过MII接口与其他设备进行通 信。 Motfec模块实现了摩托罗拉快速以太网控制器( FEC)的网络接口驱动程序。 FEC完全符合IEEE802
2、.3 10Base-T和100Base-T 规格,硬件支持内置在芯片的媒体独立接口( MII) FEC建立了与CPU共享内存的通信系统,分成两个 部分,控制/状态寄存器(CSR)和缓冲区描述符 (BD)功能nMotfec是CPU的网络控制器,集成在CPU 内部,对用户不可见,当CPU需要同外界 设备进行通信时,外部数据就需要经过该 接口进而送给CPUnMotfec在应用之前,需要相应的驱动程序nMotfec控制器的个数由CPU的型号来确定 ,目前,最多有3个,至少需要一个,880 则为2个初始化顺序(1)ROM AND RAM MEMORY LAYOUT Example memory layo
3、ut for a 1-megabyte board:- 0x00100000 = LOCAL_MEM_SIZE = sysMemTop()| | RAM | 0 filled | |-| = (romInit+ROM_COPY_SIZE) or binArrayStart| ROM image |- | 0x00090000 = RAM_HIGH_ADRS| STACK_SAVE |-| | 0x00080000 = 0.5 Megabytes| | | 0 filled | | | 0x00001000 = RAM_ADRS /* This devices unit # */END_OBJ*
4、 (*endLoadFunc) (char*, void*); /* The Load function. */char* endLoadString; /* The load string. */BOOL endLoan; /* Do we loan buffers? */void* pBSP; /* BSP private */BOOL processed; /* Has this been processed */ END_TBL_ENTRY;CPU网络设备motfec加载(2)Motfec设备表项初始化: END_TBL_ENTRY endDevTbl = #ifdef INCLUDE
5、_MOTFECEND 0, FEC_LOAD_FUNC, FEC_LOAD_STRING, 1, NULL, FALSE,#ifdef INCLUDE_MOTFECEND2 1, FEC_LOAD_FUNC2, FEC_LOAD_STRING, 1, NULL, FALSE,#endif #endif /* INCLUDE_MOTFECEND */ ;CPU网络设备motfec加载(3)Motfec设备通常情况下,会出两个网口,unit分别 为0和1,其中一个用于调试,即一个PHY芯片连 接到ethernet端口,下载vxWorks镜像;另一个 口用于CPU和其他设备进行通信。最少需要一个 接
6、口,最多可以有三个接口。如上面所提到的, FEC_LOAD_FUNC 与 FEC_LOAD_FUNC2定义如下: #define FEC_LOAD_FUNC sysMotFecEndLoad #define FEC_LOAD_FUNC2 sysMotFecEndLoad2 CPU网络设备motfec加载(4)Motfec0与Motfec1设备加载处理相同,定义如下: END_OBJ *sysMotFecEndLoad (char *pParamStr, /* ptr to initialization parameter string */void *unused /* unused opti
7、onal argument */ ) /* init the premeters */. if (strlen (pParamStr) = 0)pEnd = (END_OBJ*)motFecEndLoad(pParamStr);else/* init the parramStr */if (pEnd = (END_OBJ*)motFecEndLoad(paramStr) = (END_OBJ*)NULL)/* debug information ! */ return (pEnd); CPU网络设备motfec加载(5)motFecEndLoad定义: END_OBJ* motFecEndLo
8、ad (char *initString /* parameter string */ ) DRV_CTRL *pDrvCtrl = NULL; /* pointer to DRV_CTRL structure */* check the premeters */* allocate the device structure */pDrvCtrl = (DRV_CTRL *) calloc (sizeof (DRV_CTRL), 1);pDrvCtrl-phyInfo = (PHY_INFO *) calloc (sizeof (PHY_INFO), 1);/* Parse InitStrin
9、g init the structure of the DRV_CTRL */pDrvCtrl-ilevel = (int) IVEC_TO_ILEVEL (pDrvCtrl-ivec);/* sanity check the unit number */* memory initialization */if (motFecInitMem (pDrvCtrl) = ERROR)/* get our ethernet hardware address */* initialize some flags */pDrvCtrl-loaded = TRUE;pDrvCtrl-intrConnect
10、= FALSE;/* create the synchronization semaphores for mii intr handling* and for graceful transmit command interrupts.*/* endObj initializations */pDrvCtrl-phyInfo-phySpeed = MOT_FEC_10MBS;/* Mark the device ready */* determine the revision number of the processor, and set pinMux* bit accordingly*/re
11、turn ( CPU网络设备motfec加载(6)motFecEndLoad参数解析:nmotCpmAddr 指示主机处理器内部内存的地址(也称双端口Ram基址),通过这个地址,驱 动程序可以计算出FEC参数RAM的位置,最终对FEC进行正确的操作。nivec 驱动配置主机处理器,就设备内部各种各样的事件产生硬件中断。利用 vxWorks系统函数intConnect和intEnable来连接和使能中断。nbufBase 摩托罗拉快速以太网控制器是直接内存访问设备,与CPU共享访问内存区域。此 驱动程序为系统设计成在CPU和FEC之间是直接共享内存。nbufSize 内存大小参数指定了预分配内存
12、的大小,如果该参数被指定为NONE,则系统忽 视该参数,否则,驱动程序会检查所提供的内存大小区域是否能满足一定数 目的发送和接收缓冲区。nfifoTxBase 发送FIFO的基地址。CPU网络设备motfec加载(7)nfifoRxBase 接收FIFO的基地址ntbdNum 指定了发送缓冲区的数目nrbdNum 指定了接收缓冲区的数目nphyAddr 指定了与物理设备MII兼容的逻辑地址,nisoPhyAddrnphyDefModenuserFlagsnclockSpeed最后一个问题n设备间通信和网络通信有什么不同呢?设备间通信不需要通过PHY芯片,而网络间 通信必须通过PHY芯片,道理很简单