关闭

基于S3C44B0X+μcLinux的嵌入式以太网设计

812人阅读 评论(0) 收藏 举报
来源:电子设计信息网  作者:寇向晖 陈利学 田家林 [字体: ]

 

    随着半导体技术的飞速发展,嵌入式产品已经广泛应用于军事、消费电子、网络通信、工业控制等各个领域,网络化是嵌入式系统发展的必然趋势。嵌入式Linux 作为具有开放的源代码、优秀的网络性能、可裁减等诸多优点的操作系统,非常适合用于具有网络功能的嵌入式系统。本文介绍了以S3C44B0X 的ARM处理器和RTL8019AS 以太网控制器为基础的网络接口设计,并阐述了怎样在嵌入式操作系统μcLinux 下实现对网卡的驱动。

S3C44B0X 处理器介绍

  ARM是业界著名的芯片设计IP 供应商,其32 位RISC 微处理器占据了全球80%以上的市场份额。ARM7 系列处理器也是目前市场上最成熟、应用最广的处理器。SAMSUNG 公司推出的S3C44B0X 就是以ARM7TDMI 为内核的一款16/32 位RISC 处理器。它采用0.25μm CMOS 工艺制造,为手持设备和一般应用提供了高性价比和高性能的微处理器解决方案。S3C44B0X 通过提供全面的、通用的片上外设,大大减少了外围的元器件配置,从而使系统成本大为降低。S3C44B0X 芯片的内部结构如图1 所示。

S3C44B0X 芯片的内部结构

网络接口的电路设计

  在介绍电路设计之前,先简要介绍一下网络控制器RTL8019AS 的情况。RTL8019AS 是台湾REALTEK公司生产的一款性价比很高的、带有即插即用功能的全双工以太网控制器。它内部集成了两块RAM,一块16KB,地址为0x4000~0x7FFF;一块32 字节,地址为0x0000~0x001F。16K 的RAM用作收发数据的缓冲区,一般将0x4000~0x46FF 作为发送缓冲区,0x4700~0x7FFF 作为接收缓冲区。图2 是针对S3C44B0X,用RTL8019AS、74LV138(3- 8 译码器)、FB2022(网卡变压器)设计的以太网接口电路。

以太网接口电路

  该电路数据宽度为16 位,使用外部中断EXINT3。处理器的片选信号nGCS1 和A16、A17、A18 通过74LV138 输出为网卡的使能控制端。nOE 和nWE控制网卡的读写,nRESET 控制网卡的复位,FB2022起变压滤波的作用。

 

μcLinux 操作系统和网络驱动开发介绍

本系统为什么要选择μcLinux

  Linux以其开放的源代码、强大的网络功能等诸多优点而成为当今流行的操作系统之一。μcLinux 从Linux 内核派生而来,沿袭了Linux 的大部分特性,专门针对没有MMU(存储器管理单元)的CPU,并且为嵌入式系统做了很多小型化工作,它内核小,但功能强大,系统健壮,并且具有广泛的硬件支持特性,是一个优秀的嵌入式操作系统。S3C44B0X 正是一款没有MMU 的处理器,所以在该系统中,操作系统选择μcLinux 是非常合适的。

μcLinux 下网络驱动开发简介

  μcLinux 和Linux 下驱动的实现过程基本相同。linux 将所有的设备看作具体的文件,通过文件系统层对设备进行访问。所以在linux/uclinux 的框架结构中,和设备相关的处理可以分为两个层次— —文件系统层和设备驱动层。设备驱动层屏蔽具体设备的细节,文件系统层则向用户提供一组统一的规范的用户接口。这种设备管理方法可以很好的做到“设备无关性”,使linux/uclinux 可以根据硬件外设的发展进行方便的扩展,比如要实现一个设备驱动程序,只要根据具体的硬件特性向文件系统提供一组访问接口即可。整个设备管理子系统的结构如图3 所示。

整个设备管理子系统的结构

  在Linux/μclinux 中,整个网络接口驱动程序的框架可分为四层,从上到下分别为协议接口层、网络设备接口层、提供实际功能的设备驱动功能层、以及网络设备和网络媒介层。这个框架在内核网络模块中已经搭建好了,我们在设计网络驱动程序时,要做的主要工作就是根据上层网络设备接口层定义的net_device结构和底层具体的硬件特性,完成设备驱动的功能。在网络驱动程序部分主要有两个数据结构,一个是sk_buff,TCP/IP 中不同协议层间以及和网络驱动程序之间数据包的传递都是通过这个结构体来完成的,这个结构体主要包括传输层、网络层、连接层需要的变量,决定数据区位置和大小的指针,以及发送接收数据包所用到的具体设备信息等。它的详细定义可参阅内核源代码

  另一个就是net_device 结构,它的定义在中。这个结构是网络驱动程序的核心,它定义了很多供系统访问和协议层调用的设备标准的方法,包括供设备初始化和往系统注册用的init 函数,打开和关闭网络设备的open 和stop 函数,处理数据包发送的函数hard_start_xmit,以及中断处理函数等,接口状态统计函数等。

RTL8019AS
驱动程序的实现

  嵌入式系统开发中,设备驱动的编写会占用很大的工作量。下面详细介绍在本系统中网卡驱动程序设计的步骤。

  * 初始化函数

  static int RTL8019_init(struct net_device *dev)

  {

  调用ether_setup (dev) 函数设置通用的以太网接口;

  填充net_device 数据结构的属性字段;

  调用kmalloc 申请需要的内存空间;

  手动设置MAC 地址;

  }

  * 设备打开与关闭函数

  static int RTL8019_open(struct net_device *dev)

  {

  关闭中断;

  注册中断号和I/O 地址;

  初始化设备的寄存器;

  使能中断;

  }

  设备关闭函数与打开函数的动作相反。

  * 数据包发送函数

  static int RTL8019_sendpacket(struct sk_buff *skb,

  struct net_device *dev)

  {

  将标志位tbusy 打开;

  将数据包写入RTL8019 的发送缓冲区,启动DMA 发送功能;

  释放缓冲区;

  }

  * 数据包接收函数

  static int RTL8019_rx( int irq, void *dev_id, structpt_regs *regs)

  {

  申请skb 缓存区存储新的数据包;

  从硬件中读取新到达的数据;

  调用函数netif_rx(),将新的数据包向网络协议的上一层传送;

  }

 

  最后,将驱动程序编译进内核,由于μcLinux 不支持模块动态加载,因此必须使用静态编译的方法。如果一切正常的话,使用ifconfig、route add 命令设置IP地址和子网掩码,网卡就能正常工作了。

结束语

  RTL8019AS 以太网控制器以其优良的性能在嵌入式系统中得到了广泛的应用,而μcLinux行通信和交换数据。试验表明,用HPI 接口在C5416和S3C4510B 间通信满足嵌入式系统的实时性要求。

 
0
0
查看评论

嵌入式以太网第三部分——以太网协议实现

目录:1:概述2:MAC地址设置 3:以太网协议 4:PING指令测试 1、概述 1.1:以太网是实现LAN的一种技术,它允许嵌入式系统连接到一个LAN中,并可通过使用网关经Internet连接到外部世界,以太网的主要目的是向LAN发送和从LAN接收以太网帧,在TCP/IP协议族中,不包括以太网...
  • Golf_research
  • Golf_research
  • 2016-11-02 00:21
  • 917

基于Qt的嵌入式媒体播放器系统的设计

转自:http://blog.csdn.net/HEN_MAN/article/details/6917159 摘要:本文以无线多媒体终端项目的需求为背景,提出了一种适用于嵌入式系统的媒体播放器架构设计方案。论文给出了一种嵌入式系统中音视频同步的解决方案, 有效的提高了嵌入式媒体播放器...
  • adazone
  • adazone
  • 2015-04-15 22:35
  • 1202

