前面有文章分析了网卡也是属于类内存总线的设备,类内存总线的设备有地址总线和数据总线,先来看下DM9000的管脚:

从上面可以看出DM9000的地址总线就一根,它不像CS8900那样地址总线和数据总线都齐全。而这里只有一根地址线(CMD),16跟数据线,所以可以确定位宽为16位,而地址线为什么只有一根,这是DM9000决定的,看手册可以知道CPU总线只访问它的两个地址,CMD管脚为0时,数据线送的是DM9000的寄存器地址,CMD管脚为1时,数据线上送的是16位的寄存器数据,所以对DM9000的操作至少需要两步:先写地址,再写(读)数据。他不像其他类内存总线那样直接把数据写到地址传输一次就可以了,而他要传输两次,因为他的总线地址就退化成了类似于NAND的ALE信号,就是地址和数据的区分信号了,而不是DM9000里面操作的寄存器地址。

上面的片选信号为:nLAN_CS,链接到S3C2440的CS4,对应BANK4,所以基地址为0X20000000,网上很多人讨论为什么有的开发板基地址设置为0X20000300,这个是没有任何作用的,之前分析了,DM9000对于CPU的地址线只认识一根线,只要这根线对应的CPU传送的地址的对应位匹配就可以了,上面接到LADDR2,也就是说:

传寄存器地址的时候操作的总线地址满足:

以基地址起头(0x20000000),偏移基地址LADDR2为0(低四位:0000),也就是写的时候总线地址为:0x20000000

传寄存器数据的时候操作的总线地址满足:

以基地址起头,偏移基地址LADDR2为1 (低四位:0100),也就是写的时候总线地址为:0x20000004

所以首先满足总线地址在BANK4里面(这样CS4才能自动选中),其次满足最后四位为0(传送寄存器地址)或4(传送数据)就可以了,满足这两个条件地址随便设。

所以上面0x20000300这个多出的300H没任何意义,他满足上面条件,你设置为0x20000400,0x20000320,0x23456780这些地址都没任何影响。

上面分析知道了基地址,位宽,再简要说下中断引脚:

这里的IRQ_LAN接的是S3C2440的ENT7,用的外部中断7,这个中断用于接收数据时触发的,中断服务函数处理接收数据,向协议层上报接收数据。这个中断号要和驱动里面的对应起来。

DM9000移植的要点:

1 基地址(看CS接口)

2 CPU的寄存器设置:位宽,时序等设置

3  设置中断号(看中断接口)
原文链接:https://blog.csdn.net/wangshuchangfrank/article/details/22588179?utm_source=blogxgwz7

上面的内容是转载的,下面补充本人理解的:

基地址的设置并不一定要0x2000 0000,只要满足在一定范围内,让片选使能;然后LADDR2为0则表示data线上传输的是地址,LADDR2为1表示data线上传输的是数据

主控芯片上面发出的地址,只不过决定了DM9000是否被片选,且ADDR2决定了是传输地址还是数据,仅此而已,而访问DM9000上某个寄存器所需的地址,是在数据线上传输的!!!!!!

在DM9000的厂家驱动程序里面,我们可以看到

     outb(DM9KS_VID_L, iobase); /* DM9000C的索引寄存器(cmd引脚为0) */     这里其实就是写 DM9KS_VID_L (0x28)这个值给DM9000,告诉他是地址(通过把ADDR2拉低的方式)id_val = inb(iobase + 4);  /* 读DM9000C的数据寄存器(cmd引脚为1) */  这里就是读取数据了(iobase + 4 表示传输的是数据),读出来到 id_val      这在第二个视频第二分钟的时候有讲到outb(DM9KS_VID_H, iobase);id_val |= inb(iobase + 4) << 8;outb(DM9KS_PID_L, iobase);id_val |= inb(iobase + 4) << 16;outb(DM9KS_PID_H, iobase);id_val |= inb(iobase + 4) << 24;

读DM9000上的寄存器的步骤如下:

把要读取的寄存器地址写到“索引寄存器”里面,然后再读数据寄存器。(怎么分辨操作的是索引寄存器还是数据寄存器呢?通过ADDR2的状态来决定)

CMD引脚一般都是接到主控的ADDR2引脚,包括DM9000的厂家程序也是默认如此,所以我们才不用改,如果我们不是把CMD接到ADDR2,而是ADDR1,那 iobase +4 就得改成 iobase + 2 了,但一般没有硬件工程师这么干,而是参照芯片厂家给出的参考电路图去设计的,所以大多数的开发板也都把主控的ADDR2接到DM9000的CMD引脚。

