千兆网络接口在S3C2440A系统中的应用

发布者:数字奇迹最新更新时间:2007-09-27 来源: 电子设计应用关键字:函数  代码  传输  调用 手机看文章 扫描二维码
随时随地手机看文章

嵌入式系统广泛应用在工业测控、智能仪表、智能家庭等很多领域。随着嵌入式系统应用范围的不断扩展及网络应用的日益普及,使得越来越多的嵌入式系统需要网络功能。三星公司S3C2440A是国内应用较多的嵌入式微处理器之一,在S3C2440A应用系统中,目前只支持10/100M的网络接口,有很大的实用价值,既可以拓展S3C2440A的应用领域,也可以给其它嵌入式系统高速接入网络提供一种简单易行的参考。

设计方案

本系统主要由S3C2440A、存储器、AX88180、千兆PHY芯片88E1111、嵌入式Linux、网络驱动程序等组成(见图1)。嵌入式Linux内核负责系统任务的管理并集成TCP/IP协议,方便实现网络功能控制。S3C2440A负责整个系统的控制,它与AX88180以总线方式连接,是通信控制的主体。S3C2440A通过网络驱动程序实现对AX88180内部寄存器编程,实现对以太网数据的发送和接收,从而完成网络与系统之间的数据传输。AX88180与88E1111之间采用RGMII接口方式互连,负责数据传送底层协议的实现。

这里简要介绍一下S3C2440A与AX88180器件,这两个器件是通信控制的主体。

S3C2440A是基于ARM920T核的16/32位RISC微处理器,运行频率高达500MHz,主要面向手持设备以及高性价比、低功耗的应用,适用于开发各类高端手持、小型终端以及网络应用产品,具有非常丰富的片上资源,比如LCD、SDRAM、NAND FLASH、DMA、AD、PWM控制器,以及UART、USB、摄像头、触摸屏、IIC、IIS、SPI、SD、MMC、AC97等接口。

AX88180是台湾亚信公司推出的一款Non-PCI千兆以太网控制芯片,内置1000Mbps以太网媒体存取控制器(MAC);有40KBytes SRAM网络封包缓存器;硬件支持IP/TCP/UDP checksum offloads。它可以十分方便地实现与一般16/32位微处理器连接,可以象SRAM一样被访问。它符合IEEE 802.3/lEEE 802.3u/IEEE 802.3ab协议,适用于串流媒体、多媒体网络、高频宽传输等领域,如数字媒体、家用网关及IP电视等。

硬件设计

由于硬件电路比较复杂,这里只给出核心电路连接,如图2所示。S3C2440A与AX88180之间采用总线方式相连,地址总线A2-A15、数据总线D0-D31、读写信号等可以直接连接,AX88180的40M~100M时钟信号由S3C2440A提供,AX88180中断信号与S3C2440A EINT11相连,整个接口电路无需外加电路;AX88180与PHY芯片之间采用简化的千兆比特媒体独立接口RGMII接口,信号一一对应直接相连即可。

软件设计

从整体角度考虑,Linux网络系统可以分为硬件层、设备驱动层、网络协议层和应用层。在S3C2440A系统上移植有嵌入式Linux、集成TCP/IP等协议栈,应用层的程序可以自己编写也可以移植,这里我们主要分析一下设备驱动程序的实现。

在嵌入式Linux中,整个网络驱动程序的框架可分为四层,分别为协议接口层、网络设备接口层、设备驱动功能层、网络设备和网络媒介层,这个框架在内核网络模块中已经搭建完成,在设计驱动程序的时候,要做的主要工作就是根据上层网络设备接口层定义的device结构和底层具体的硬件特性,来完成设备驱动的功能。驱动程序主要由初始化、打开、关闭、数据接收及发送等函数组成。

初始化函数

初始化函数完成网络设备的初始化,由数据结构device中的init函数指针来调用,加载AX88180驱动模块后,就会调用初始化过程。该首先通过检测物理设备的硬件特征来检测网络物理设备是否存在,之后配置设备所需要的资源,比如中断等。这些过程完成后,就要构造设备设备数据结构,用检测到的数据初始化其相关变量,最后向Linux内核注册设备并申请内存空间。

打开函数

打开函数在网络设备驱动程序中是在网络设备状态由down状态转为up状态时,即被激活的时候被调用,有很多AX88180及88E1111的初始化工作可以放在这里做。在驱动程序作为一个模块被装入时,打开函数还要防止模块卸载时设备处于打开状态。

