精华内容
下载资源
问答
  • realtek网卡芯片查询及mac地址硬改工具。可支持大部分realtek芯片。进入dos后,运行命令 rtnicpg /v 即可查看瑞昱网卡真正的芯片组。 之后可以使用 命令 rtnicpg /nodeid AABBCC112233 修改Mac地址为 AABBCC112233....
  • 如何利用廉价的51单片机来控制网卡芯片进行数据传输,加载TCP/IP协议连接到互联网,实现网络通信成了众多设计者的目标。但由于指令及资源的限制,实施过程会有许多困难。我们在设计方案中舍弃了耗费资源的协议,采用...
  • realtek网卡驱动是专为xp系统设计的一款网卡驱动,用户安装驱动后可以使用网卡,解决网卡...realtek网卡驱动介绍瑞昱Realtek系列网卡驱动网卡芯片驱动最新驱动5.75版,Realtek瑞昱公司最新的网络控制芯片,欢迎下载体验
  • Intel I219LM网卡芯片MAC地址更新工具。 ---------------------------- 更新方法: 1. 将附件解压缩并复制到U盘DOS启动盘, 2. 开机引导进入DOS启动盘后,输入EEUPDATE命令并敲回车,确认I219LM这张网卡的NIC号是0...
  • 把文件里面的文件全部解压到制作dos的U盘根目录。 进入DOS输入命令。 命令是c:\eeupdate /nic=[A] /mac= [A]= 网卡NIC列表的序号 [B]= 修改的MAC地址 比如: c:\eeupdate /nic=1 /mac=BCAEC51267E7
  • 常用的网卡芯片

    2013-06-07 09:25:56
    常用的网卡芯片资料,免费下载,Broadcom_NetLink-NetXtreme_DTM_15.4
  • 实验平台linux版本为4.19; EEUPDATE版本为v5.32.06.06; invm描述文件分别为2012年...[查看网卡] eeupdate32 [烧写mac] eeupdate32 /nic=2 /mac=001122334455 [烧写invm] eeupdate32 /nic=2 /invmupdate /file=I211.TXT
  • eeupdate是用来对intel网卡芯片进行设置的工具,可以烧录ee文件,烧录MAC地址等功能
  • Atheros无线网卡芯片全介绍

    千次阅读 2019-02-13 20:56:32
    Atheros现在可能是现在全球最大的无线网卡芯片供应商,此外大概就是Csico了。Atheros在无线网卡芯片领域跟Intel在中央处理器领域颇为相似,是在我国台湾宝岛的企业。虽然Intel的cpu和芯片组就是那些,但是与之配套的...

    Atheros现在可能是现在全球最大的无线网卡芯片供应商,此外大概就是Csico了。Atheros在无线网卡芯片领域跟Intel在中央处理器领域颇为相似,是在我国台湾宝岛的企业。虽然Intel的cpu和芯片组就是那些,但是与之配套的主板外观却五花八门各不相同。一样的,虽然Atheros的芯片组就那么几代,但是各厂商生产的无线网卡外观却有些不同。让人着实有些迷惑,事实上无论是Netgear还是D-Link,IBM还是东芝,其无线网卡用的有很多就是Atheros芯片。

    ---------------------------
    Atheros产品大致年表
    2006 推出5008系列,推出802.11n draft 1.0标准的a/b/g/n网卡,全球提供无线芯片达5000万片 
    2005 推出5006系列,推出全球整合最集中的单芯片g频网卡;Atheros单芯片的pci-e无线网卡诞生,全球提供无线芯片达2000万片,并发布智能天线系统。
    2004 推出5004与5005系列,推出全球首款单芯片的g频无线路由;Atheros单芯片a/b/g全频网卡、单芯片U盘
    a/b/g无线网卡
    2003 推出5002系列
    2002 推出5001X a/b/g全频网卡并获得拉斯维加斯某展会Grand Prize奖
    2001 推出5000,为a频的单频卡
    2000 开始生产a频无线网卡
    1998 Atheros由斯坦福大学、加州伯克利分校与某些私企的专家(在台湾)注资成立。 

    --------------------------------------

        下面就简单介绍一下Atheros无线网卡的几代芯片组。事实上,大家区分Atheros芯片用的更多的是5212a与5213a等芯片的名称,实际上这种区分并不太严格。真正的Atheros芯片命名方式是以芯片的代数+字母来命名的。Atheros大致从5001到5008有7代,不知为何没有5003,5007也只有一款AP。而大家接触较多的,是5002、5004、5006。其各代的主要区别是芯片数与功耗的改进,只是到了5008才有了802.11n的飞跃。

    ----------------------------
    AR5001
    由于是Atheros的第一代产品,因此芯片组中的芯片数最多,3片。包含三种产品:

    AR5001X+
    为a/b/g三频54M的芯片组,由三个芯片组成,分别为AR 2111、AR5111与AR5212。工作电压为2.5-3.3V,有pci、minipci与pc卡三种产品。

    AR5001A
    为a频卡,含有AR5111与AR5211两个芯片,同样有pci、minipci与pc卡三种产品 

    AR5001AP
    是a频的无线路由,组合芯片为AR5111与AR5311。

    AR5002
    作为第二代产品,也是让Atheros开始打开并逐渐占领市场的芯片,其a/b/g三频网卡的芯片数量减少到2个,由5212a与5112(或2112)组成。目前淘宝上面卖的最多的无线网卡芯片多为5002代产品,也就是通常说的5212a。该组芯片的相关产品包括AR5002AP-2X, AR5002AP-G, AR5002AP-X三个AP型号与 AR5002G/AR5002X两个网卡型号,网卡也包含pci/minipci/pc卡三种产品形式。

    AR5002X 
    有5212a与5112两个芯片,其中5112包含在屏蔽盖片下面,是b/g频的处理芯片;5212a则支持a/g,应该是处理superAG的功能芯片。这组芯片支持54M的a/b/g三频,同时支持super AG到108M。很多笔记本厂商都用了这款芯片,如IBM的第一代54M a/b/g无线网卡,也就是FRU 91P7418那款。

    AR5002G
    由AR2112 AR5212组成,为54M-108M的b/g双频卡。 

    AR5002AP-2X
    包括三种芯片AR2112 AR5112 AR5312的a/b/g的AP。

    AR5004
    这就是目前最主流的5213a芯片组,现在的主流笔记本很多用的都是这组芯片。到了5004的时候,芯片在功耗和发热上有了改进。5002的芯片在卡板身上双面分布,5004则改成了单面分布,使得靠近主板的那面发热大大减小。该芯片组主要有AR5004G与AR5004X两组,分别为b/g卡与a/b/g卡。这批卡的金手指不同的厂商有所不同,有跟5002一种针脚的,有少几针的,例如IBM的二代a/b/g卡,金手指比5002时代少了几根脚。具体可参看第二帖中的图片。

    AR5004X
    芯片是AR5112和5213,是除了5212芯片以外占据市场最多的另外一组。也是现在网上流传的能够顺利破解01C9报错的最高芯片组。在5004以上的Atheros卡,现在的破解程序支持不佳,因为5005以及5006的EEPROM有写保护。这个在专门网上已经得到证实。其中5213芯片的最低工作电压已经降为1.8v。典型代表就是IBM的a/b/g二代卡93P4262。

    AR5004G
    芯片由AR2112与AR5213组成,是b/g卡。其他则与5004x相同。

    AR5005
    这组芯片主要是扩展到pci-E、u盘与pc卡产品,使得atheros的产品覆盖更广,芯片更有竞争力。同时部分芯片为单芯片。

    AR5005G与AR5005GS
    芯片为单片的AR2413(前者)或2414(后者),使得原来的b/g卡从双芯片精简到单芯片。相对更省电,工作电压1.8-3.3V。只有minipci与pc卡的型号。

    AR5005UG与 AR5005UX
    这两就是5005代产品的U盘版。其中UX为AR5112 AR5523芯片的a/b/g全频,UG为AR2112 AR5523芯片的b/g卡。

    AR5005VA与AR5005VL 
    加强版本,具有3片芯片,1片AR5513,2片AR5112,其中5513使得这款具有了支持HDTV的视频无线接收功能(具体我不知道如何工作的,接收影碟播放机的发射信号?)。 其中VA为pci卡或usb盒装卡,VL为pc卡。

    AR5006
    作为最新的成熟应用技术,这组芯片把原来的5213等两片的组合完全整合成了一片5414芯片中,因此更省电。工作电压从原来的2.5-3.3V变成了1.8-3.3V。这一芯片包括两款网卡与一款AP。目前最新的笔记本机器上已经开始使用这一型号的网卡。

    AR5006X/XS/EXS
    这3个型号都是a/b/g全频卡,其中X的芯片为5413,XS的芯片为5414,有pci、minipci与pc卡三种,而EXS则为pci-E接口的卡,芯片为5424。

    AR5006EGS
    此卡为b/g卡,芯片为AR2424,是pci-e接口的卡。不知道为什么没有minipci等其他版本。

    AR5006AP-G/GS
    芯片型号为2315/2316,是b/g的无线AP 

    AR5007
    AR5007只有一款2317芯片的AP。也许是研发不成功,并没有开发出全面的产品线。

    AR5008
        这一系列2006年2月才发布,因此现在并没有像5004那样遍布市场,甚至可能并没有投产。5008代产品的改进主要是实现了对802.11n draft 1.0的支持,最大速率可达300Mbps。Atheros创新的XSPAN引进讯号持续技术(Signal-Sustain Technology,SST)大幅加强讯号可靠性与覆盖范围内的数据传输量,全面释放MIMO的潜力。

        该芯片组主要有AR5008-3NX与AR5008AP-3NX,AR5008-3NG与AR5008AP-3NG产品。其网卡与路由结合,使得无线网速得到了质的飞跃。目前只有pci与pc卡两种的设计样本,还没有minipci的型号。

        其中3NX系列是a/b/g/n卡,3NG系列是b/g/n卡,芯片都是由AR5416/5418与三频发射器AR2133/AR5133 3x3 MIMO Radio组成。这个3X3技术似乎是将三组完整的射频发射链与接收链整合至单一芯片,功耗更低,更牛X。注:多入多出(MIMO,Multiple-Input Multiple-Out-put),该技术能在不增加带宽的情况下成倍地提高通信系统的容量和频谱利用率,是新一代移动通信系统必须采用的关键技术。

        由于明年intel才会放出支持802.11n的扣肉主板,因此今年恐怕大家看不到5008的实际应用。但是相信AR5008会让atheros继续在无线局域网市场上纵横驰骋。

        至于6001系列,由于接口不常见,就不介绍了。第2帖大致讨论一下在IBM本子上面的兼容性。后面可以看一些图片,可惜5002芯片布局官网上没有,我就没法贴了,最后补一张5001的pc卡参考。

     

    展开全文
  • 然而,网卡芯片,做为服务器及PC机与外界的唯一数据传输通道,对于网络信息安全的重要性不言而喻。 近日,锐文科技发布国内首个基于国产化FPGA的智能网卡芯片。该系列产品可分别支持双口10GbE,四口10GbE以及单口40...

    随着数据带宽及数据量的飞速上涨,DPU、IPU以及xPU等国际品牌主导的多种类型智能网卡,逐鹿服务器端网络市场。然而,网卡芯片,做为服务器及PC机与外界的唯一数据传输通道,对于网络信息安全的重要性不言而喻。

    近日,锐文科技发布国内首个基于国产化FPGA的智能网卡芯片。该系列产品可分别支持双口10GbE,四口10GbE以及单口40GbE。在提供网卡卸载功能以及线速处理以太网包的基础上,锐文科技加大与国产CPU适配的研发力度,为国产CPU加速。该系列国产化产品在与国产CPU飞腾、鲲鹏、龙芯、海光等以及国产操作系统的适配上,性能及稳定性远优于国际同类产品。

     如需锐文基于国产FPGA的网卡芯片xSmartNIC-200、xSmartNIC-400、xSmartNIC-800在不同平台的测试的性能报告,请联系sales@raymax.net

    展开全文
  • 包含,51单片机例程, stm程序例程, W5500封装库, W5500官方手册, 官方资料,调试软件,电路图纸.等..........
  • 详细的列出了TwinCAT支持的网卡芯片型号,为用户选购工控机提供了极大的便利。
  • TwinCAT System Manager: EtherCAT Supported Network Controller by Beckhoff Ethernet Driver
  • 1.导言 AX88179A USB 3.2 Gen1至10/100/1000 M千兆以太网控制器是一种高性能的以太网控制器。 性能和高度集成的ASIC,使成本低,体积小,简单。 即插即用千兆以太网... 亚信的是目前给switch联网兼容性最好的芯片

    1.导言
    AX88179A USB 3.2 Gen1至10/100/1000 M千兆以太网控制器是一种高性能的以太网控制器。
    性能和高度集成的ASIC,使成本低,体积小,简单。
    即插即用千兆以太网连接能力台式机,笔记本电脑,
    超级本、对接站、游戏机、数码家用电器和任何嵌入式设备
    系统使用标准USB端口。
    本应用程序设计说明提供了有关外部组件的重要信息
    ASIX电子设计的选择、原理图设计和PCB设计/布局
    AX88179A USB3.2Gen1到千兆以太网控制器。

    亚信的是目前给switch联网兼容性最好的芯片。

     

    展开全文
  • 一种应用于网卡芯片的DMA控制器设计.pdf
  • 主板上的网卡芯片的问题.docx
  • 单片机驱动DM9000网卡芯片详细调试过程.pdf
  • 基于ARM平台的嵌入式RTL8019AS网卡芯片数据通信的设计与实现.pdf
  • 网卡芯片ar8031

    2015-11-07 10:43:30
    网卡ar8031的数据手册。
  • TPS23861网卡芯片操作

    2017-07-20 11:30:21
    TPS23861网卡芯片操作源码
  • 和其它网卡芯片不同,DM9000系列网卡芯片在嵌入式开发板上很常见,尤其是有关ARM-Linux的开发板上的网络连接部分几乎都是采用该芯片完成的。当然,其它网卡芯片,如RTL8019的应用也很常见,在很多开发板上得到应用...

    和其它网卡芯片不同,DM9000系列网卡芯片在嵌入式开发板上很常见,尤其是有关ARM-Linux的开发板上的网络连接部分几乎都是采用该芯片完成的。当然,其它网卡芯片,如RTL8019的应用也很常见,在很多开发板上得到应用然而RTL8019的介绍在网上可以找到非常详细的介绍,尤其是用单片机对其做底层驱动的介绍非常丰富。下面的网站就介绍了用AVR驱动RTL8019网卡芯片的非常详细的过程,有兴趣的朋友可以参考一下。

    http://members.home.nl/bzijlstra/software/examples/RTL8019as.htm AVR驱动RTL8019网卡芯片的详细介绍。

    言归正传。在网上也能找到许多关于DM9000网卡芯片的介绍,然而这些介绍大多是关于Linux或WinCE下的驱动程序或移植,很少有介绍单片机驱动DM9000的例子。因此我在这里把我调试DM9000E的过程详细说明一下,仅供参考。

    本文主要介绍单片机驱动DM9000E网卡芯片的详细过程。从网卡电路的连接,到网卡初始化相关程序调试,再到ARP协议的实现,一步一步详细介绍调试过程。如果有时间也会把UDP和TCP通讯实验过程写出来。当然,会用单片机编写DM9000的驱动,再想编写ARM下的Linux的驱动就容易的多了。在调试之前,应该先参考两份技术文档,可以从下面网站中下载。

    DM9000E.pdf(芯片数据资料)和 DM9000 Application Notes Ver 1_22 061104.pdf(应用手册)

    http://www.davicom.com.tw

    或者

    DM9000 Datasheet VF03: 
    http://www.davicom.com.tw/userfile/24247/DM9000-DS-F03-041906_1.pdf

    DM9000A Datasheet: 
    http://www.davicom.com.tw/userfile/24247/DM9000A-DS-F01-101906.pdf

    DM9000 Application Notes V1.22 
    http://www.davicom.com.tw/big5/download/Data%20Sheet/DM9000_Application_Notes_Ver_1_22%20061104.pdf

    一、电路连接

         DM9000E网卡芯片支持8位、16位、32位模式的处理器,通过芯片引脚EEDO(65脚)和WAKEUP(79脚)的复位值设置支持的处理器类型,如16位处理器只需将这两个引脚接低电平即可,其中WAKEUP内部有60K下拉电阻,因此可悬空该引脚,或作为网卡芯片唤醒输出用。其它型号请参考相应的数据手册。

    clip_image001

    图1 DM9000引脚

    如图所示,对处理器驱动网卡芯片来说,我们比较关心的有以下几个引脚:IOR、IOW、AEN、CMD(SA2)、INT、RST,以及数据引脚SD0-SD15-SD31和地址引脚SA4-SA9。其中,地址引脚配合AEN引脚来选通该网卡芯片,对于大多数的应用来说没有意义,因为在我们的应用中一般只用一个网卡芯片,而这些地址引脚主要用于在多网卡芯片环境下选择其中之一。DM9000工作的默认基地址为0x300,这里我们按照默认地址选择,将SA9、SA8接高电平,SA7-DA4接低电平。多网卡环境可以根据TXD0-TXD3配置SA4-SA7来选择不同的网卡,这里不做介绍,有兴趣的朋友请参考应用手册和数据手册。数据引脚SD0-SD31则根据前面所讲的配置处理器模式与处理器的数据总线进行选择连接即可,没用到的引脚悬空。那么,除了地址、数据引脚外,剩下的与处理器有关引脚对我们来说及其重要了,而与处理器无关的引脚,只需按照应用手册连接即可。

        IOR和IOW是DM9000的读写选择引脚,低电平有效,即低电平时进行读(IOR)写(IOW)操作;AEN是芯片选通引脚,低电平有效,该引脚为低时才能进行读写操作;CMD的命令/数据切换引脚,低电平时读写命令操作,高电平时读写数据操作。 clip_image002

    图2 读时序

    clip_image003

    图3 写时序

    这些引脚接口和其它单片机外围器件的引脚接口基本相同,其使用也一样。对于有总线接口的单片机来说,如51系列,ARM等直接连接即可。对于没有总线接口的来说,如AVR mega32等可以直接用I/O引脚模拟总线时序进行连接。连接时要参考读写时序,如上图所示。具体连接电路,有时间我再画出来,暂时先略了。

    二、编写驱动程序

    在这,我使用C语言编写驱动程序,这需要非常注意一点,即处理器所用的C编译器使用“大端格式”还是“小端格式”,这可以在相应处理器的C编译器说明上找到。一般比较常见的是小端格式。而对于8位处理器来说,在编写驱动程序时,可以不考虑,但是在编写网络协议的时候,一定好考虑,因为网络协议的格式是大端格式,而大部分编译器或者我们习惯的是小端格式,这一点需要注意。

    在DM9000中,只有两个可以直接被处理器访问的寄存器,这里命名为CMD端口和DATA端口。事实上,DM9000中有许多控制和状态寄存器(这些寄存器在上一篇文章中有详细的使用说明),但它们都不能直接被处理器访问,访问这些控制、状态寄存器的方法是:

    (1)、将寄存器的地址写到CMD端口;

    (2)、从DATA端口读写寄存器中的数据;

        1、读、写寄存器

    其实,INDEX端口和DATA端口的就是由芯片上的CMD引脚来区分的。低电平为INDEX端口,高电平为DATA端口。所以,要想实现读写寄存器,就必须先控制好CMD引脚。

    若使用总线接口连接DM9000的话,假设总线连接后芯片的基地址为0x800300(24根地址总线),只需如下方法:

    #define DM_ADD (*((volatile unsigned int *) 0x8000300))

    #define DM_CMD (*((volatile unsigned int *) 0x8000304))

    //向DM9000寄存器写数据

    void dm9000_reg_write(unsigned char reg, unsigned char data)

    {

        udelay(20);//之前定义的微妙级延时函数,这里延时20us

        DM_ADD = reg;//将寄存器地址写到INDEX端口

        udelay(20);

        DM_CMD = data;//将数据写到DATA端口,即写进寄存器

    }

    //从DM9000寄存器读数据

    unsigned int dm9000_reg_read(unsigned char reg)

    {

        udelay(20);

        DM_ADD = reg;

        udelay(20);

        return DM_CMD;//将数据从寄存器中读出

    }

    只得注意的是前面的两个宏定义DM_ADD和DM_CMD,定义的内容表示指向无符号整形变量的指针,在这里0x800300是DM9000命令端口的地址,对它的赋值操作就相当于把数据写到该地址中,即把数据写到DM9000的命令端口中。读的道理也一样。这是一种很常见的宏定义,一般在处理器中定义通用寄存器也是这样定义的。

    若没有总线接口的话,可以使用IO口模拟总线时序的方法实现寄存器的读写。这里只说明实现步骤。首先将处理器的I/O端口与DM9000的IOR等引脚直接相连(电平匹配的情况下),又假设已经有宏定义“IOR”I/O端口控制DM9000的IOR引脚,其它端口控制DM9000引脚的命名相同,“PIO1”(根据处理器情况,可以是8位、16位或32位的I/O端口组成)控制数据端口。这样宏命名更直观些。写寄存器的函数如下:

    void dm9000_reg_write(unsigned char reg, unsigned char data)

    {

    PIO1 = reg;

    AEN = 0;

    CMD = 0;

    IOR = 1;

    IOW = 0;

    udelay(1);

    AEN = 1;

    IOW = 1;

    udelay(20);

    PIO1 = data;

    AEN = 0;

    CMD = 0;

    IOR = 1;

    IOW = 0;

    udelay(1);

    AEN = 1;

    IOW = 1;

    }

    读寄存器的写法类似,这里就略一下了。这一过程看上去有些复杂,呵呵,其实执行起来也蛮有效率的,执行时间差不多。这种模拟总线时序的方式实际并不复杂,只是把总线方式下自动执行的过程手动的执行了一遍而已。

    在DM9000中,还有一些PHY寄存器,也称之为介质无关接口MII(Media Independent Interface)寄存器。对这些寄存器的操作会影响网卡芯片的初始化和网络连接,这里不对其进行操作,所以对这些寄存器的访问方法这里也略了(在上篇文章中有介绍)。操作不当反而使网卡不能连接到网络。

    至此,我们已经写好了两个最基本的函数:dm9000_reg_write()和dm9000_reg_read(),以及前面的宏定义DM_ADD和DM_CMD。下面将一直用到。

        2、初始化DM9000网卡芯片。

    初始化DM9000网卡芯片的过程,实质上就是填写、设置DM9000的控制寄存器的过程,这里以程序为例进行说明。其中寄存器的名称宏定义在DM9000.H中已定义好。

    注:一下函数中unsigned char为一个字节unsigned int为两个字节

    //DM9000初始化

    void DM9000_init(void)


        unsigned int i;

        IO0DIR |= 1 << 8;

        IO1CLR |= 1 << 8;

        udelay(500000);

        IO2SET |= 1 << 8;

        udelay(500000);

        IO1CLR |= 1 << 8;

        udelay(500000);

    /*以上部分是利用一个IO口控制DM9000的RST引脚,使其复位。这一步可以省略,可以用下面的软件复位代替*/

        dm9000_reg_write(GPCR, 0x01);//设置 GPCR(1EH) bit[0]=1,使DM9000的GPIO3为输出。

        dm9000_reg_write(GPR, 0x00);//GPR bit[0]=0 使DM9000的GPIO3输出为低以激活内部PHY。

        udelay(5000);//延时2ms以上等待PHY上电。

        dm9000_reg_write(NCR, 0x03);//软件复位

        udelay(30);//延时20us以上等待软件复位完成

        dm9000_reg_write(NCR, 0x00);//复位完成,设置正常工作模式。

        dm9000_reg_write(NCR, 0x03);//第二次软件复位,为了确保软件复位完全成功。此步骤是必要的。

        udelay(30);

        dm9000_reg_write(NCR, 0x00);

    /*以上完成了DM9000的复位操作*/

        dm9000_reg_write(NSR, 0x2c);//清除各种状态标志位

        dm9000_reg_write(ISR, 0x3f);//清除所有中断标志位

    /*以上清除标志位*/

        dm9000_reg_write(RCR, 0x39);//接收控制

        dm9000_reg_write(TCR, 0x00);//发送控制

        dm9000_reg_write(BPTR, 0x3f);

        dm9000_reg_write(FCTR, 0x3a);

        dm9000_reg_write(RTFCR, 0xff);

        dm9000_reg_write(SMCR, 0x00);

    /*以上是功能控制,具体功能参考上一篇文章中的说明,或参考数据手册的介绍*/

        for(i=0; i<6; i++)

            dm9000_reg_write(PAR + i, mac_addr[i]);//mac_addr[]自己定义一下吧,6个字节的MAC地址

    /*以上存储MAC地址(网卡物理地址)到芯片中去,这里没有用EEPROM,所以需要自己写进去*/

    /*关于MAC地址的说明,要参考网络相关书籍或资料*/

        dm9000_reg_write(NSR, 0x2c);

        dm9000_reg_write(ISR, 0x3f);

    /*为了保险,上面有清除了一次标志位*/

        dm9000_reg_write(IMR, 0x81);

    /*中断使能(或者说中断屏蔽),即开启我们想要的中断,关闭不想要的,这里只开启的一个接收中断*/

    /*以上所有寄存器的具体含义参考上一篇文章,或参考数据手册*/

    }

    这样就对DM9000初始化完成了,怎么样,挺简单的吧。

        3、发送、接收数据包

    同样,以程序为例,通过注释说明。

    //发送数据包

    //参数:datas为要发送的数据缓冲区(以字节为单位),length为要发送的数据长度(两个字节)。

    void sendpacket(unsigned char *datas, unsigned int length)


        unsigned int len, i; 
        dm9000_reg_write(IMR, 0x80);//先禁止网卡中断,防止在发送数据时被中断干扰 
        len = length;

        dm9000_reg_write(TXPLH, (len>>8) & 0x0ff);

        dm9000_reg_write(TXPLL, len & 0x0ff);

    /*这两句是将要发送数据的长度告诉DM9000的寄存器*/

        DM_ADD = MWCMD;//这里的写法是针对有总线接口的处理器,没有总线接口的处理器要注意加上时序。

        for(i=0; i<len; i+=2)//16 bit mode

        {

            udelay(20);

            DM_CMD = datas[i] | (datas[i+1]<<8);

        }

    /*上面是将要发送的数据写到DM9000的内部SRAM中的写FIFO中,注意没有总线接口的处理器要加上适当的时序*/

    /*只需要向这个寄存器中写数据即可,MWCMD是DM9000内部SRAM的DMA指针,根据处理器模式,写后自动增加*/

        dm9000_reg_write(TCR, 0x01);//发送数据到以太网上

        while((dm9000_reg_read(NSR) & 0x0c) == 0);//等待数据发送完成

        udelay(20);

        dm9000_reg_write(NSR, 0x2c);//清除状态寄存器,由于发送数据没有设置中断,因此不必处理中断标志位

        dm9000_reg_write(IMR, 0x81);//DM9000网卡的接收中断使能

    }

    以上是发送数据包,过程很简单。而接收数据包确需要些说明了。DM9000从网络中接到一个数据包后,会在数据包前面加上4个字节,分别为“01H”、“status”(同RSR寄存器的值)、“LENL”(数据包长度低8位)、“LENH”(数据包长度高8位)。所以首先要读取这4个字节来确定数据包的状态,第一个字节“01H”表示接下来的是有效数据包,若为“00H”则表示没有数据包,若为其它值则表示网卡没有正确初始化,需要从新初始化。

    如果接收到的数据包长度小于60字节,则DM9000会自动为不足的字节补上0,使其达到60字节。同时,在接收到的数据包后DM9000还会自动添加4个CRC校验字节。可以不予处理。于是,接收到的数据包的最小长度也会是64字节。当然,可以根据TCP/IP协议从首部字节中出有效字节数,这部分在后面讲解。下面为接收数据包的函数。

    //接收数据包

    //参数:datas为接收到是数据存储位置(以字节为单位)

    //返回值:接收成功返回数据包类型,不成功返回0

    unsigned int receivepacket(unsigned char *datas)

    {

        unsigned int i, tem;

        unsigned int status, len;

        unsigned char ready;

        ready = 0;//希望读取到“01H”

        status = 0;//数据包状态

         len = 0; //数据包长度

    /*以上为有效数据包前的4个状态字节*/

        if(dm9000_reg_read(ISR) & 0x01)

        {

            dm9000_reg_write(ISR, 0x01);

        }

    /*清除接收中断标志位*/

    /***********************************************************************************/

    /*这个地方遇到了问题,下面的黑色字体语句应该替换成成红色字体,也就是说MRCMDX寄存器如果第一次读不到数据,还要读一次才能确定完全没有数据。

    在做 PING 实验时证明:每个数据包都是通过第二次的读取MRCMDX寄存器操作而获知为有效数据包的,对初始化的寄存器做了多次修改依然是此结果,但是用如下方法来实现,绝不会漏掉数据包。*/

        ready = dm9000_reg_read(MRCMDX); // 第一次读取,一般读取到的是 00H

        if((ready & 0x0ff) != 0x01)

        {

            ready = dm9000_reg_read(MRCMDX); // 第二次读取,总能获取到数据

            if((ready & 0x01) != 0x01)

             {

                if((ready & 0x01) != 0x00) //若第二次读取到的不是 01H 或 00H ,则表示没有初始化成功

                {

                     dm9000_reg_write(IMR, 0x80);//屏幕网卡中断

                     DM9000_init();//重新初始化

                     dm9000_reg_write(IMR, 0x81);//打开网卡中断

                }

                retrun 0;

             }

        }

    /* ready = dm9000_reg_read(MRCMDX); // read a byte without pointer increment

        if(!(ready & 0x01))

        {

             return 0;

        }*/

    /***********************************************************************************/

    /*以上表示若接收到的第一个字节不是“01H”,则表示没有数据包,返回0*/

        status = dm9000_reg_read(MRCMD);

        udelay(20);

        len = DM_CMD;

        if(!(status & 0xbf00) && (len < 1522))

        {

            for(i=0; i<len; i+=2)// 16 bit mode

            {

                udelay(20);

                tem = DM_CMD;

                datas[i] = tem & 0x0ff;

                datas[i + 1] = (tem >> 8) & 0x0ff;

            }

        }

        else

        { 
            return 0;

        }

    /*以上接收数据包,注意的地方与发送数据包的地方相同*/

        if(len > 1000) return 0;

        if( (HON( ETHBUF->type ) != ETHTYPE_ARP) &&

            (HON( ETHBUF->type ) != ETHTYPE_IP) )

        {

            return 0;

        }

        packet_len = len;

    /*以上对接收到的数据包作一些必要的限制,去除大数据包,去除非ARP或IP的数据包*/ 
        return HON( ETHBUF->type ); //返回数据包的类型,这里只选择是ARP或IP两种类型

    }

    注意:上面的函数用到了一些宏定义,已经在头文件中定义过,这里说明一下:其中uint16定义为两个字节的变量,根据C编译器进行定义。

    unsigned char Buffer[1000];//定义了一个1000字节的接收发送缓冲区

    uint16 packet_len;//接收、发送数据包的长度,以字节为单位。

    struct eth_hdr //以太网头部结构,为了以后使用方便

    {

    unsigned char d_mac[6];   //目的地址

    unsigned char s_mac[6];   //源地址

    uint16 type;     //协议类型

    };

    struct arp_hdr //以太网头部+ARP首部结构

    {

    struct eth_hdr ethhdr;    //以太网首部

    uint16 hwtype;     //硬件类型(1表示传输的是以太网MAC地址)

    uint16 protocol;    //协议类型(0x0800表示传输的是IP地址)

    unsigned char hwlen;     //硬件地址长度(6)

    unsigned char protolen;    //协议地址长度(4)

    uint16 opcode;     //操作(1表示ARP请求,2表示ARP应答)

    unsigned char smac[6];    //发送端MAC地址

    unsigned char sipaddr[4];    //发送端IP地址

    unsigned char dmac[6];    //目的端MAC地址

    unsigned char dipaddr[4];    //目的端IP地址

    };

    struct ip_hdr //以太网头部+IP首部结构

    {

    struct eth_hdr ethhdr;    //以太网首部

    unsigned char vhl,      //4位版本号4位首部长度(0x45)

               tos;     //服务类型(0)

       uint16 len,      //整个IP数据报总字节长度

             ipid,           //IP标识

             ipoffset;     //3位标识13位偏移

    unsigned char ttl,             //生存时间(32或64)

              proto;         //协议(1表示ICMP,2表示IGMP,6表示TCP,17表示UDP)

    uint16 ipchksum;    //首部校验和

    unsigned char srcipaddr[4],    //源IP

                 destipaddr[4];   //目的IP

    };

    以上定义的三种首部结构,是根据TCP/IP协议的相关规范定义的,后面会对ARP协议进行详细讲解。

    展开全文
  • dm9000网卡芯片数据手册
  • ENC28j60网卡芯片

    2013-05-27 13:02:10
    网卡芯片,用于下位机的通信,主要通过TCP/IP协议来实现的。
  • 单片机驱动DM9000网卡芯片

    千次阅读 2013-04-01 12:57:04
    单片机驱动DM9000网卡芯片(详细调试过程)【上】 单片机驱动DM9000网卡芯片(详细调试过程)【上】 ...和其它网卡芯片不同,DM9000系列网卡芯片在嵌入式开发板上很常见,尤其是有关ARM-Linux的开发板上的网
  • 目录 一、引言 二、网络设备驱动架构介绍 三、网络设备框架常用接口介绍 ------>网络协议接口层 ------>...今天来和大家分析一下rtl88xx 系列网卡的驱动框架,该网卡是USB接口的,也就是结合了两种驱
  • TPS2384网卡芯片操作

    2017-07-20 11:28:39
    TPS2384网卡芯片操作源码
  • 非常不错的资料,免费下载,肯定不会后悔的 我参考了,很不错
  • 3G无线网卡芯片

    2013-11-13 17:32:25
    3G无线网卡芯片 3G无线网卡框架 3G无线网卡电路
  • 8139网卡芯片设计指南

    2009-05-20 21:27:28
    8139网卡是国内市场上常见的一款网卡,上传的是这款网卡的设计指南。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,589
精华内容 13,035
关键字:

网卡芯片