学习笔记 --- DM9000网卡原理与基地址设置相关推荐

  1. DM9000网卡原理与基地址设置

    从上面可以看出DM9000的地址总线就一根,它不像CS8900那样地址总线和数据总线都齐全.而这里只有一根地址线(CMD),16跟数据线,所以可以确定位宽为16位,而地址线为什么只有一根,这是DM90 ...

  2. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  3. TI CC1101学习笔记:工作原理简单入门

    众所周知,在IOT的市场应用中,从通信协议细分的话,有SUB-1G,2.4G,3G, 4G,以及最新推出的5G,虽然5G通信协议已经在崭露头角,但是不同的通信协议在不同的应用领域之中还是占据着一定的重 ...

  4. LINUX学习笔记1 网卡配置(网络适配器安装失败问题解决)

    LINUX学习笔记1 网卡配置(网络适配器安装失败问题解决) 概述 每一次选修课总会碰到一堆问题,我真的是幸运得很.这次是LINUX服务器管理这门课,最开始安装虚拟机一切正常(用的是VMware安装u ...

  5. 华为HCIA-datacom 学习笔记11——AAA原理与配置

    华为HCIA-datacom 学习笔记11--AAA原理与配置 AAA原理与配置 1.AAA概述 认证(authentication):验证用户是否获得访问权,确定哪些用户可以访问网络 授权(auth ...

  6. Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数

    16_采用SharedPreferences保存用户偏好设置参数 Android学习笔记---16_采用SharedPreferences保存用户偏好设置参数 2013-03-08 16_采用Shar ...

  7. oracle查询大小写敏感参数,【学习笔记】Oracle 11G密码大小写敏感的设置方法 sec_case_sensitive_logon参数...

    天萃荷净 分享一篇Oracle数据库密码大小写敏感设置案例,从11.1开始密码大小写敏感了,同时可以设置sec_case_sensitive_logon参数可以忽略大小写敏感(USER$.SPARE4 ...

  8. Linux内核学习笔记之网卡驱动的详细分析:RTL8139

    学习应该是一个先把问题简单化,在把问题复杂化的过程.一开始就着手处理复杂的问题,难免让 人有心惊胆颤,捉襟见肘的感觉.读Linux网卡驱动也是一样.那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏 ...

  9. Sqlite学习笔记(四)SQLite-WAL原理(转)

    Sqlite学习笔记(三)&&WAL性能测试中列出了几种典型场景下WAL的性能数据,了解到WAL确实有性能优势,这篇文章将会详细分析WAL的原理,做到知其然,更要知其所以然. WAL是 ...

  10. 漏洞学习笔记——堆溢出原理

    最近在学习堆的溢出原理,但是查了网上和书上的一些讲解,总是感觉缺少一些关键点.所以理解起来总是有点晕,经过努力的调试分析后,总结了下面的更为详细的堆溢出原理.如果不准确的地方,希望大佬可以提醒一哈~ ...

最新文章

  1. hdu 5019 第k大公约数
  2. elasticSearch6源码分析(5)gateway模块
  3. VTK:vtkBandedPolyDataContourFilter用法实战
  4. Opencv——DFT变换(实现两个Mat的卷积以及显示Mat的频域图像)
  5. Java对象的序列化
  6. OJ1025: 最大字符
  7. 数据结构:五岔路口交通管理红绿灯设计
  8. 做工作流时候 Mybatis 在 insert 之后想获取自增的主键 id,但却总是返回1
  9. Echarts数据可视化特效散点图点动态闪烁效果
  10. Tomcat是怎么工作的(1) -- 开篇
  11. mysql中regexp用法_mysql 中查询语句表达式REGEXP用法
  12. 人行横道——步行管理(交通运行管理)
  13. Linux版本怎么设置指纹,Linux上使用Thinkpad指纹识别
  14. Linux命令对应的英文及整体学习法
  15. Python实现PU口袋活动更新提醒
  16. python迭代器定义_Python-迭代器相关概念
  17. Excel实现数据可视化
  18. NetSuite2.0 Restlet脚本 货品新增
  19. 数据库系统概论整理(Part Ⅰ)
  20. 三年级计算机画图工具教案,小学三年级信息技术教学设计《画图》

热门文章

  1. 语法分析器实现过程(java)
  2. 卡西欧计算机能开根号吗,考研计算器怎么开根号
  3. 磁带机技术的应用解析
  4. mysql front 垃圾_MySQL_Front 的缺点
  5. Word 电子签名简单制作方法
  6. java学生奖学金管理系统_java毕业设计_springboot框架的高校学生奖学金评定系统...
  7. java计算机毕业设计网上书店商城源码+系统+数据库+lw文档+mybatis+运行部署
  8. chrome 截长图功能
  9. android 高仿国美,iOS高仿国美、二次元应用、点赞喷射动画、电影筛选页等源码...
  10. 微导管行业调研报告 - 市场现状分析与发展前景预测