关闭函数

关闭函数和打开函数做相反的工作,是在设备状态由up转为down时被调用的,作用是释放资源以减少系统负担。在驱动程序作为模块装入时,关闭函数还要减少没备被引用的次数,以便卸载驱动程序。

发送函数

发送函数是网络驱动程序的关键过程之一,它与dev->hard_start_xmit连接,在内核通过设备向外发送数据时调用它。系统给AX88180分配一块64K的地址空间,其中8000H-FBFFH作为发送缓冲区地址,在系统调用驱动程序的xmit时,发送的数据放在一个sk_buff结构中,发送到数据缓冲区地址,再由AX88180发送到网络上。如果发送成功,hard_start_xmit释放sk_buff,返回0;如果设备暂时无法处理,则返回1。硬件在发送结束后产生中断。

中断和接收函数

中断和接收函数也是驱动程序的关键过程之一,如果有数据收到,AX88180会产生一个中断通知系统,在中断处理程序中驱动程序申请一块sk_buff(),从AX88180读出数据并放置到接收缓冲区地址0000H~7000H里,然后来填充sk_buff中的一些信息,由skb->dev=dev判断收到帧的协泌类型,填入skb->protocol,再把指针skb->mac.raw指向硬件数据,然后丢弃帧头。之后还要设置skb->pkt_type,标明链路层数据类型,最后调用netif_rX()把数据传送给协议层。

下面是发送函数部分代码:




结语

本文介绍的千兆网络接口在S3C2440A系统中的应用方案已经得以实现,1000 Full-duplex模式下,数据传输速率可以达到200Mbp,在使用FTP下载数据时,速度可以达到4Mbps以上,是使用100M网络接口的5~6倍。如果使用其它更高速度的微处理器,网络接口的速度会更高。

关键字:函数  代码  传输  调用 引用地址:千兆网络接口在S3C2440A系统中的应用

上一篇:ActiveX技术在B/S模式监控系统中的应用
下一篇:基于RTP协议的IP电话QoS监测及提高策略

推荐阅读最新更新时间:2024-05-07 15:59

