嵌入式系统的以太网接口设计及linux驱动

发布者:纸扇轻摇最新更新时间:2011-12-05 关键字:嵌入式系统  以太网接口 手机看文章 扫描二维码
随时随地手机看文章
  以太网概述

  以太网(Ethernet)是当今局域网采用的最通用的通信协议标准。在以太网中,所有计算机被连接在一条电缆上,采用带冲突检测的载波侦听多路访问(CSMA/CD)方法,采用竞争机制和总线拓扑结构。基本上,以太网由共享传输媒体,如双绞线电缆或同轴电缆、多端口集线器、网桥或交换机构成。

  按照OSI(Open System Interconnection Reference Model,开放式系统互联参考模型)7层参考模型,以太网定义的是物理层(PHY)和数据链路层(对应以太网的MAC层)的标准。

  2 嵌入式处理器上扩展以太网接口

  以太网接口控制器主要包括MAC乘PHY两部分,如图1所示为嵌入式处理器集成MAC层控制器。


  MAC层控制器和PHY的连接是通过MII、RMII等接口实现的。在IEEE802的标准系列中,数据链路层包括LLC和MAC两个子层。其中MAC负责完成数据帧的封装、解封、发送和接受功能。PHY层的结构随着传输速率的不同而有一定的差异。对于1OBaseT等网络,从以太网PHY芯片输出的就是传输所需的差分信号。但是还需要一个网络隔离变压器组成图2的结构。网络隔离变压器可起到抑制共模干扰、隔离线路以及阻抗匹配等作用。

  本文介绍一种新款网络接口芯片DM9000A,它可以很方便的实现与嵌入式CPU的接口,实现扩展以太网口的功能。DM9000A是中国台湾DAVICOM公司推出的一款高速以太网接口芯片,其基本特征是:集成10/100M物理层接口;内部带有16K字节SRAM用作接收发送的FIFO缓存;支持8/16bit两种主机工作模式:通过HP认证的AUTO-Mdix(支持直接互连自动翻转)功能;支持TCP/IP加速,减轻CPU负担,提高整机效能;10ns I/O读写时间。DM9000A以太网控制器遵循IEEE颁布的802.3以太网传输协议。该电路还集成了EEPROM接口,自举时通过EEPROM接口输入到芯片中,从而实现自动初始化。

  芯片和处理器的连接原理图就不列图表示了,处理器这里选择AT91RM9200,DM9000A与处理器连接时要注意:

  ◆总线宽度读/写等待周期、时序匹配问题

  ◆CS8900A芯片复位后,在总线上的默认地址如何配置与保存

  ◆默认的中断号及中断触发模式问题(上升沿,还是下降沿;低电平,还是高电平触发)

  系统上电时,AT91RM9200通过总线配置DM9000A

  内部网络控制寄存器(NCR)、中断寄存器(ISR)等,完成DM9000A的初始化。随后,DM9000A进入数据收发等待状态。当AT91RM9200向以太网发送数据时,先将数据打包成UDP或IP数据包,并通过16 bit总线发送到DM9000A的数据发送缓存中,然后将数据长度等信息填充到DM9000A的相应寄存器内,使能发送。当DM9000A接收到外部网络送来的以太网数据时,首先检测数据帧的合法性,如果帧头标志有误或存在CRC校验错误,则将该帧数据丢弃。否则将数据帧缓存到内部RAM,并通过中断标志位通知AT91RM9200,由AT91RM9200对DM9000A接收到的数据进行处理。

  3 Linux网络驱动程序

  3.1 Linux网络驱动程序体系结构

  Linux的网络系统主要是基于BSD UNIX的套接字(socket)机制。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据传输。系统支持对发送数据缓存,提供流量控制机制,提供对多协议的支持。Linux网络驱动程序的体系结构可划分为图2所示的4个层次.Linux内核中提供了网络设备接口及以上层次的代码,所以移植(或编写)特定网络硬件的驱动程序最主要的工作就是完成设备驱动功能层,主要是包括数据的接收,发送等控制。


  Linux中所有的网络设备都抽象为一个接口,有结构体struct net_device来表示网络设备在内核中的运行情况,即网络设备接口,此结构体位于网络驱动层的核心地位。net_device中有很多供系访问和协议层调用的设备方法。网络驱动就是要实现这些具体的设备方法。

  3.2 网络设备的初始化

  由结构体net_device中的init函数指针所指向的初始化函数来完成。网络的初始化是设备工作的第一步。当系统加载网络驱动模块的时候,就会调用初始化过程。首先利用函数:request_mem_region映射DM9000A的数据、地址端口,通过dmfe_probe函数检测网络物理设备是否存在,检测DM9000A内部串行NIC的值是否正确,然后再对设备进行资源配置,构造设备的net_device数据结构。包括一些低层硬件信息:base_addr(网络接口的I/O基地址),irq(安排的中断号)等。

  3.3 打开设备和关闭设备

  open方法在网络设备被激活的时被调用,具体DM9000A的硬件初始化工作放到这里来做。对于DMOOOOA需要完成的初始化包括:对DM9000A内部上电,软件复位,通过NCR寄存器设置网络工作模式,可以选择设置内部或者外部PHY、全双工或者半双工模式、使能唤醒事件等网络操作,对RX/TX中断使能,使能数据接收功能。调用request_jrq()申请中断号登记中断处理函数,调用netif_carrier_on侦测连接状态。启动定时器,调用netif_start_queue激活设备发送队列。

  这里对DM9000A的中断设计做了一个特殊处理:通常AT91RM9200提供最多32个中断源,默认提供7个外部中断源,但对于较复杂的嵌入式系统,可能会面临中断源不够用的情况。由于AT9lRM9200的PIO可以实现功能复用,因此可以把多余的IO引脚配置为可用的中断源。故本系统中,设计DM9000A中断源与AT91RM9200外部I/O口PD8引脚相连。一个PIO端口的32个引脚共享一个中断ID,只需要在中断状态寄存器中区分具体哪个引脚引起中断,然后转向特定的中断处理函数执行操作,就可以实现中断处理。close所做的工作和open相反,主要释放open获得的资源,以减少系统负担。

  3.4 数据包发送

  数据包的发送和接收是实现Linux网络驱动程序中两个最关键的过程,对这两个过程处理的好坏将直接影响到驱动程序的整体运行质量。

  数据传输通过hard_start_xmit函数实现,首先把存放在套接字缓冲区中的数据发送到网络芯片DM9000A内部的TX FIFO SRAM中,该缓冲区是由数据结构sk buff表示,把要传送的数据长度写入DM9000A中的传输包长度寄存器TXPLL和TXPLH中。然后使能传输。如果数据发送成功,则会触发一次中断。实际中会出现多个数据帧传输,需要考虑做并发处理。在发送时检测传输队例暂时满载时就要通过netif_stop_queue来暂停,当发送完成触发中断处理时,调用netif_wake_queue函数来重新启动传输队例。网络传输由于系统忙或硬件的问题发生延迟,则会调用传送超时处理函数tx_timeout,对硬件复位操作。

  3.5 数据包接收

  数据包的接收是通过中断处理,当有数据到达时,就产生中断信号,网络设备驱动功能层就调用数据包接收程序来处理数据包的接收,然后网络协议接口层调用netif_rx函数把接收到的数据包传输到网络协议的上层进行处理。

  DM9000A接收缓存区中的每帧数据由4字节长的首部、有效数据和CRC校验序列构成。首部4字节依次是01H、以太网帧状态、以太网帧长度低字节和长度高字节,数据包接收程序首先检测如果第一个字节是01H,则说明有数据;如果是00H,则说明无数据,需要进行复位。然后调用函数dev_alloc_skb申请一块sK_buff结构缓冲区,从DM9000A读出数据放置到缓冲区里,根据获取的长度信息,判断是否读完一帧。如果读完,接着读下一帧,直到遇到首字节是00H的帧,说明接收数据已读完。接下来填充sK_buff中的一些信息,使之成为规范的sk_buff结构,最后调用netif_rx()函数将接收到的数据传输到网络协议的上层。

  最后,可通过两种方法加载网络设备驱动程序:系统内核加载和模块加载。

  4 网络的应用及测试

  通过读取/proc/net中的信息得到当前系统中的网络设备,通过它来测试:

  #cat/proc/net/dev

  Linux网络配置可在应用程序中通过ifconfig和router两个命令实现,它们都可以在busybox软件包中找到。可用以下命令来配置ip、网关、子网掩码和域名解析服务器:

  # ifconfig eth0 192.168.0.11O

  # route add -net default gw 192.168.0.254 netmask 255.255.255.0

  # nameserver 202.106.196.115

  最后,通过Ping命令,来测试一下和主机的通信是否联通。在本系统中通过。

  在嵌入式应用程序开发及调试中,NFS起着非常重要的应用。不但可以通过NFS文件系统共享远程硬盘的文件,我们还可以mount远程文件系统直接作为嵌入式的根文件系统。

  5 结论

  本文完成了Linux下扩展以太网接口及测试网络接口的研究,采用了以太网芯片DM9000,围绕太分析了嵌入式Linux 网络的基本原理。最后我的嵌入式设备顺利连上网络。同时本文为移植2.6内核的网络部分提供了移植方法。

