APP下载

基于ENC28J60的Nios Ⅱ网络驱动程序开发

2016-06-17陈丽娟

关键词:驱动程序

黄 翌,陈丽娟

(1.中国电子科技集团第三十八研究所 孔径阵列与空间探测安徽省重点实验室,安徽 合肥 230088;2.合肥工业大学 仪器科学与光电工程学院,安徽 合肥 230009)



基于ENC28J60的Nios Ⅱ网络驱动程序开发

黄翌1,陈丽娟2

(1.中国电子科技集团第三十八研究所 孔径阵列与空间探测安徽省重点实验室,安徽 合肥230088;2.合肥工业大学 仪器科学与光电工程学院,安徽 合肥230009)

摘要:文章介绍了以ENC28J60作为网络设备的嵌入式系统以太网通信功能的实现方法,研究了ENC28J60硬件的初始化、数据包收发的软件编程算法,分析了LwIP 的网络接口驱动层设计,介绍了如何在LwIP下开发网络驱动程序完成LwIP协议栈在ENC28J60芯片上的移植,并对系统的通信性能进行了验证。

关键词:Nios Ⅱ软核;LwIP协议栈;ENC28J60硬件;驱动程序

嵌入式IP软核进行SOPC设计的方法因为低成本、可剪裁、可重构等特性得到越来越广泛的应用。Altera公司的Nios Ⅱ软核是一种采用流水线技术、单指令流的RISC处理器,可以通过开放的Avalon总线与其他采用VHDL语言描述的硬件接口模块组成嵌入式硬件系统[1]。它具有灵活、可裁减、低成本、高性能等特点,因此有很强的竞争力。自从2000年问世以来,Nios Ⅱ已广泛地应用于通信、工业控制、计算机相关产品和消费类电子领域等[2]。

随着互联网技术的发展,越来越多的工业测试设备将以太网接入功能作为默认配置来实现设备的远程监控和信息分布式处理,而此前选择的以太网控制器都是专为个人计算机系统设计的,结构复杂、占用空间大且较昂贵[3]。本文使用的以太网控制器芯片ENC28J60是微芯公司专为嵌入式系统开发的小型以太网控制器,采用标准的SPI串行接口,外围元件配置简单,完全兼容IEEE 802.3协议,内部集成MAC和10 BASE-T PHY,支持全双工和半双工模式[4]。芯片内的双端口RAM可以自由配置,内嵌可编程数据包过滤器,支持单播(unicast)、组播(multicast)、广播(broadcast)和可编程模式匹配信息包,以减轻控制器芯片的处理负荷。本文主要介绍如何在Nios Ⅱ下基于LwIP协议栈开发ENC28J60网络驱动程序。

1软件系统

系统软件平台采用μC/OS-Ⅱ嵌入式操作系统,使用LwIP网络协议栈。

针对所使用的ENC28J60芯片,设计其在LwIP下的驱动程序。在此基础上开发的应用程序工作系统模型如图1所示。

图1 程序系统模型

μC/OS-Ⅱ开源实时操作系统是专门为计算机的嵌入式应用设计的,绝大部分代码用C语言编写,便于移植到任何一种CPU上。μC/OS-Ⅱ实现了一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量、邮箱、消息队列、内存管理、中断管理等,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点[5]。

LwIP是lightweight(轻量级)IP协议栈,提供了一套小型化的TCP/IP传输控制协议,可以在提供完整的TCP/IP功能的同时减少系统资源的使用[6]。

LwIP是专为存储器容量较小的嵌入式系统设计的,适用于Nios Ⅱ处理器系统。LwIP使用操作系统提供了一些高级管理功能,如信号量管理、消息队列管理、创建线程等。如果使用的操作系统不同,则必须针对不同的操作系统进行移植。LwIP分为几个层次,如图2所示。

图2中网络接口驱动层用来为LwIP提供网络接口芯片的驱动程序。针对不同的网络接口芯片开发设计不同的驱动程序,则可使LwIP操作不同的网络接口芯片。本系统采用ENC28J60芯片,需要设计其驱动程序,并提供与LwIP的调用接口。

图2 LwIP软件层次

1.1网络设备驱动的体系结构

LwIP协议栈的网络设备驱动程序的体系结构如图3所示,其源代码中提供了网络设备接口及以上层次的代码,开发网络设备驱动程序的主要工作就是完成设备驱动功能层的相应代码。LwIP中所有的网络设备都抽象为一个统一的接口,即网络设备接口struct netif,操作系统通过网络设备接口链表对所有网络设备进行管理[7]。