基于嵌入式ARM的mp3播放器的设计

一、       设计题目:基于ARM的mp3播放器的设计 二、       课程设计教学目的: 1、了解并掌握系统电路的一般设计方法,具备初步的独立设计能...
  • yan420523
  • yan420523
  • 2013-05-13 15:33
  • 3606

基于Linux的嵌入式网络视频监控系统研究与设计

http://www.nesr.lingd.net/article-4364839-1.html 摘 要:网络视频监控已经在嵌入式领域得到了发展,但目前视频监控硬件设施比较昂贵,不能普遍使用。本文提出了一种以ARM9处理器为开发硬件平台和嵌入式Linux系统为软件开发环境的新方法,采用中星微Z...
  • yan420523
  • yan420523
  • 2013-07-10 22:20
  • 1710

LPC22110--ARM7TDMI笔记(一)

1.p0.7 引脚控制蜂鸣,低电平蜂鸣(JP9得导通).2.ARM是Advance RISC Machines的缩写.3.所有的异常处理都在ARM状态中执行.如果异常发生在Thumb状态中,处理器会切换到ARM状态.在异常处理返回时,自动切换回Thumb状态.;从ARM状态转变为Thumb状态LDR...
  • armlearner
  • armlearner
  • 2007-04-14 07:42
  • 553

嵌入式软件分层设计思想

一、遇到的问题   通过这一段时间业务代码编写实践,体会到了之前的代码结构的缺陷:   (1)开发效率低:每次使用片内的某一资源(例如定时器等),笔者都要去查询CC2430中文手册,比较eggache~   (2)代码重复较多:每个实验源码中,诸如 xtal_init&#...
  • sinat_23338865
  • sinat_23338865
  • 2017-06-06 18:26
  • 968

stm32平台实现以太网转串口、485、CAN

stm32+ucosii2.91 +lwip3.2 +Modbus-RTU+CAN
  • amd1217
  • amd1217
  • 2015-01-28 09:38
  • 1689

基于Linux的嵌入式浏览器的实现

随着信息技术与网络技术的快速发展,以及人们日常生活对网络信息的需求的不断增加。掌上电脑、上网本、手机、导航仪器、智能电视、智能家电等对嵌入式系统提出了更多更高的要求。在嵌入式系统中利用嵌入式浏览器获取网络信息是必不可少的,因此嵌入式浏览器技术成为现如今的技术热点之一。而且Linux操作系统完全开源,...
  • linux_loajie
  • linux_loajie
  • 2012-02-05 09:08
  • 1777

基于ARM与μClinux的RTU设计

 基于ARM与μClinux的RTU设计[日期:2008-8-20]来源:电子工程世界  作者:曾为民 李志康 李宏利 邹立东[字体:大 中 小]  在电力系统变电所以及电气化铁道牵引变电所远动控制系统中,远程数据采集与监控终端(RTU)是关键设备,实现遥控、遥测、遥信等功能。 ...
  • linglongyouzhi
  • linglongyouzhi
  • 2008-08-20 13:18
  • 445

嵌入式系统图形用户界面(GUI)的设计与研究

1 引 言 在工业控制领域里,各种仪器仪表、智能工控设备也广泛采用了嵌入式技术,但由于资源有限, 这些系统一般不希望建立在庞大累赘的、非常消耗系统资源的操作系统和GUI之上,比如Windows或X Window。这些系统对轻型GUI的需求更加突出。因此,在工业控制系统中实现一个简洁、快速、方便的嵌入...
  • a511244213
  • a511244213
  • 2015-04-30 17:31
  • 2815
    个人资料
    • 访问:1597774次
    • 积分:25491
    • 等级:
    • 排名:第288名
    • 原创:638篇
    • 转载:550篇
    • 译文:2篇
    • 评论:257条