嵌入式系统中常见的网卡驱动比较

合集下载

嵌入式系统软件开发技术BSP和驱动

嵌入式系统软件开发技术BSP和驱动

编写BSP函数
BSP对板卡中每个芯片的操作都通过多个函数 来完成
如果应用程序对板卡的操作都直接通过调用 BSP中的函数来完成,那将很不利于源程序的 调试 ,并降低了程序的可移植性
把能完成某个特定功能的函数封装在一个库文 件中,并放在应用程序与BSP之间
对每个芯片来说,都应当有初始化函数和状态 读取函数
Linux驱动程序的加载方式
驱动程序直接编译入内核
驱动程序在内核启动时就已经在内存中 可以保留专用存储器空间
驱动程序以模块形式存储在文件系 统里,需要时动态载入内核
驱动程序按需加载,不用时节省内存 驱动程序相对独立于内核,升级灵活
Linux驱动程序模块加载
Linux驱动程序开发的任务
Linux驱动程序开发的任务
移植驱动程序到新的平台
GPL对驱动程序开发的影响
实现非GPL授权的方法——模块形 式动态加载
驱动程序可以以私有产权形式进行 商业授权
设备驱动程序的代码
驱动程序的注册与注销
register_chrdev() register_blkdev()
设备的打开与释放
Linux驱动程序的开发环境
本机编译调试
开发环境配置简单 无需网络环境 适用于配置较高的x86机器
主机+目标机
主机可以自由选择Linux或Windows+Cygwin 主机和目标机通过网络共享文件系统 内核崩溃不会影响主机
Linux驱动程序的开发环境(续)
主机+目标机环境包括 主机运行的工具链∶cross gcc + glibc + gdb, 如果是windows主机还要有cygwin仿真环境 主机运行远程服务,常用的有tftp用来传送内 核映像、initrd,NFS用来共享文件系统 目标机运行ssh或telnet等远程登陆服务,用来 调试驱动程序

Windows CE环境下无线网卡的自动安装

Windows CE环境下无线网卡的自动安装

Windows CE环境下无线网卡的自动安装摘要:讨论了Windows CE环境下无线网卡无线网卡的安装,并提出了一种在系统断电重启时自动安装无线网卡的解决方案。

对Windows CE的系统定制、应用程序应用程序的开发及系统封装进行了介绍。

关键词:嵌入式系统 Windows CE 无线网卡设备驱动Windows CE是为多种嵌入式系统和产品而设计的紧凑、高效、可升级的操作系统,并特别为有限的硬件资源设计了多线程、多任务和完全优先的操作系统环境。

在无线通信领域有很大的应用前景。

本文重点讨论了Windows CE环境下无线网卡的安装,并提出了一种在系统断电重启时自动安装无线网卡的解决方案;还对Windows CE的系统定制、应用程序的开发及系统封装进行了介绍。

由于Windows CE与Windows的同源和相似,决定了学习Windows CE的简易性,这样就缩短了应用者的开发周期。

1 Windows CE简介 Windows CE包括四大基本模块,它们提供了操作系统的关键特性,分别是:内核(Kernel)模块、对象存储(Object Store)模块、GWES(用户、应用程序和操作系统之间的图形用户界面)模块和通信(Communication)模块。

图1为Windows CE的模块化结构图。

操作系统定制工具有Windows CE Platform Builder(简称PB),应用程序开发工具有嵌入式开发工具包Embedded Visual Tools,包括Embedded Visual C++(简称 EVC)和Embedded Visual Basic(简称EVB)。

2 特定硬件平台Windows CE操作系统的开发有了具体的嵌入式硬件平台后,就可以为其开发满足特定功能需要的Windows CE系统。

总之,可以分成三个步骤:操作系统的定制、特定功能应用程序模块的开发、功能模块封装入操作系统。

2.1 操作系统的初步定制图2为在PB中定制Windows CE操作系统的一般流程[3]。

嵌入式无线网卡驱动的实现与死锁问题的解决方法

嵌入式无线网卡驱动的实现与死锁问题的解决方法

Ca d a d Sou in o h a lc r n lt f e De do k o t
JAJa F N J nzn , / i , A i —ig a Y h W N h n -n Z OU a , A G C a gf , H i
( ol eห้องสมุดไป่ตู้ auecnrl eh o g C lg f sr—ot c nl y& C mm nct nE gne n , abnU ie i fSi c n eh o g. H ri 5 00, hn) e Me oT o o u iao n ier g H ri n r t o ce eadT nl y , abn104 C ia i i v sy n o
贾 佳 , 范剑英 , 吴 岩 , 王长 劲 , 周 杨
( 哈尔滨理 工大学 测控技术与通信工程学院 , 黑龙江 哈尔滨 104 ) 5 0 0

要 : 文介 绍 了 U B无线 网卡 驱动程 序设 计 的一般 方 法和技 巧 , 在嵌 入 式平 台上 实现 本 S 并
了驱动 的动 态加 载 , 出现 的热插 拔 问题 进行 分析 , 决 了平 台 U B底层 驱动 H b C函数 中存 在 对 解 S u. 的死锁 问题 , 最终使得 无 线 网卡 正常 热插 拔、
现 嵌人 式系统 的无线 局 域 网接人 .
对于 U B设备 来说 , 始化 函数 中需要 注册 S 初 sr c s d vr 该 数 据结 构 中 的 关 键 域 分别 为 : tu tu b i re , p b, r e 设备初始化 函数指针 ;i onc, o d cnet 设备删除 s 函数指针 ; — b , i t l 驱动程序支持设备列表. d ae 设备

ARM-Linux嵌入式远程监控系统的设计

ARM-Linux嵌入式远程监控系统的设计

{ }宁 l
S Y S c 4 K 3 2 柏
保 障 矿 工 的生 命 健康 安 全 , 有 十 分 重 要 的意 具 义… 。基于 A Miu R l x的嵌入式远程测控系统不仅 n 能够实现本地数据采集与控制, 还能实现远程测控 任务 。基 于国内外数据采集 系统 的发展趋 势 , 设计 了一种基 于 A M 的矿井数据采集系统 。 R 】
的室 内及现场试验, 明采用 45号普通硅 酸盐水 证 2 泥, 当其水灰 比为 1 ・5 水玻璃浓度 B 3 。 :0 7 、 e0 左右、
圈2 嵌入式控制器硬件组成结构都 可 以根
据需要任意修改并在 G N协议下发行 , U 节约很大一 部分开发费用。 () 2 具有强大的 网络功能 , 能提供各种 网络服
务。
1 系统硬件结构 的设计
1 1 系统 结构 的组 成 .
() 3 具有丰富的软件资源 , 几乎所有 的 U i下 n x
本系统 由嵌人式控制器 、 远程监控站、 前端数据 采集器和相应的分线器组成。前端传感器有温度采
的应用软件都可移植 到 Lnx i 平台上。 u () 4 支持 多种体 系结构 , A M、P R 、 8 如 R SA C X 6
集器 。 压力采集器和气体浓度采集 器。系统结构如
图 l所示 。
施加 , 根据吸浆量和注浆压力大小, 随时调整浆液浓 度, 并考虑后期开挖的方便 , 控制结石体 3 平均抗 d
压强度不宜太大 。现场采用 4 5普通硅酸盐水泥 , 2 水灰 比 1 .5 水玻 璃用量为水泥用量 的 3 ~ :0 7 、 % 5 , % 水玻璃模 数 n= . , 3 1波美 度 B 0的双液 e =4 浆, 控制注浆压力不大于 2 5 P 。通过 1 .M a 8个孔 的

基于Linux的光纤通道网卡驱动程序开发分析

基于Linux的光纤通道网卡驱动程序开发分析

基于Linux的光纤通道网卡驱动程序开发分析摘要:linux以其自身内核强大稳定、工作效率高、易于扩展以及丰富的硬件支持等优点,现已被广泛应用于嵌入式系统当中。

驱动程序实质上就是在操作系统当中添加一个代码,其中主要包含与硬件设备相关的信息,拥有这些信息后,便可以实现计算机与设备之间的通信。

如果没有驱动程序,计算机的硬件设备便无法进行正常工作。

而网卡驱动程序是驱动程序中较为重要的一个部分。

基于此点,本文就基于linux的光纤通道网卡驱动程序开发进行浅谈。

关键词:linux;光纤通道;网卡驱动;程序开发中图分类号:tp311.52 文献标识码:a 文章编号:1007-9599 (2012)18-0000-021 基于linux系统下的网卡驱动原理当前,在科学技术不断发展的推动下,使linux操作系统获得了进一步完善,该系统的核心部分现已实现了osi的网络层及更上层部分。

其中网络层的实现是以数据链路的高效、可靠运行为基础,它的实现为网卡驱动程序提供了可靠的接口。

1.1 网卡驱动程序由上述分析可知,在基于linux的操作系统当中,驱动程序可以为系统以及物理层提供接口,下面分别对系统的接口和物理层的接口进行介绍。

(1)系统接口。

驱动程序为系统的接口包括以下一些例程:发现网卡、检测网卡参数、数据接收和数据发送等等。

当驱动程序启动后,系统会自行对相关的例程进行检测和调用,借助该过程发现网卡,如果系统使用的是即插即用型网卡,系统在对例程进行检测时便可以发现其中的参数,如果不是即插即用型网卡,那么便需要在驱动程序运行前,预先设置好网卡的具体参数,以供驱动程序使用。

当系统核心需要对数据进行发送时,其便会通过调用由驱动程序发送的例程来完成这一操作。

这一过程实质上就是发送例程将数据写入空间的过程。

(2)物理层接口。

该接口属于中断处理例程,它的工作原理可概括为网卡在接收或发送数据时,如果发现数据有误,其会自动生成一个中断,此时系统的核心会对中断处理例程进行调用,并在判断其产生的原因后完成响应处理。

嵌入式系统中的驱动程序设计与优化

嵌入式系统中的驱动程序设计与优化

嵌入式系统中的驱动程序设计与优化嵌入式系统是现代电子技术中一类关键性的产品,其根据特定应用领域定制的硬件平台,以及具有特定功能的驱动程序,非常适合用于对数据进行采集处理、物体或事件的控制等场合。

嵌入式系统中的驱动程序可谓是关键中的关键,因为其直接影响了嵌入式系统的稳定性和性能。

本文将着重探讨嵌入式系统中的驱动程序设计与优化。

一、嵌入式系统的驱动程序在嵌入式系统中,驱动程序是一种特殊的软件。

其作用是向系统提供硬件相关的支持,并且使硬件具有完整的软件接口。

它是实现嵌入式系统底层功能的必要条件。

可以说,驱动程序是控制硬件的软件,掌控着开发板上的各种硬件组件,如:I/O 接口、串口、SPI、I2C、以太网卡、USB 等。

驱动程序将底层芯片中的操作指令转化成标准的 API 接口,使应用程序不需要关心底层驱动的实现方式,直接调用函数即可实现对硬件的操作。

驱动程序设计时需要注意以下几个关键点:1. 确认开发板的芯片型号及其接口对于嵌入式系统,首先需要确认的是芯片型号及其连接方式。

比如:常见的芯片有 ARM、MIPS、21XX、51、AVR、STM32 等,每个芯片都有自己的特性,需要开发人员针对其实际情况进行针对性的编程。

而在开发过程中,还需要考虑板子中各个芯片之间的通讯接口,如:UART、I2C、SPI、以太网、USB 等。

2. 确认硬件集成电路的特性开发人员需要在开始编写驱动程序时,首先通过寄存器分析、参考原始资料等方式,确认硬件集成电路的特性,包括芯片功能、寄存器的作用、位字段定义、寄存器状态、中断处理等方面。

3. 编写具有可移植性的驱动程序代码整个嵌入式系统的软件开发应遵循开放性、扩展性、通用性原则,将有些普适的编程模式和范式抽象成高可复用的程序模块,以提高代码的复用性和可维护性。

二、驱动程序的优化为提高嵌入式系统的性能和资源利用率,还需要对驱动程序进行优化。

1. 适量的硬件资源清单在嵌入式系统中,资源利用与可靠性之间需要进行折衷。

基于嵌入式Linux系统的双网卡大数据传输


在嵌入式监控设备方面,嵌入式系统具有体积小、功耗低、可靠性高等优点, 逐渐成为监控系统的理想选择。常见的嵌入式操作系统包括Linux、Android 等。此外,数据采集和处理也是监控系统中不可或缺的一部分,一般通过嵌入 式处理器或FPGA等硬件实现。
系统设计
基于无线数据传输的嵌入式监控系统主要包括无线数据传输模块、嵌入式监控 设备和数据采集处理模块三部分。
无线数据传输模块是系统的核心部分,负责数据的传输和通信。本次演示采用 ZigBee无线通信技术,其具有低功耗、低成本、高可靠性等特点,适合于监 控系统中数据传输的需求。
嵌入式监控设备作为系统的终端节点,需要具备高可靠性、低功耗和小型化等 特点。本次演示采用ARM Cortex-A系列处理器作为嵌入式监控设备的核心, 配合ZigBee无线通信模块,实现数据的采集和传输。
1、选择合适的传输协议 TCP协议可以提供可靠的数据传输,但可能会限制传 输速度。UDP协议则更快,但不保证数据的可靠传输。根据实际需求选择合适 的协议。
2、优化网络缓冲区通过调整网络缓冲区的大小,可以优化数据传输速度。可 以使用netstat命令查看当前的网络缓冲区状态,并使用内核参数(如 net.core.rmem_max、net.core.wmem_max等)进行调整。
文献综述
无线数据传输技术作为监控系统的重要组成部分,经历了从有限到无限的发展 过程。早期的监控系统主要采用有线传输方式,但随着监测点数量的增加和环 境复杂度的提高,有线传输的灵活性和可靠性逐渐受到限制。随后,无线传输 技术逐渐成为研究热点,主要有ZigBee、WiFi、蓝牙等多种技术。这些技术 在传输速率、传输距离、功耗等方面具有各自的优势和不足。
3、使用mysql等专业工具进行数据分析如果传输的数据存储到了数据库等专 用数据存储设备中,可以使用这些设备的专用工具进行数据分析。例如,使用 mysql的select、update、delete等命令可以对存储在mysql中的数据进行各 种操作。

基于S3C2410嵌入式系统RTL8019网卡驱动程序的实现

S 一S 9 5 7 1 ,5 1 ,8 2 ) 地 址 线 ; A0 D1 ( ,~ 3 1 ,6 1  ̄ 7 :
标准, 几乎所有 的操作 系统 和 网络协 议 中 , 可 以找 都
到对 N 2 0网络设备 的支持 。在 Ln x嵌入 式 系统 E0 iu
中 , T 0 9 一款 符 合 NE 0 0标 准 的 以 太 网 芯 R 1是 20 片, 符合 Eh me U I E 0 . (0 ae ,0 ae , te t 与 E E 8 2 3 1B s5 1B s2 1 B sT) 0 ae 标准 , 内置 FF 缓存 器用 于发送 和 接收 并 IO
R 81 TL 0 9的主要 引脚 功能 : AE 3 ) 地址 使 能 引 脚 , 定 电路 被 分 得 的 N(4 : 决
地 址空 间 ;
设置 。R 8 1 TL 0 9寄存 器 地址 的地 址 映 射 是 将 以 太 网卡映射 在 了 系 统 的 B n 5上 , 址 从 0 a0 0 0 ak 地 x 0 0 0
4 ,8 5 ) 数据 发送 和接收 引脚 。 6 5 ,9 :
( RT 8 1 二) L 0 9内部 寄存 器 RTL 0 9有 4 寄存器 组 , 81 页 每页 寄存 器组有 l 6 个寄存 器 , 行 网络 通信 时 需 要对 这 些 寄存 器 进 行 进
( ) 一 RTL 0 9芯 片 的硬 件 结 构 81
b 信 息 工程 学 院 , 辽 宁 沈 阳 1 0 6 ) . 1 1 8
( 阳 理 工 大 学 a 研 究 生学 院 沈 .

要 : 述 了 Ln x下 R L 0 9芯 片 的 硬 件结 构 , 作 原 理 , 此 基 础 上 提 出 了 R L 0 9网 卡 芯片 驱 论 iu T 81 工 在 T 81

嵌入式 loader 下 PCIe网卡驱动设计与实现

嵌入式loader下PCIe网卡驱动设计与实现么刚1 2张武2 王劲林21(中国科学院研究生院北京100080)2(中国科学院声学研究所北京 100080)摘要:某些嵌入式系统需要在Bootloader中驱动网卡完成特定的网络功能。

本文针对嵌入式系统存储容量有限的特点,提出了PCIe类网卡简化驱动模型,并给出一个具体实现。

对于嵌入式系统Bootloader下的网卡驱动开发有一定的借鉴作用。

关键词:PCI Express(周边原件高速扩展接口);嵌入式系统;网卡驱动The Design and Realization of Simplification Model for PCIe NICDriver in Embedded LoaderYao Gang1 2, Zhang Wu2 ,Wang Jinlin21(Graduate University of China Academy of Science. Beijing 100080)2(Institute of Acoustics, Chinese Academy of Science. Beijing 100080)Abstract:Some embedded systems need to drive the NIC to complete some network functions. According to the limited storage capacity in embedded systems, this article presents a simplification model for PCIe NICs, and gives an implementation. This will have some reference value for NIC driver design in embedded Bootloader.【Key Words】PCIe;embedded system;NIC driver基金资助项目名称:家庭网络与IP多媒体子系统网络融合中的关键技术研究。

基于T-Kernel的WLAN网卡驱动设计

基于T-Kernel的WLAN网卡驱动设计邹昱武汉理工大学信息工程学院,武汉 (430070)E-mail:zouyuxx@摘要:无线网络与嵌入式系统的互联有着广阔的应用前景。

本文从T-Kernel操作系统的特点及其设备驱动的结构入手,提出了WLAN网卡硬件设计方案,分析了嵌入式T-Kernel 操作系统下WLAN网卡驱动的原理与一般特性,并着重阐述了其驱动的设计方法、网卡初始化、重要处理函数的作用以及数据包的发送和接收过程,为无线网络与嵌入式系统的结合提出了一种有效的解决方案。

关键词:T-Kernel;设备驱动;WLAN;处理函数中图分类号:1.引言随着网络通信和移动通信的发展,无线局域网WLAN(Wireless Local Area Network)技术迅猛发展,无线局域网络能利用简单的存取架构让用户透过它,达到“信息随身化、便利走天下”的理想境界[1]。

另一方面,随着电子与信息技术的快速发展,嵌入式系统应用到了社会生活的每个角落,如手机、个人数字助理(PDA)、笔记本电脑等。

嵌入式系统与无线网络的结合也成为一种必然的趋势。

本文从T-Kernel操作系统的特点及其WLAN层次模型入手,提出了一种基于嵌入式T-Kernel操作系统的WLAN网卡驱动程序设计方案。

2.T-Kernel的系统结构T-Kernel是构建于T-Engine之上的标准化的开源实时操作系统核心,由TRON发展而来,并以ITRON为基础,凝聚了嵌入式应用的实时、多任务OS领域中具有20多年历史的TRON工程的成果、业绩和经验技术[2]。

T-Kernel的设计采用了微内核的结构,它仅包含实时核心的基本功能,不包括文件管理、网络管理和GUI(Graphical User Interface)等功能,这一点与ITRON是一样的。

文件管理等功能则由运行在T-Kernel的基本中间件提供,与T-Kernel组合使用。

其中具有代表性的是提供文件管理、事件管理和过程管理等功能的T-Kernel Extension。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统中常见的网卡驱动比较(CS8900A,RTL8019,DM9000)今天我又看了一些文章,想看看具体DM9000和CS8900A有什么区别?在KITL移植的时候,怎么样才能才能把CS8900A换成DM9000,因为我的KITL移植就卡在这里了,我的板子是DM9000驱动,我当然想在5.0到6.0的移植一步到位,可是在移植过程中由于是基于模拟器进行移植的,默认的是CS89 00A网卡驱动,导致KITL出错,具体怎么改呢?这是一个问题,先留在这里。

先把我今天看的一篇文章留在这里!1.CS8900ACS8900芯片是Cirrus Logic公司生产的一种局域网处理芯片,在嵌入式领域中使用非常常见。

它的封装是100-pin TQFP,内部集成了在片RA M、10BASE-T收发滤波器,并且提供8位和16位两种接口。

CS8900与ARM芯片按照16位方式连接,网卡芯片复位后默认工作方式为I/O连接,基址是300H。

CS8900A还提供其它性能和配置选择.它独特的Packet Page结构可自动适应网络通信量模式的改变和现有系统资源,从而提高系统效率。

MCU与CS8900A的数据传输有三种模式:I/O模式,存储器模式和DMA模式.本设计采用CS8900A默认的I/O模式,因为I/O模式简单易用. 在I/O模式下,通过访问8个16位的寄存器来访问PacketPage结构,这8个寄存器被映射到2410地址空间的16个连续地址。

当CS8900A上电后,寄存器默认的基址为0x300h。

电路连接如下:CS8900A的IO模式特点就是这个PacketPage结构,使用PacketP agePointer和PacketPageData Port这两个寄存器对CS8900A的内部寄存器进行配置,非常方便。

#define CS8900_PPTR *(volatileCS8900_REG*) (CS8900_BASE+0x05*CS8900_OFF)//PacketPagePointer的定义#define CS8900_PDATA *(volatile CS8900_REG *)(CS8900_BASE+0x06*CS8900_OFF)//PacketPageData Port通过如下函数对cs8900a设置get_reg(int regno) //32位模式,读寄存器的数据{CS8900_PPTR = regno; // regno为要读的寄存器偏移地址return (unsigned short) CS8900_PDATA; //返回要读寄存器的数据}static void put_reg(int regno, unsigned short val) //写寄存器{CS8900_PPTR = regno;CS8900_PDATA = val; //写寄存器}其中CS8900_BASE为基址与硬件连接有关。

硬件原理图决定在S3C 2410的地址空间中,CS8900A的基地址为x19000000。

那么在I/O模式下, CS8900A的内部寄存器默认基地址为0x300h,在S3C2410的地址空间中的地址为0x19000300。

#define CS8900_BASE 0x19000300完成以上,下面的驱动就非常好写了,用网卡挂起函数示例:void eth_halt( void ){/* disable transmitter/receiver mode */put_reg(PP_LineCTL, 0); //禁止网卡/* "shutdown" to show ChipID or kernel wouldn't find he cs8900 ... */get_reg_init_bus(PP_ChipID);}2.rtl8019RTL8019AS 是高度集成以太网控制器,为了提供完全解决即插即用方案,RTL8019AS 在集成10BASET 收发器,BNC,和AUI 接口之间的自动检测功能。

此外,8 条IRQ 总线和16 条基本地址总线为大资源情况下提供了宽松的环境。

RTL8019AS 支持16k,32k,和64k 字节BROM 和闪存接口。

它仍然提供页面模式功能,这种功能能支持在仅16k 字节内存系统空间下的4 M 字节的BROM.此外,BROM 的无用命令被用来释放BROM 内存空间。

RTL8019AS 用16k 字节SRAM 设计在单片芯片上,它的设计不仅提供了更多友好的功能,而且节省了SRAM 存储资源。

RTL8019选择的端口I/O基地址为300H。

它的地址偏移量共32个,用到的地址空间为300H-31FH,将地址线SA0-SA4与CPU的A0-A4连接, SA8-SA9接高电平,其余地址线接低。

ARM的A22和nGCS3信号的连接,确定地址映射在系统的哪个Bank上,从而确定基地址。

如若A22接SA8,nGCS3接SA5,那么寻址范围就是0x8340001F~0x83400000。

驱动特点是,对其寄存器的访问与CPU对自己内对存访问几乎一样。

寄存器采用了分页技术,每页寄存器的便宜都是00~1F。

这样使硬件连接简单。

另外RTL8019有BROM接口,可以接非易失存储器,复位时可以读取其内部数据,十分方便。

由于类似同意编址,而不像CS8900A那样采用PacketPage结构,因此驱动写起来更加容易,但是多一个页确定函数:寄存器配置函数:static unsigned char get_reg (unsigned int regno) //得到寄存器的值{return (*(unsigned char *) regno);}static void put_reg (unsigned int regno, unsigned char val) //给寄存器赋值{*(volatile unsigned char *) regno = val;}页面切换方法:put_reg (RTL8019_COMMAND, RTL8019_PAGE0);网卡挂起函数示例:void eth_halt (void){put_reg (RTL8019_COMMAND, 0x01); //挂起网卡}3.DM9000该DM9000是一款完全集成的和符合成本效益单芯片快速以太网MAC 控制器与一般处理接口,一个10/100M自适应的PHY和4K DWORD值的SRAM 。

它的目的是在低功耗和高性能进程的3.3V与5V的支持宽容。

DM9000还提供了介质无关的接口,来连接所有提供支持介质无关接口功能的家用电话线网络设备或其他收发器。

该DM9000支持8位,16位和32 -位接口访问内部存储器,以支持不同的处理器。

随着其成本的降低和功能的强大越来越被广泛使用。

对DM9000读写操作,首先对DM9000正确寻址。

AEN(地址允许)是输入引脚片选信号。

SA4~SA9是地址总线4~9位,当AEN低且SA9和SA 8高,而SA7、SA6、SA5、SA4为低时,则DM9000被选中。

DM9000默认I/0基地址为300H。

CMD引脚用于设置COMMAND模式,CMD为高时,选择数据端口。

C MD为低时,选地址端口。

数据端口和地址端口的地址码由下式决定: DM9000地址端口=高位片选地址+300H+0HDM9000数据端口=高位片选地址+300H+4H其中,高位片选地址由S3C2410的NGCS3提供,即为:0X100000000H。

驱动编写特点: 采用一个CMD信号来控制是对DM9000读还是写,架构非常简单,容易理解.有点类似CS8900A的PacketPage结构.驱动关键如下:读端口与写端口的宏#define DM9000_outb(d,r) ( *(volatile u8 *)r = d )#define DM9000_outw(d,r) ( *(volatile u16 *)r = d )#define DM9000_outl(d,r) ( *(volatile u32 *)r = d )#define DM9000_inb(r) (*(volatile u8 *)r)#define DM9000_inw(r) (*(volatile u16 *)r)#define DM9000_inl(r) (*(volatile u32 *)r)配置寄存器的函数:static u8DM9000_ior(int reg) //读寄存器的值{DM9000_outb(reg, DM9000_IO); //类似cs8900a 把寄存器索引写道DM9000_IOreturn DM9000_inb(DM9000_DATA); //读取DM9000_DATA即是寄存器的数值}static voidDM9000_iow(int reg, u8 value){DM9000_outb(reg, DM9000_IO);DM9000_outb(value, DM9000_DATA); //给寄存器赋值}其中DM9000_IO就是DM9000的基地址,由高位片选地址+300H+0H, CMD接了A2,所以DM9000_DATA就是DM9000_IO+4,即是高位片选地址+300H+4H.挂起函数示例voideth_halt(void){DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */DM9000_iow(DM9000_IMR, 0x80); /* Disable all interrupt */DM9000_iow(DM9000_RCR, 0x00); /* Disable RX */}总结:可以看出CS8900A的接线最为复杂需要将地址线全部接上,CS8 900A支持内存模式和IO模式; rtl8019功能较CS8900A强大,提供了BR OM接口,采用寄存器统一编址,驱动简单.接线相对简单只要若干根地址线; DM9000,功能最强大,自适应以太网速度(10M/100M).接线最为简单只要一个地址线+一个片选线.这3个多月事情总是不怎么顺,其中之一是mcf52277的项目,其dm9000总是不正常,第一版是因为没有注意coldfire是大端处理器,导致原理图上52277和dm9000之间的16位数据总线高8位和低8位颠倒了,这个错误我以为是可以用软件修正的,但修正后仍然不是很正常,ping还比较正常,但tftp不行。

于是重做了一板,修正了大小端问题,但发现还是老问题,dm9000驱动看了N 遍,研究生搞的有些没有信心了,各种可能都试了,还是不行。

相关文档
最新文档