网络设备驱动程序需要根据具体的硬件特性操控内部的功能寄存器,实例化相应的网络设备接口,实现其中的收发数据包函数及中断处理程序,将具体的收发数据包函数赋予网络设备接口结构体中的函数指针,最后将此结构体加入网络设备链表完成网络设备驱动程序的开发[8]。

图3 网络设备驱动的体系结构

1.2ENC28J60网络接口数据结构

struct netif结构体是整个网络驱动结构的核心,如图4所示。

图4中定义了很多供网络协议接口层调用设备的标准方法[9]。

(1)全局信息及底层硬件信息。*next为指向全局链表下一个设备的指针;ip_addr为网络设备IP地址;netmask为网络设备子网掩码;gw为网络设备网关地址;state为指向网络设备驱动的特定状态;hwaddr_len为网络设备物理地址长度,即MAC地址长度,值为6;hwaddr为网络设备物理地址,即MAC地址;mtu为最大传输单元,以太网中值为1500;flags为网络设备状态信息标志位;link_type为网络设备连接类型;name为网络设备名称,用于标识设备驱动的种类;num为用来区分相同类别的不同网络接口。

(2)数据包处理函数。*input为指向数据包接收函数,用于将网络设备接收到的数据包提交给IP层;*output为指向数据包发送函数,用于IP层将数据包发送到网络接口上;*linkoutput为指向链路连接函数,由ARP调用,用于进行IP地址解析。

图4 网络接口数据结构

1.3网络驱动程序实现原理

(1)网络设备初始化。首先对netif网络接口数据结构进行初始化,设定物理地址、IP地址,对函数指针赋值,将其加入网络设备链表;然后在操作系统中增加数据包传输的信号量和ARP(Address Resolution Protocol)地址解析协议信号量,防止网络硬件资源的重复占用造成资源互锁;最后完成网络设备的硬件初始化,申请接收和发送缓冲区,设置单播、组播和广播寄存器,设置中断并使能等功能。

根据SOPC软件系统的框架要求,驱动程序需要实现2个专用的宏定义ALTERA-ENC28J60-INSTANCE(name,dev)和ALTERA-ENC28J60-INIT(name,dev)来调用网络设备初始化。

(2)网络数据包接收和中断处理。中断触发后,将判断是否有传输错误。如果有传输错误,对网络设备相应传输功能进行复位初始化;如果收到了有效数据包,将数据存入接收缓冲区,给操作系统发送数据包传输信号量并退出中断。

操作系统收到信号量后,将调用* input指向的数据包接收函数,通过对网络层和传输层的解析,最后提交到应用层进行用户处理。

(3)网络数据包发送和ARP数据解析。网络连接后,驱动程序自动触发ARP解析,调用链路连接函数。链路连接函数在使用网络设备资源前需要判断ARP信号量是否释放防止资源互锁,然后调用LwIP网络协议栈内部函数etharp-output进行地址解析,最后释放ARP信号量。

网络数据包的发送需要应用层程序调用*output指向的数据包发送函数,等待可用的数据包传输信号量,将待发送数据存入网络设备内部的发送缓冲区,网络设备将自动发送网络数据,函数最后释放数据包传输信号量。

(4)ENC28J60网络驱动程序的结构。按照LwIP协议栈对驱动程序的要求,需要实现网络设备硬件初始化函数enc28j60-init、网络数据输入处理函数enc28j60-input、网络数据输出处理函数enc28j60-output和网络数据中断处理函数enc28j60-isr,各函数的处理流程如图5所示。

图5 函数处理流程图

2测试

将驱动程序加入测试应用程序后,编译下载到硬件电路中,完成主控计算机与硬件电路的网络信息互传。使用Ping命令进行测试,利用网络抓包软件对数据包进行分析,如图6所示,Ping命令产生的网际控制报文协议(Internet Control Message Protocol,ICMP)包进行网络交互,数据包响应完整,TTL(time to live)小于2 ms。

在主控计算机端使用sniffer软件向硬件电路发送数据包进行硬件电路接收数据处理测试,得到的测试结果见表1所列。

图6 Ping命令产生的ICMP报文

数据包长度/Byte发送速率/(包·s-1)发送数据量/(104包)接收数据量/包收包率/%100100110001005001001100010010001001676367.63

