1. 概念

网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,它使得用户可以通过电缆或无线相互连接。

每一个网卡都有一个被称为MAC地址的独一无二的48位串行号,它被写在卡上的一块ROM中。在网络上的每一个计算机都必须拥有一个独一无二的MAC地址。没有任何两块被生产出来的网卡拥有同样的地址。这是因为电气电子工程师协会(IEEE)负责为网络接口控制器(网卡)销售商分配唯一的MAC地址。

网卡上面装有处理器和存储器(包括RAM和ROM)。网卡和局域网之间的通信是通过电缆或双绞线以串行传输方式进行的;而网卡和计算机之间的通信则是通过计算机主板上的I/O总线以并行传输方式进行。因此,网卡的一个重要功能就是要进行串行/并行转换,由于网络上的数据率和计算机总线上的数据率并不相同,因此在网卡中必须装有对数据进行缓存的存储芯片。

2. DM9000

DM9000芯片是DAVICOM公司生产,DM9000A 是一款完全集成的、性价比高、引脚数少、带有通用处理器接口的单芯片快速以太网控制器。

3. 原理图分析

3.1 引脚

结合DM9000的数据手册,搞清楚各个引脚的作用。

3.2 控制器

将DM9000的所有引脚分析一遍以后发现,大部分的功能引脚都连接到了SOC的SROM/NAND/ONENAND控制器部分

接下来就去主控芯片寻找SROM/NAND/ONENAND控制器部分的讲解内容,对比三个控制器的IO描述可知,当前单板上的DM9000芯片是连接在SOC的SROM控制器上的,那么我们要控制DM9000就要去读写SROM控制器中的寄存器。

3.3 SOC寄存器

针对SROM控制器的寄存器只有两个,SROM_BW和SROM_BCn;S5PV210的SROM控制器支持6个bank,我手上的这个单板,上面的DM9000上的片选引脚是连接在SOC的Xm0CSn1上的,即DM9000连接在bank1上,其对应的寄存器是SROM_BW和SROM_BC1。

4. 代码分析

4.1 启动过程

这里分析的是1.3.4版本的uboot。不同版本的uboot启动主脉络略有区别,感兴趣的可以看我的另一篇博客《uboot启动流程》

uboot在启动过程中,会遍历并执行 init_sequence 数组中的所有函数指针,其中有一个函数指针board_init,该函数中对SROM控制器进行了初始化。

4.2 初始化SROM控制器

board_init 函数实现在uboot/lib_arm/board.c中

int board_init(void)
{DECLARE_GLOBAL_DATA_PTR;
#ifdef CONFIG_DRIVER_SMC911Xsmc9115_pre_init();
#endif
#ifdef CONFIG_DRIVER_DM9000  //要想使用DM9000,这个宏得打开dm9000_pre_init();      //----->
#endifgd->bd->bi_arch_number = MACH_TYPE;gd->bd->bi_boot_params = (PHYS_SDRAM_1+0x100);return 0;
}
----------------------------------------------------------------------------------
static void dm9000_pre_init(void)
{unsigned int tmp;
#if defined(DM9000_16BIT_DATA)  //原理图中使用了16根数据线SROM_BW_REG &= ~(0xf << 4);  //设置 SROM_BW 寄存器,前面有分析到SROM_BW_REG |= (1<<7) | (1<<6) | (1<<5) | (1<<4);
#else     //不成立SROM_BW_REG &= ~(0xf << 4);SROM_BW_REG |= (0<<6) | (0<<5) | (0<<4);
#endif//设置 SROM_BC1 寄存器,前面有分析到SROM_BC1_REG = ((0<<28)|(1<<24)|(5<<16)|(1<<12)|(4<<8)|(6<<4)|(0<<0));tmp = MP01CON_REG;tmp &=~(0xf<<4);tmp |=(2<<4);MP01CON_REG = tmp;
}

4.3 DM9000驱动分析

DM9000相关的功能代码在uboot/drivers/net/dm9000x.c中,在该文件中提供了对DM9000的初始化、读写、控制等各种接口,而且这些接口都被声明为全局函数,所以其它的功能模块可以直接调用。

以网络功能中最常用的Ping命令为例

do_ping()                          //在net/net.c中实现--->NetLoop(PING)              --->eth_init(bd)           //在drivers/net/dm9000x.c中实现,该函数的功能是初始化DM9000芯片--->PingStart()            //在net/net.c中实现--->PingSend()--->ArpRequest()--->eth_send()   //在drivers/net/dm9000x.c中实现,通过控制DM9000间接发送信息    

附录:SROM和光纤连接器

1. 简单介绍一下 SROM 哈!SROM 是高速存储器,Cache 技术就是通过在 DROM 和 CPU 之间插入一小块 SROM 来减小 CPU 和存储之间的速度差异的。SROM是SRAM和ROM的总称

2. 光纤连接器长下面这样:

