积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> 相关文章
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | XP Embedded | Nucleus | 新产品 | 相关文章 | 综合技术 |
网络控制器DM9000A在嵌入式系统中的应用
 
作者:未知   来源:EDN    点击数:178   更新时间:2008-8-15
您可以添加到网摘 让更多人关注此文章:

    

    目前,网络技术在电子产品中的应用越来越广,更多的嵌入式设备需要提供网络接口,以方便与外部互联通讯。现在流行的大多数嵌入式CPU(如ARM、PPC)都提供了此类接口,但对于一些相对复杂的嵌入式系统来说,可能需要扩展以太网口,以满足网络通讯需要。本文介绍一种新款网络接口芯片DM9000A,它可以很方便的实现与嵌入式CPU的接口,实现扩展以太网口的功能。

DM9000A

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

硬件接口设计

  DM9000A可以很方便的与目前主流的嵌入式CPU以8位或16位的总线方式连接,本文设计的系统CPU为AT91RM9200,它是一个采用ARM核的32位微处理器。二者的接口设计如图1。


图1  DM9000A与AT91RM9200硬件连接

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

Linux驱动实现

  Linux网络驱动体系结构
  在Linux操作系统中的设备驱动,根据各类外围I/O设备的不同,分为三类,即字符设备(如键盘、LCD) 驱动、块设备(如硬盘、CF卡) 驱动和网络设备(如网卡) 驱动。 Linux网络设备驱动程序结构上由四部分组成(图2):网络协议接口,网络设备接口,设备驱动功能层及网络设备介质。


图2  Linux网络驱动体系结构

设计开发Linux网络驱动程序时,最主要的工作就是完成设备驱动功能层。类似于对字符设备和块设备的处理,为了屏蔽网络环境中物理网络设备的多样性,Linux利用面向对象的思想对所有的网络物理设备进行抽象,定义了一个统一的接口。对于所有网络硬件的访问都是通过接口进行的,接口向用户提供了一个对于所有类型的网络硬件一致化的操作集合。Linux内核提供的统一网络设备结构为net_device,此结构体位于网络驱动层的核心地位。

  net_device 中有很多供系访问和协议层调用的设备方法,其中包括: 
  · dev->open:打开设备。open方法应当注册网络设备需要的任何系统资源( I/O 口,IRQ, DMA等),打开硬件,进行设备要求的其他设置。
  · dev—>stop:停止设备。 该函数应当恢复在打开时进行的操作。
  · dev->hard_start_xmit:发送报文。
  · dev->tx_timeout:发送超时调用的方法,它应当处理这个问题并恢复报文发送。
  · dev->set_mac_address:修改网络的硬件MAC地址。

  网络驱动就是要实现这些具体的设备方法。

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

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

  启动定时器,调用netif_start_queue激活设备发送队列。
  这里对DM9000A的中断设计做了一个特殊处理:通常AT91RM9200提供最多32个中断源,默认提供7个外部中断源,但对于较复杂的嵌入式系统,可能会面临中断源不够用的情况。由于AT91RM9200的PIO可以实现功能复用,因此可以把多余的IO引脚配置为可用的中断源。故本系统中,设计DM9000A中断源与AT91RM9200外部I/O口PD8引脚相连。一个PIO端口的32个引脚共享一个中断ID,只需要在中断状态寄存器中区分具体哪个引脚引起中断,然后转向特定的中断处理函数执行操作,就可以实现中断处理。

  close所做的工作和open相反,主要释放open获得的资源,以减少系统负担。

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

  数据传输通过hard_start_xmit函数实现,首先把存放在套接字缓冲区中的数据发送到网络芯片DM9000A内部的TX FIFO SRAM中,该缓冲区是由数据结构sk_buff表示,把要传送的数据长度写入DM9000A中的传输包长度寄存器TXPLL和TXPLH中。然后使能传输。如果数据发送成功,则会触发一次中断。

  实际中会出现多个数据帧传输,需要考虑做并发处理。在发送时检测传输队例暂时满载时就要通过netif_stop_queue来暂停,当发送完成触发中断处理时,调用netif_wake_queue函数来重新启动传输队例。

  网络传输由于系统忙或硬件的问题发生延迟,则会调用传送超时处理函数tx_timeout,对硬件复位操作。
    数据包接收
  数据包的接收是通过中断处理,当有数据到达时,就产生中断信号,网络设备驱动功能层就调用数据包接收程序来处理数据包的接收,然后网络协议接口层调用netif_rx函数把接收到的数据包传输到网络协议的上层进行处理。

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

结语

  该设计成功用于某网络测试设备的主控模块上,可以通过以太网接入Internet,从而实现从Internet上监控嵌入式设备。

参考文献:

1. Davicom Corporation,DM9000A Application Notes V1.20, 2005
  2. Lessandro Rubini,Jonathan Corbet. Linux Device Drivers, second  edition,O’Reilly & Associates,2002
3. 李方军、金炜东,嵌入式Linux网络驱动程序的研究与实现,现代电子技术,2005,16

4. Atmel Corporation, AT91RM9200 Datasheet, version E, 2005



相关文章
· MEMS应用不断扩张 有望成为普遍接口[60]
· USB正式迈入3.0时代:速度提高10倍[103]
· 存储巨头恒忆应对危机 拓展国内闪存市场[88]
· 一种易于移植和使用的文件系统FatFs Moule[250]
· 2008嵌入式设计调查:工程师时刻都在赶项目[124]
热门评论排行
·VHDL设计中电路简化问题的
·ARM嵌入式系统基础教程(N
·江苏嵌入式Linux教育培训
·ARM处理器应用开发4步骤
·锐极LINUX驱动培训班定于

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
七零一所发布恶劣环境角度传感器
德州仪器推出四款最新配电开关
Altium设定全新三维PCB设计性
飞思卡尔进军上网本市场 推
08年11月实际芯片销售额创新低
节能环保备受关注 半导体照
半导体产业最终将存活并将再次蓬勃发展
电子元件业御寒过冬 静待行
台湾当局拨款60亿美元援助DRAM厂
Vishay Silico
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
[推荐]ARM开发板,非常适合...
[推荐]DSP2812开发板+...
[推荐]DSP2812开发板+...
超低价专业PCB/电路板打样 ...
超低价专业PCB/电路板打样 ...
PCB/电路板打样...
[原创]北京金鼎旺提供 23...
[原创]北京金鼎旺提供:RS4...
[原创]北京金鼎旺提供:Mod...
北京金鼎旺:在某电线电缆厂交联...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网