通过表1的测试结果可以看出,当有大数据包(数据包长度为1 000 Byte)频繁到达时,硬件电路无法及时处理数据,使接收报文成功率下降,并导致操作系统无法响应其他任务。由于大数据包不断到达网络设备,触发中断,操作系统被网络任务占用,无法执行其他任务的现象称为网络堵塞。当取消主控计算机的发送任务后,驱动程序中的出错处理可以使网络设备自行恢复正常通讯。考虑到在多数嵌入式系统应用中网络作为控制及信息传输工具,不需要频繁地处理大数据,通过在驱动程序初始化网络设备时限制数据包的长度,增加大数据丢包处理机制,并调高关键任务的优先级,可以解决多任务处理时无法及时响应大数据包而造成网络堵塞的“假死机”现象。

3结束语

本文分析了如何基于Nios Ⅱ软核在μC/OS-Ⅱ操作系统和LwIP协议栈上开发ENC28J60网络设备驱动程序,详细讨论了基于Nios Ⅱ框架μC/OS-Ⅱ实时操作系统中需要实现的数据结构、指针函数和宏定义;并重点介绍了网络设备的硬

件初始化和网络数据包的接收和发送处理;最后通过硬件设备和测试应用程序对网络性能进行了评估。测试结果表明,在不存在大数据量接收和发送事件的应用场合,网络设备响应快。本系统已经成功应用于分布式仪表监控测量系统中,使用方便、运行稳定,具有一定的实用价值。

[参考文献]

[1]田青峰,卢泳兵,刘志鹏.NIOS在网络通信系统中的应用[J].无线电工程,2013,43(5):10-12.

[2]王仁波,魏雄.基于Nios Ⅱ软核嵌入式系统的以太网接口设计[J].东华理工学院学报:自然科学版,2007,30(1):73-77.

[3]鲍军民.基于ENC28J60控制器的智能仪表以太网接口设计[J].电子元器件应用,2007,9(11):1-5.

[4]李阳,吴成富,邓红德.基于DSP和ENC28J60的多串口与以太网数据传输系统设计[J].测控技术,2011,30(12):61-65.

[5]胡珏.基于μC/OS-Ⅱ的实时多任务应用研究[J].计算技术与自动化,2008,27(1):115-119.

[6]时建雷,肖铁军.面向LwIP的NIOSII网络驱动程序开发[J].微计算机信息,2008,24(5):36-38.

[7]乔从连.Nios Ⅱ网络设备加载及UDP通讯应用[J].微计算机信息,2009,25(12-2):84-86.

[8]罗维,李君懿.基于BF533的Linux网络驱动程序的开发[J].电子设计工程,2009,17(5):33-35.

[9]王建平,周辰飞,朱程辉,等.一种ZigBee-TCP/IP无缝网关模型[J].合肥工业大学学报:自然科学版,2013,36(9):1058-1062.

(责任编辑胡亚敏)

Development of Nios Ⅱ network driver based on ENC28J60

HUANG Yi1,CHEN Li-juan2

(1.Key Laboratory of Aperture Array and Space Application,No.38 Research Institute of China Electronics Technology Group Corporation,Hefei 230088,China;2.School of Instrument Science and Opto-electronic Engineering,Hefei University of Technology,Hefei 230009,China)

Abstract:In this paper,a method of realizing embedded system network communication with ENC28J60 as network device is presented.The ENC28J60’s hardware initialization and the arithmetic of how to receive and transmit the data packet are studied.Then the design of LwIP’s network interface driver layer is analyzed,and the ENC28J60’s driver is developed based on LwIP to achieve the transplant of LwIP.Finally,the communication performance of the system is tested.

Key words:Nios Ⅱ soft-core;LwIP protocol stack;ENC28J60 hardware;driver

收稿日期:2015-06-30;修回日期:2016-02-11

基金项目:国家国际科技合作专项资助项目(2011DFA12430);安徽省重大科学仪器专项资助项目(1310115190)

作者简介:黄翌(1978-),男,安徽合肥人,中国电子科技集团第三十八研究所高级工程师.

doi:10.3969/j.issn.1003-5060.2016.04.006

中图分类号:TP393.1

文献标识码:A

文章编号:1003-5060(2016)04-0462-05

猜你喜欢

驱动程序
驱动升级管理维护一条龙
避免Windows系统更新反复安装显示驱动
方便直观改善Windows驱动程序管理
设备升级问题回退驱动解决
阻止Windows Update更新驱动程序
计算机硬件设备驱动程序分析
驱动光盘丢了不用愁 打印一体机驱动程序下载安装实战体验
重装系统,驱动程序的事别操心等
基于DSP的PCI驱动程序开发
妙用鼠标驱动