关键字:嵌入式系统  以太网接口 引用地址:嵌入式系统的以太网接口设计及linux驱动

上一篇:嵌入式系统的CAN总线设计
下一篇:基于FPGA的音频编解码芯片接口设计应用

推荐阅读最新更新时间:2024-05-02 21:45

基于μCOS-II的VG2以太网和USB接口设计
引言   近几年来,随着计算机网络技术的快速发展,TCP/IP协议已成为应用最广泛的网络互联协议。USB(通用串行总线)以灵活、方便、通信稳定、成本低廉、即插即用等优点已经成为数据存储与交换的通用接口。   ADChips公司的32位多媒体微处理器VIRgineG2(简称VG2)具有强大的数据、图像和音频处理功能,而且能够直接输出NTSC/PAL制式模拟信号。VG2只提供了一路32位的I/O接口和两路串行通讯接口,因此需要对VG2扩展TCP/IP接口和USB接口,以实现远/近程数据的交互和大容量数据存储。   本文采用Realtek公司的RTL8019AS芯片对VG2进行以太网接口扩展,通过TCP/IP协议规范及LwIP实
[嵌入式]
一种嵌入式系统的内存分配方案
摘要:实时性、可靠性的要求,使得许多嵌入式应用使用自己的内存管理程序。本文探讨嵌入式系统中对内存管理的要求、存在的问题以及可能的解决策略;介绍一种“一次分配,多次使用”的动态内存分配方法,并给出2个例子。 关键词:嵌入式系统 内存管理 一次分配多次使用 1 嵌入式系统中对内存分配的要求 ①快速性。嵌入式系统中对实时性的保证,要求内存分配过程要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中复杂而完善的内存分配策略,一般都采用简单、快速的内存分配方案。当然,对实性要求的程序不同,分配方案也有所不同。例如,VxWorks采用简单的最先匹配如立即聚合方法;VRTX中采用多个固定尺寸的binning方案。 ②可靠性。也就是内存分配的
[嵌入式]
Trango在美国无线通信展上推出电信级以太网许可证微波无线回程通信新方案
Trango无线宽带技术公司(Trango Broadband Wireless)推出了其主打产品,点对点许可证微波本地千兆以太网无线回程产品的附属产品TrangoLINK® Apex.。TrangoLINK® Apex传输速率可达800兆/秒,并可两台并联实现1.6千兆/秒的高速通信。TrangoLINK® Apex最突出的一个特点就是完全整合成一个单一的全户外组件(AOU)。   TrangoLINK® Apex是目前市面上唯一一个许可证微波全户外网桥,具有两个数据端口,包括一个光纤接口和一个千兆以太网接口。它也是该行业中唯一一个能够实现无损耗自适应调制、实时RSSI LED显示以及热备份1+1连接保护的的AOU。   
[焦点新闻]
嵌入式系统应用中实现RS485的方向切换
  RS485总线是工业应用中非常成熟的技术,是现代通信技术的工业标准之一。RS485总线用于多站互连十分方便,用一对双绞线即可实现,采用平衡发送和差分接收,即在发送端驱动器将TTL电平信号转换成差分信号输出,在接收端接收器将差分信号变成TTL电平,因此具有抗共模干扰的能力。根据RS485标准,传送数据速率达100 kb/s时通信距离可达1200 m。   RS485在嵌入式系统中的应用非常广泛。嵌入式系统可以通过RS485接口来控制终端设备。由于RS485是半双工模式,因此发送和接收的方向切换需要我们的关注和研究。如果方向切换方式选择不好可能会导致RS485驱动能力下降、软件执行效率下降,甚至导致系统异常等问题。   本
[嵌入式]
解决软件和硬件接口问题的嵌入式系统设计实例
解决软件和硬件接口问题的嵌入式系统设计实例 嵌入式系统设计中,软件和硬件的接口问题经常困扰软件开发工程师。正确理解接口在处理器与高级语言开发环境方面的约束条件,可以加速整个系统设计,并为改进系统的质量、性能和可靠性以及缩短开发周期和减少成本提供保证,本文从两个设计实例的比较入手,介绍了嵌入式系统的设计原则以及关于寄存器及其域的种种考虑。 嵌入式系统设计通常分为两个部分:硬件设计和软件开发。这两部分任务通常由不同的设计小组负责,相互间很少有覆盖的地方。由于软件小组很少涉足前面的硬件设计,采用这种方式进行开发经常会遇到问题,特别是硬件与软件开发环境之间的接口性能较差时,会导致系统开发时间延长、开发成本提高,最终推迟产品的上市。 最理
[嵌入式]
嵌入式系统中可配置式GPIO模拟SPI总线方法
在嵌入式系统处理器中有相当一部分处理器不带SPI接口,但基丁SPI接口的设备非常丰富,此外,SPI设备的不同以及处理器对GPIO口位寻址是否支持各处理器各有不同,因而不同处理器中软件模拟GPIO也各不相同。若能提供一种通用可配置可移植的GPIO模拟SPI总线的驱动则能很方便快捷的访问SPI设备,从而提高整个嵌入式系统的开发效率。本文针对GPIO口位寻址与否给出方面,给出了一种可配置GPIO模拟SPI总线的方法并详细介绍了其设计与实现过程,且具有代码小可移植性强使用方便等特点。 1 GPIO规范 SPI是一个全双工的串行接口。它设计成可以在一个给定总线上处理多个互联的主机和从机。在一定数据传输过程中,接口上只能有一个丰机和一个从
[工业控制]
嵌入式系统开源软件的回顾和展望
  回顾过去20年嵌入式系统在国内各行各业蓬勃发展,其中有两项重要技术对此贡献很大:一是ARM,二是开源软件,尤其是Linux和与Linux相关的开源软件。对于ARM,今天业内热议的ARM上网本现在看只是_二个桥头堡。进攻胜利了,ARM即刻大举占领利润丰厚的PC市场,退一步也可以保住自己的移动终端和已经牢牢把握的嵌入式市场。ARM要想成功,必然要仰仗开源软件;指望微软是不行的,微软有太多的历史包袱和既得利益,在windows 7是否支持ARM架构这件事情上一直摇摆不定。另一方面,Linux在经历了漫长和痛苦的桌面市场的博弈之后,发现了移动计算这片领域,开始是智能手机、MID,到现在的上网本(netbook),还有未来的智能本(一种
[嵌入式]
液晶显示在嵌入式系统中的应用
摘要:介绍了液晶显示在嵌入系统中的应用编程,给出了在液晶显示与系统接口的应用层编程中,采用环形结构算法来达到快速、简单地进行汉字代码的编码以及汉字的分页和分行显示的显示应用程序。 关键词:嵌入式系统;液晶显示;环形结构算法;汉字显示 1 引言 在嵌入系统中,一个良好的人机界面必须提供友善的菜单,同时应能实现汉字和图形显示,并应提供英文、数字输入和汉字输入功能。笔者采用香港精电公司的128%26;#215;64点阵显示模块在以MPC860作为主CPU并以Nuclus PLUS为嵌入式操作系统的系统中进行液晶显示取得了较为满意的效果。图1所示为其结构框图。 香港精电公司的128%26;#215;64点阵模块内部自带液晶图形显
[应用]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved