紧急求助:DM9000网卡驱动异常程序异常

今日: 0|主题: 4877|排名: 49&
1 / 163 页
- [回帖奖励
1 / 163 页
Powered by博主最新文章
博主热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)随笔 - 211&
文章 - 0&评论 - 35&trackbacks - 0
单片机驱动DM9000网卡芯片(详细调试过程)【上】
和其它网卡芯片不同,DM9000系列网卡芯片在嵌入式开发板上很常见,尤其是有关ARM-Linux的开发板上的网络连接部分几乎都是采用该芯片完成的。当然,其它网卡芯片,如RTL8019的应用也很常见,在很多开发板上得到应用然而RTL8019的介绍在网上可以找到非常详细的介绍,尤其是用单片机对其做底层驱动的介绍非常丰富。下面的网站就介绍了用AVR驱动RTL8019网卡芯片的非常详细的过程,有兴趣的朋友可以参考一下。
AVR驱动RTL8019网卡芯片的详细介绍。
言归正传。在网上也能找到许多关于DM9000网卡芯片的介绍,然而这些介绍大多是关于Linux或WinCE下的驱动程序或移植,很少有介绍单片机驱动DM9000的例子。因此我在这里把我调试DM9000E的过程详细说明一下,仅供参考。
本文主要介绍单片机驱动DM9000E网卡芯片的详细过程。从网卡电路的连接,到网卡初始化相关程序调试,再到ARP协议的实现,一步一步详细介绍调试过程。如果有时间也会把UDP和TCP通讯实验过程写出来。当然,会用单片机编写DM9000的驱动,再想编写ARM下的Linux的驱动就容易的多了。在调试之前,应该先参考两份技术文档,可以从下面网站中下载。
DM9000E.pdf(芯片数据资料)和 DM9000 Application Notes Ver 1_22 061104.pdf(应用手册)
DM9000 Datasheet VF03:
DM9000A Datasheet:
DM9000 Application Notes V1.22
一、电路连接
     DM9000E网卡芯片支持8位、16位、32位模式的处理器,通过芯片引脚EEDO(65脚)和WAKEUP(79脚)的复位值设置支持的处理器类型,如16位处理器只需将这两个引脚接低电平即可,其中WAKEUP内部有60K下拉电阻,因此可悬空该引脚,或作为网卡芯片唤醒输出用。其它型号请参考相应的数据手册。
图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的命令/数据切换引脚,低电平时读写命令操作,高电平时读写数据操作。
图2 读时序
图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的话,假设总线连接后芯片的基地址为0x根地址总线),只需如下方法:
#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 =//将寄存器地址写到INDEX端口
    udelay(20);
    DM_CMD =//将数据写到DATA端口,即写进寄存器
//从DM9000寄存器读数据
unsigned int dm9000_reg_read(unsigned char reg)
    udelay(20);
    DM_ADD =
    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)
udelay(1);
udelay(20);
udelay(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)
   
    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,
    dm9000_reg_write(IMR, 0x80);//先禁止网卡中断,防止在发送数据时被中断干扰
    len =
    dm9000_reg_write(TXPLH, (len&&8) & 0x0ff);
    dm9000_reg_write(TXPLL, len & 0x0ff);
/*这两句是将要发送数据的长度告诉DM9000的寄存器*/
    DM_ADD = MWCMD;//这里的写法是针对有总线接口的处理器,没有总线接口的处理器要注意加上时序。
    for(i=0; i& 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,
    unsigned int status,
   
    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& i+=2)// 16 bit mode
        {
            udelay(20);
            tem = DM_CMD;
            datas[i] = tem & 0x0
            datas[i + 1] = (tem && 8) & 0x0
        }
    }
    else
    {
        return 0;
    }
/*以上接收数据包,注意的地方与发送数据包的地方相同*/
    if(len & 1000) return 0;
    if( (HON( ETHBUF-&type ) != ETHTYPE_ARP) &&
        (HON( ETHBUF-&type ) != ETHTYPE_IP) )
    {
        return 0;
    }
    packet_len =
/*以上对接收到的数据包作一些必要的限制,去除大数据包,去除非ARP或IP的数据包*/
    return HON( ETHBUF-&type ); //返回数据包的类型,这里只选择是ARP或IP两种类型
注意:上面的函数用到了一些宏定义,已经在头文件中定义过,这里说明一下:其中uint16定义为两个字节的变量,根据C编译器进行定义。
unsigned char Buffer[1000];//定义了一个1000字节的接收发送缓冲区
uint16 packet_//接收、发送数据包的长度,以字节为单位。
struct eth_hdr //以太网头部结构,为了以后使用方便
unsigned char d_mac[6];   //目的地址
unsigned char s_mac[6];   //源地址
uint16     //协议类型
struct arp_hdr //以太网头部+ARP首部结构
struct eth_    //以太网首部
uint16     //硬件类型(1表示传输的是以太网MAC地址)
uint16    //协议类型(0x0800表示传输的是IP地址)
     //硬件地址长度(6)
un    //协议地址长度(4)
uint16     //操作(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_    //以太网首部
unsigned char vhl,      //4位版本号4位首部长度(0x45)
               //服务类型(0)
   uint16 len,      //整个IP数据报总字节长度
         ipid,           //IP标识
             //3位标识13位偏移
unsigned char ttl,             //生存时间(32或64)
                  //协议(1表示ICMP,2表示IGMP,6表示TCP,17表示UDP)
uint16    //首部校验和
unsigned char srcipaddr[4],    //源IP
             destipaddr[4];   //目的IP
以上定义的三种首部结构,是根据TCP/IP协议的相关规范定义的,后面会对ARP协议进行详细讲解。
阅读(...) 评论()linux系统 下关于DM9000网卡的问题_百度知道
linux系统 下关于DM9000网卡的问题
dm9000 debug level (0-4)&quot在驱动代码的65行左右
MODULE_PARM_DESC(debug, &是干嘛的,什么意思;)
我有更好的答案
Hello World enter\n&
printk(KERN_INFO & watchdog-&[%d]&#92, watchdog);
return 0;/* 对模块的参数进行描述 *&#47.h&static int watchdog = 5000;21cnbao@gmail:
2, int, 0644), &transmit timeout in million seconds.&);static int hello_init(void){
printk(KERN_INFO &quot, 但是可以通过 insmod hello.ko watchdog=1000设置非默认值 */6& Hello World enterSep 13 17:22;a simplest module&);查看模块输出;n&.ko filename:[root@bogon hello]#MODULE_LICENSE(&Dual BSD&#47:
CA550DAF62F17A9B23FFCD6depends:
Barry Song &lt:
watchdog=1000[root@bogon hello]#GPL&);MODULE_DESCRIPTION(&quot.com&&quot:54/* watdog默认值是5000;GPLmodule_exit(hello_exit);module_param(Barry Song &&}static void hello_exit(void){
printk(KERN_INFO & Hello World exit\n &);}module_init(hello_init):
A simple Hello World Modulelicense:
Dual BSD/MODULE_PARM_DESC(watchdog:tail -f /var/log/message:Sep 13 17:22:
hello.koalias:
a simplest module#include &linux/module.ko [root@bogon hello]#MODULE_AUTHOR(&quot:
watchdog-&[1000]查看模块信息;A simple Hello World Module&);MODULE_ALIAS(&quot:54);init.h&linux&#47#include &lt.6
对模块参数debug进行描述
用modinfo可以查看到
为您推荐:
其他类似问题
dm9000的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Linux DM9000网卡驱动程序完全分析_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Linux DM9000网卡驱动程序完全分析
来源:Linux社区&
作者:雷宏亮
说明1:本文分析基于内核源码版本为linux-2.6.31 说明2:本文在理解了linux中总线、设备和驱动模型的基础上加以分析代码
虽然Linux驱动程序应该是和具体的硬件平台分离的,但是为了更好的理解DM9000的驱动程序,这里还是结合一下Mini2440开发板,这样也可以更好的体会如何实现驱动和平台分离。
本文分成以下几个部分: 一、Mini2440开发板上DM9000的电气连接和Mach-mini2440.c文件的关系。 二、两个重要的结构体介绍:sk_buff和net_device 三、具体代码分析
一、Mini2440开发板上DM9000的电气连接和Mach-mini2440.c文件的关系 Mini2440开发板上DM9000与S3C2440的连接关系如下:&&& 其中片选信号AEN使用了nGCS4,所以网卡的内存区域在BANK4,也就是从地址0x开始。DM9000的TXD[2:0]作为strap pin在电路图中是空接的,所以IO base是300H。中断使用了EINT7。这些内容在Mach文件中有如下体现:
#define&S3C2410_CS4&(0x) &
#define&MACH_MINI2440_DM9K_BASE&(S3C2410_CS4&+&0x300) &&
static&struct&resource&mini2440_dm9k_resource[]&__initdata&=&{& &&
&&&&[0]&=&{& &&
&&&&&&&&.start&=&MACH_MINI2440_DM9K_BASE,& &&
&&&&&&&&.end&&&=&MACH_MINI2440_DM9K_BASE&+&3,& &&
&&&&&&&&.flags&=&IORESOURCE_MEM& &&
&&&&},& &&
&&&&[1]&=&{& &&
&&&&&&&&.start&=&MACH_MINI2440_DM9K_BASE&+&4,& &&
&&&&&&&&.end&&&=&MACH_MINI2440_DM9K_BASE&+&7,& &&
&&&&&&&&.flags&=&IORESOURCE_MEM& &&
&&&&},& &&
&&&&[2]&=&{& &&
&&&&&&&&.start&=&IRQ_EINT7,& &&
&&&&&&&&.end&&&=&IRQ_EINT7,& &&
&&&&&&&&.flags&=&IORESOURCE_IRQ&|&IORESOURCE_IRQ_HIGHEDGE,& &&
另外在Mach文件中还定义了DM9000平台设备,设备名称为“dm9000”,设备资源就是上面定义的IO和中断资源。代码清单如下:
static&struct&dm9000_plat_data&mini2440_dm9k_pdata&__initdata&=&{ &&
&&&&.flags&&&&&&=&(DM9000_PLATF_16BITONLY&|&DM9000_PLATF_NO_EEPROM), &&
static&struct&platform_device&mini2440_device_eth&__initdata&=&{ &&
&&&&.name&&&&&&&=&"dm9000", &&
&&&&.id&&&&&=&-1, &&
&&&&.num_resources&&=&ARRAY_SIZE(mini2440_dm9k_resource), &&
&&&&.resource&&&=&mini2440_dm9k_resource, &&
&&&&.dev&&&&&&&&=&{ &&
&&&&&&&&.platform_data&&=&&mini2440_dm9k_pdata, &&
相关资讯 & & &
& (07/21/:14)
& (01/04/:27)
& (07/23/:38)
& (05/23/:33)
& (10/09/:05)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接??间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
AXW 发表于 代理DAVICOM全线产品:DM9000AEP,DM9000CEP,DM9000CIEP:
DM9161AEP,DM9161CEP,DM9161CIEP,DM9162EP
DM9620EP,DM9621ANP 我公司是DAVICOM(联杰国际)在大陆及香港地区授权代理商,负责DAVICOM产品的销售,技术支持和售后服务。如果有芯片需求和技术支持可以联系我QQ
(0) 匿名 发表于 只想说这里的资料都是当来的吧。
(0) axw 发表于 深圳市爱欣文科技有限公司是DAVICOM(联杰国际)在大陆及香港地区授权代理商,负责DAVICOM系列产品的销售,技术支持,售后服务。产品广泛应用于通讯,智能***表系统,工业控制,机顶盒,电子仪器仪表,门禁,POS终端,家电音响以及消费类电子产品。现长期优价供应:1.DM9000AEP,DM9000CEP业界最广泛应嵌入式网卡芯片;2.SWTICH系列产品: DM8203为2 PORT SWTICH;DM8606CFP为5 PORT SWTICH ;3.PHY系列: DM9161EP,DM9161AEP,DM9161CEP;4.工规系列产品: DM9000CIEP,DM9161CIEP,DM9161BIEP;5.超低功耗USB网卡方案: DM9620EP,DM9621NP6.3 PORT
MAC+swtich集成系列: DM9103EP/DM9013EP;7.网络变压器系列产品:HS123639/HS12361/HS12363有对应工规系列产品;联系任先生E-mail:bab_
(0) axw 发表于 深圳市爱欣文科技有限公司是台湾联杰国际(DAVICOM) 股份有限公司﹑台湾磁威公司等诸多公司长期真诚合作,是IC(芯片)产品在中国大陆总代理商,为我公司更好地于服务客户,提供了可靠的保证增强了后备支持。主营以太网芯片及配套元器件。在产品生产过程中如果贵公司遇到技术上的问题我们可以免费为贵公司提供:1.提供完整的开发资料及强大的技术支援,成熟可靠的产品方案. 2.芯片的数据手册,原理图,驱动. 3.Layoeut(布板指南).4.编程指南.可以提供各种产品方案,由原厂工程师解决各种技术问题.2.应用案例:1) IPSTB(机顶盒):ST系列(、、)+网卡芯片 (DM9000AE/DM9161AE);NEC()+网卡芯片(DM9000AE);2) VOD ; EM8511+DM9000E/DM9000AE;3) DVR: ARM9200+DM9000AE/DM9161AE;4) 工控主板:S3C2410+DM9000AE;5) 有线电视服务器:S3C2410+DM9000AE;6)无线路由器:RDC+DM562AP;7) 门禁机:8051+DM9000AE;8) 税控机:LPC2210+DM9000E;9) 一卡通:LPC2212+DM9000AE;10) 数据采集:ARM9200+DM9616E;S3C4480+DM9000AE;11)液晶广告机:EM8511+DM9000E;12)MID:TCC)+dm9000AEP(DM9000CEP)
rockchip2818+DM9621…………………………………………………..3. 技术支持:1)芯片的数据手册,原理图. 2)Layoeut PCB(布板指南).3) 中文编程指南,原厂FAE解决各种技术问题4)Drives:Linux drive/wince drive/vxworks/neucleus/.c/csos [联系我们]:如需开发资料的请与我联系,谢谢!电话:0 传真:6
地址:深圳南山区高新北区新西路2号东方信息港综合楼5楼503号 联
(0) nihao 发表于 kao

我要回帖

更多关于 网卡驱动异常怎么修复 的文章

 

随机推荐