网卡驱动DM9000-基于uboot相关推荐

  1. 移植网卡驱动DM9000

    移植DM9000 移植 编译 解决错误 2.1 头文件不对 :去掉或改名 2.2 宏不对 :改名使用新宏 2.3 有些函数没有了 :改名使用新函数 移植前的试验 -之前移植的3.4.2内核是否已经具有 ...

  2. linux gianfar 网口驱动源码,基于MPC8313ERDB平台的Marvell88E1111型网卡驱动移植(uboot+kernel)...

    最近一个月挣扎于千兆网的设备驱动移植,现在终于弄出来了,虽然有点累但是收获还是挺多的. 进入主题前,首先要感谢网友gorilla0123,他的博客给了我很多启发,在此非常感谢.我建议做网卡驱动这方面的 ...

  3. linux网络-网卡驱动分析(基于imx6ul和ZYNQ分析)

    0.说明 内核网络驱动总结,从设备树到内核驱动加载初始化及网卡通信整个流程. 1.环境 1.1 硬件环境 NXP imx6ul 平台 1.2 参考资料 IMX6ULLRM.pdf   22 章 10/ ...

  4. linux 网卡驱动分析,基于linux下网卡驱动分析及实现技术研究

    摘    要 Linux技术是当前计算机技术中最大的一个热点,在我国以及全世界得到了迅猛的发展,被广泛的应用于嵌入式系统.服务器.网络系统.安全等领域.从而使得掌握在 Linux环境下的开发技术,成为 ...

  5. (一)mini2440网卡驱动dm9000之dm9000_probe分析

    2012-04-07 02:05:48|  分类: 跟着国嵌学arm|举报|字号 订阅 /*首先我们必须知道probe函数什么时候调用.其实在平台设备驱动注册的时候,内核会在平台设备总线上去遍历所有的 ...

  6. [xhr4412][extension 4] u-boot-2020.07 DM9621 网卡驱动移植

    文章目录 一.前言 二.硬件环境 1. Exynos4412 (USB 2.0 Host Controller) 2. USB3503 (USB HUB) 3. DM9621 (USB Device) ...

  7. 基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通

    基于linux2.6.30.4内核的DM9000网卡驱动编译成模块成功ping通 最近有个学生毕业设计需要实现基于ARM的DM9000网卡通信,但是linux2.6.30.4内核已经把DM9000网卡 ...

  8. 以太网卡驱动程序移植linux,基于S3C2440的DM9000网卡驱动的移植

    摘  要: 主要研究了基于Linux内核的网卡驱动的移植.Linux网络设备驱动程序的体系结构可以分为4层,首先分析了各层的具体功能实现,并在此基础上充分利用S3C2440开发板完成DM9000网卡驱 ...

  9. linux 内核 网卡驱动 移植,linux内核移植步骤添加dm9000网卡驱动(设备树).docx

    linux内核移植步骤添加dm9000网卡驱动(设备树).docx LINUX内核移植步骤2015年05月13日星期三上午1105往设备树中添加网卡驱动1.选平台,指定交叉编译工具链1.在MAKEFI ...

  10. 在rk3328上从零构建ubuntu16.04系统系列(1):sdk的环境配置和编译与uboot的网卡驱动配置

    如果有问题,请加QQ群 891339868 进行交流 当前的项目是基于RK3328的硬件方案,安装ubuntu16.04系统,现在基本上告一段落,现在将这个过程记录下来,以备以后查阅,今天先描述一下怎 ...

最新文章

  1. ASP.NET MVC 4 中的JSON数据交互总结
  2. maven 主工程 java_Maven创建Java Application工程(既jar包)
  3. 详解线程本地变量ThreadLocal
  4. eas库存状态调整单不能反审核_订单少了,库存多了,利润没了……
  5. jetty java 禁用目录列表_java – 如何禁用Jetty的WebAppContext目录列表?
  6. VC2010打开资源视图时提示“指南必须指定类型”,.rc资源文件损坏(转)
  7. linux设备树sysfs,迅为-iMX6开发板-设备树内核-sys方式控制GPIO
  8. eclipse maven 插件的安装和配置
  9. 文献基础知识、ISI、SCI、JCR
  10. 项目管理过程标准及绩效考核
  11. MySQL创建商品入库和出库后库存更新的触发器
  12. java uml模型图 常见图形含义_uml图六种箭头的含义
  13. PTA 六度空间 思路分析及代码解析
  14. 当AI有了“自由意志”
  15. 手机触屏特效Java_手机触屏触摸特效javascript-TouchSwipe(依赖于jquery库)中文说明...
  16. Java身份证处理工具
  17. 电脑麦克风可以录音但总有沙沙的声音如何解决
  18. (七)Java垃圾收集器详解
  19. 华为ENSP之MPLS V HubSpoke架构
  20. 用原生JS实现网页调用系统自带的分享功能

热门文章

  1. miui kindle安装目录
  2. vmware fusion个人版
  3. 电容屏物体识别_浅谈多点电容屏物体识别,实物识别技术
  4. 产品经理如何写出一看就想约的简历
  5. 免费搭建无限容量个人网盘
  6. 如何将时间字体LED化(类似电子表)显示
  7. 苹果id被停用_三招解决Apple ID停用问题
  8. python如何打开文件选择框_python文件选择对话框的操作方法
  9. DTCC大会归来感想
  10. #微积分#正项级数收敛性判别方法