汇编 无条件转移和过程调用指令
(1)JMP无条件转移指令 指令格式: JMP 目的 指令功能: 使程序无条件地转移到指令中指定的目的地去执行。 这类指令又分为两种类型: 第一种类型:段内转移或近(NEAR)转移,转移指令的目的地址和JMP指令在同一代码段中,转移时仅改变IP寄存器的内容,段地址CS的值不变。 第二种类型:段间转移,又被称之为远(FAR) 转移,转移指令的目的地址和JMP指令不在同一段中,发生转移时,CS和IP的值都要改变——程序要转移到另一个代码段去执行。 无条件转移指令的类型和方式 段内直接转移指令 指令格式: JMP SHORT 标号 JMP NEAR PTR 标号(或JMP 标号) jmp指令能够修改 IP 或 C
[单片机]
汇编 无条件转移和过程<font color='red'>调用</font>指令
基于S3C6410的ARM11学习(十二) 代码拷贝及led测试输入日志
之前已经将ddr进行初始化了,这样就可以使用ddr了。首先就要将代码从stepping stone拷贝到ddr中。最后在ddr中运行程序。如果外部nandflash还有剩余的程序,还要将剩下程序拷贝到ddr中。 Stepping stone的起始地址是0x0c000000,DDR的起始地址是0x50000000。在上电的时候,CPU会自动把NANDFLASH的前8K代码拷贝到stepping stone中。但是现在写的代码是比较小的,还没有超过4K。所以这里就设定拷贝的代码是前4K代码。 这样,代码就比较好写了。 R0保存的是stepping stone的起始地址,r1保存的是要拷贝的ddr的地址,这里地址是0x
[单片机]
基于S3C6410的ARM11学习(十二) <font color='red'>代码</font>拷贝及led测试输入日志
SDRAM通用控制器的FPGA模块化设计
引言 同步动态随机存储器(SDRAM),在同一个CPU时钟周期内即可完成数据的访问和刷新,其数据传输速度远远大于传统的数据存储器(DRAM),被广泛的应用于高速数据传输系统中。基于FPGA的SDRAM控制器,以其可靠性高、可移植性强、易于集成的特点,已逐渐取代了以往的专用控制器芯片而成为主流解决方案。然而,SDRAM复杂的控制逻辑和要求严格的时序,成为开发过程中困扰设计人员主要因素,进而降低了开发速度,而且大多数的基于FPGA的SDRAM控制器都是针对特定的SDRAM芯片进行设计,无法实现控制器的通用性。本文介绍一种通用SDRAM控制器的FPGA模块化解决方案。 SDRAM控制逻辑复杂,命令种类多样,需要周期性刷新操作、行列
[嵌入式]
基于FPGA高速实时数据传输系统设计方案
引言   信息时代的日新月异,催促着各种各样的数据信息快马加鞭,人们在要求信息传输得越来越快的同时,还要求信息要来得更加及时,于是高速实时的数据传输就成为了电子信息领域里一个永远不会过时的主题。但是,可以清楚地看到,当今动辄成百上千兆的数据流一股脑的涌入,任何一个高速数据传输系统的稳定性和安全性等方方面面的问题都面临着极大的挑战,稍有考虑不周之处就会引起各种各样的问题,因此如何能安全高效的对高速数据进行实时接收、存储、处理和发送正是此次设计方案的目的。    2.设计方案的硬件选定   鉴于当前高速数据传输系统的设计方案大多是现场可编程门阵列(FPGA)加片外存储介质( SDRAM、SRAM、DDR等)的组合,于是本次设
[嵌入式]
基于FPGA高速实时数据<font color='red'>传输</font>系统设计方案
STM32f4---OLCD显示实验代码(02)
OLED_CS=1; OLED_RS=1; OLED_RST=0; delay_ms(100); OLED_RST=1; OLED_WR_Byte(0xAE,OLED_CMD); //关闭显示 OLED_WR_Byte(0xD5,OLED_CMD); //设置时钟分频因子,震荡频率 OLED_WR_Byte(80,OLED_CMD); // ,分频因子; ,震荡频率 OLED_WR_Byte(0xA8,OLED_CMD); //设置驱动路数 OLED_WR_Byte(0X3F,OLED_CMD); //默认0X3F(1/64) OLED_WR_Byte(0xD3,OLED_CMD); //设置显示偏移
[单片机]
51单片机-IIC入门代码讲解
因IIC时序细节的理解不是一两篇文章就能描写清楚的,这里笔者只针对《手把手教你学51单片机》文档第14章内容做补充辅助理解,如果大家想彻底弄明白IIC的所有通信细节过程,那么就需要“好事多磨”了。 我们现在先贴出IIC的时序流程图 1.起始信号函数 我们同样是运用宋老师的代码,这里笔者把代码和截图一起呈现出来让大家能够一句句地去理解含义,打开宋老师的代码lesson14_1。 void I2CStart() //产生总线起始信号 { I2C_SDA = 1; //首先确保SDA、SCL都是高电平 I2C_SCL = 1; I2CDelay(); //延时几微秒 I2C_SDA = 0; //先拉低SD
[单片机]
51单片机-IIC入门<font color='red'>代码</font>讲解
网格资源调用中支持技术的研究与实现
摘要:针对网格资源调用的特点,从提高系统的时间性能、安全性能和自适应性能方面分别提出并实现了动态链接表技术、身份鉴别技术、散列化处理技术和自适应技术。 关键词:网格 动态链接表 身份鉴别 散列化 自适应机制 随着网络技术的不断发展,以Internet的基础的新技术——网格(Grid)有了长足的进步。在网格资源调用中,时间性能、安全性能和稳定性能是衡量网格功能的重要指标,相关技术已经成为网络研究的重要课题。本文介绍从这三个方面出发,对动态链接表技术、身份鉴别技术、散列化处理技术和自适应技术做了较深入的研究并进行了仿真实验。这些技术对网络资源调用起到很好的支掌作用。 1 网格资源调用中必须考虑的问题 从需求角度看,网格
[网络通信]
移植u-boot-2010.09到S3C2440(三)——判断NAND还是NOR启动的汇编代码
参考文档:s3c2440的nandflash启动 guess_flash: #define BWSCON 0x48000000 ldr r4, =BWSCON ldr r6, ands r6, r6, #0x6 mov r6, r6, LSL#4 ldr r5, =GPBDAT str r6, bl guess_flash 这几行的意思是: 获取0X48000000地址的值,获得其 位,在LEDs显示其值。 结论: 通过LED的显示,可以发现在NAND和在NOR运行的显示效果不同。
[单片机]
小广播
最新网络通信文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved