学习笔记 --- DM9000网卡原理与基地址设置
2014-03-30 15:54
267 查看
前面有文章分析了网卡也是属于类内存总线的设备,类内存总线的设备有地址总线和数据总线,先来看下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 设置中断号(看中断接口)
从上面可以看出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 设置中断号(看中断接口)
相关文章推荐
- 学习笔记 --- DM9000网卡原理与基地址设置
- solaris学习笔记4:配置网卡地址
- 逆向工程核心原理学习笔记(十八):栈帧5:设置add()函数的局部变量(x,y)
- git学习笔记 -- day01 原理、安装、工作流程、三种装态、设置个人信息
- 移植u-boot学习笔记8-----修改代码之支持DM9000网卡
- 逆向工程核心原理学习笔记(二十三):栈帧10:设置返回值,删除栈帧&main()函数终止
- 黑马程序员---C语言学习笔记之变量地址获取及存储原理
- 逆向工程核心原理学习笔记(四):检索API方法2-设置断点
- 逆向工程核心原理学习笔记(十五):栈帧2:设置局部变量
- C/C++中关于地址、指针和引用变量的学习笔记(五) : 指针
- C/C++中关于地址、指针和引用变量的学习笔记(八) : 命令行参数
- C/C++中关于地址、指针和引用变量的学习笔记(十) : 引用型变量
- git学习笔记(二) git的一些设置和辅助功能
- Flex 学习笔记 Tree的ICON设置资料收集
- OSG学习笔记24——根据鼠标平移的位置正确设置物体平移量
- ASP.net(1.1)原理学习笔记--第五章 诊断和错误处理
- Maven学习笔记(五)设置HTTP代理
- SpringBoot学习笔记(3) Spring Boot 运行原理,自动配置
- 孙鑫VC学习笔记:第十三讲 WM_FILE_NEW消息响应原理
- 操作系统精髓与设计原理学习笔记一:计算机系统概述