基于NicheStack TCP/IP协议栈的嵌入式以太网控制器的设计与实现
刘黎明;王用玺
【摘 要】针对传统嵌入式以太网系统存在的数据传输速率低、硬件不能升级、实时性和通用性不足等问题,提出了基于内嵌有Nios II CPU 的Altera Cyclone系列FPGA的以太网控制器设计方案。该方案针对以太网协议利用Quartus II和Nios II IDE为开发工具,对硬件进行重新配置,以提高系统集成度;采用SOPC技术构建了嵌入式网络硬件平台;基于μC/OS-II实现了NicheStack TCP/IP协议栈的移植及顶层应用程序的编写。系统测试结果表明,数据能够以400 Mb/s的速率正确收发,满足了以太网通信速率的要求,并可根据实际情况灵活配置。%In order to solve the problems of the traditional embedded Ethernet system,such as low data transmission rate,hardware cannot be upgraded,poor real-time and universality etc,the Ethernet controller design scheme based on Altera Cyclone series FPGA with Nios II CPU was proposed.The design aimed at Ethernet protocal using the Quartus II and Nios II IDE as the development tools for reconfiguration of the hardware in order to reduce the cost and improve the system integration.The SOPC technology was used to construct the embedded
network hardware platform and based on μC/OS-II to achieve the migration of Ni-cheStack TCP/IP and compiling of the top application.The system test results showed that the design met the requirement of the Ethernet communication rate at the data rate of about 400 Mb/s,and could be flexi-ble configurated according to actual situation.
【期刊名称】《郑州轻工业学院学报(自然科学版)》
【年(卷),期】2015(000)001
【总页数】5页(P95-99)
【关键词】NicheStack TCP/IP协议栈;以太网控制器;FPGA;SOPC;μC/OS-II
【作 者】刘黎明;王用玺
【作者单位】商丘师范学院 物理与电气信息学院,河南 商丘 476000;河南省城乡规划设计研究总院有限公司智能化研究所,河南 郑州 450000
【正文语种】中 文
【中图分类】TP393
随着网络技术的发展,网络通信技术的应用日益广泛,将嵌入式设备和以太网技术结合[1]进行高速数据传输、远程实时监控及远程视频会议等,已经成为嵌入式领域的研究热点,而这些研究都对网络性能、实时性和灵活性等提出了严苛的要求.
目前,传统的嵌入式网络系统多采用8 b或16 b 的低速控制单位(MCU),在运行协议栈时,可靠性和实时性都难以保证.以ARM7为例,在没有其他任务占用资源时,CPU向PC传送数据的最大传输速率仅为31 Mb/s.文献[2]基于以LPC2478嵌入式处理器为核心的硬件平台实现了以太网通信,但只适用于小型协议;文献[3]基于SAMSUNG S3C44B0X 微处理器和RTL8019S,通过Socket编程在嵌入式uCLinux系统上实现了网络通信,但仅适用于系统网络数据较小且传输速率为 10 Mb/s 的以太网传输.在以上方案中,如果处理器在同时执行其他运算和控制任务,数据传输速率将会大幅减小.随着电子技术的发展,研究者开始尝试采用可编程逻辑器件实现网络数据的传输、交换、控制等功能[4-5].本文拟将性价比高、配置灵活的现场可编程门阵列(FPGA)用于以太网控制器设计,采用NicheStack TCP/IP协议栈和Nios II处理器,通过定制IP核实现整个系统,以提高系统实时性和扩展性.
基于tcp协议的应用程序包括
NicheStack TCP/IP是专用于嵌入式系统的精简协议栈,具有移植简单、可靠性高和代码精简等特点,包含Socket API,ANSI C代码和基本网络通信功能,是TCP/IP组的smal_footprint实现.目前,NicheStack支持ICMP,IP,TCP,UDP等多种协议和服务[6].NicheStack TCP/IP协议栈具有以下特点:
1)占用内存少.Boot最小启动客户(包括ARP,IP,ICMP,UDP,DHCP和TFTP)只占12.8 KB,完整的TCP/IP只需42.4 KB,增加Socket API需要 51.5 KB.
2)支持两种任务模式,即支技主循环查询方式和任务挂起/恢复方式.
3)通用性的内存管理.在使用内存时,利用宏定义对其进行分配和释放,分配时其大小固定.
4)与RTOS无关.
5)可靠性高,在数据通信中,TCP数据包传输只受传输介质的频带宽度限制.
6)可支持多种网络硬件,包括令牌环网、以太网和SLIP.
本设计以Cyclone II系列的FPGA为核心硬件平台,采用嵌入FPGA的Nios II软核为主处理器,
基于Altera提供的Enternet IP协议,采用DAVICOM 公司的DM9000网络控制芯片为以太网控制芯片(该芯片具有通用处理器接口,1个10/100 PHY和 4 KB 的SRAM,可实现网络协议中MAC层和传输层的功能,是一款低功耗高性能的控制器),其他硬件还包括JTAG接口、Flash存储器接口等.系统结构如图1所示.
系统硬件平台设计过程如下:
首先,在SOPC builder中构建SOPC系统,包括Nios II软核CPU、存储器接口、以太网接口等,这也是系统的主要硬件部分,并通过Avalon总线将它们相连;其次,将SOPC builder生成的原理图模块进行布局连线设计;最后,由系统生成配置文件,下载到开发板上.由上述过程生成的以太网SOPC系统如图2所示.
本系统软件设计主要包括三部分,即μC/OS-II移植、NicheStack TCP/IP网络协议栈的移植、顶层应用程序的编写和实现.其软件结构如图3所示.
3.1 μC/OS-II移植
μC/OS-II移植就是将μC/OS-II实时内核移植到特定的微处理器,运行μC/OS-II时需提供源代码
和系统运行软件[7-8].
μC/OS-II是一个多任务调度器,添加了与多任务操作系统相关的信号量、邮箱等服务.其中,实现多任务之间的切换是移植过程的主要工作,因为这部分代码是用来恢复和保存处理器现场的,因此只能使用处理器的汇编语言完成,而不能用C语言完成[9].
本设计将μC/OS-II移植到Nios II软核上,需要对与Nios II体系结构相关的OS_CPU.H文件、OS_CPU_C.C文件和OS_CPU A.ASM文件进行修改.μC/OS-II通过以上文件实现任务切换和中断机制,通过编写相应的中断响应函数使系统在目标处理器上运行.
μC/OS-II建立在安全线程HAL系统库上,与Nios II系统兼容,是系统软件设计和Nios II系统的一部分.HAL提供了μC/OS-II在Nios II上运行所需的驱动,因此μC/OS-II不仅可以使用HAL服务,而且可以调用API函数.对于Nios II 处理器而言,μC/OS-II作为HAL库的一个子集,是HAL环境的一种扩展,包括相应的μC/OS-II API功能和μC/OS-II系统的调度[10-11].利用Nios II IDE对RTOS模块进行配置,其结果保存在OS_CFG.H文件中,无需编写头文件或源代码.
3.2 NicheStack TCP/IP协议栈的移植
本文采用NicheStack TCP/IP协议栈作为系统的数据传输协议,通过该协议栈调度实现系统通信功能.NicheStack TCP/IP在Nios II处理器实现移植须满足以下要求:
1)系统程序要在基于μC/OS-II的实时操作系统运行;
2)μC/OS-II的运行需要有时钟控制机制和时钟节拍,建立任务数不小于4;
3)FPGA硬件系统需要提供带有中断的以太网接口;
4)必须由专用的定时器件提供系统时钟.
3.2.1 初始化NicheStack TCP/IP协议栈 NicheStack TCP/IP协议栈的初始化可通过两个函数来完成,一个是alt_iniche_init( ) 函数,另一个是netmain( ) 函数,并设置iniche_net_ready变量为一个非零值.系统在初始化设备过程中,调用get_mac_addr( )函数和get_IP_addr( )函数来完成MAC地址、IP地址的设置.
3.2.2 调用套接字接口 在以太网硬件初始化完成后,程序主要通过定义套接字的结构体来管理套接字的链接.程序中使用套接字接口访问IP协议栈需利用TK_NEWTASK( ) 函数,它通
过调用μC/OS-II的OSTaskCreat( ) 函数来创建线程,且进行其他NicheStack TCP/IP协议栈特定的操作.本设计通过TK_NEWTASK (&ssstask)来建立网络线程.
3.3 顶层应用程序的编写和实现
通信的软件部分主要通过编写相应的应用程序并调用移植的协议栈库函数来实现.在通信应用程序设计之前,首先要将与系统有关的以太网协议栈、驱动程序和操作系统移植,通过Nios II IDE对其进行加载,然后在Nios II IDE中完成系统通信应用程序的设计和编写.系统软件部分的通信流程如图4所示.
系统上电后,整个系统(包括硬件和任务)都需要初始化.通信的整个过程为:通过任务建立网络连接,首先在网络连接中建立一个TCP/IP服务的socket,通过调用socket( )函数来创建一个套接字;然后,listen( )函数设定侦听的连接数,若此时有来自客户机端的请求,就调用accept( )函数接受请求,与此同时客户机端则通过socket( )函数创建一个套接字,通过bind( )函数将本地IP及端口号与套接字相连,再利用connect( )函数与远程服务器连接,连接成功后,客户机与服务器将通过调用读、写套接字来进行通信,发送数据直至传输完毕后断开连接.
在本设计中,使用DE2_70开发板的快速以太网控制器发送和接收数据包,采用Nios II处理器,并通过DM9000A以太PHY/MAC 控制器来发送和接收以太网数据包.
在发送端,Nios II处理器每0.5 s向DM9000A发送64 B的数据包,DM9000A接收完成后,给其附上一个4 B的校验和,并把它发送给以太网接口,在接收和发送数据时对其进行检验.符合IEEE802.3标准的CRC多项式为
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论