关于国嵌 实验2.5 网卡驱动移植 网卡地址 的问题
来源:互联网 发布:软件开发费用标准 编辑:程序博客网 时间:2024/05/22 19:12
实验2.5 网卡驱动移植 网卡地址等几个宏的数值怎么得到的
实验2.5 网卡驱动移植中有几个宏#define CONFIG_DM9000_BASE 0x20000300
#define DM9000_IO 0x20000000
#define DM9000_DATA 0x20000004
这几个数值代表的地址是从哪里得到的,我翻了MINI2440的原理图和S3C2440的芯片手册没看懂从哪里找网卡的地址,请老师指导一下
国嵌范老师2011-07-02 11:54摘自《国嵌嵌入式标准教材--驱动开发深入班》 DM9000网卡驱动分析
首先,让我们打开arch/arm/mach-s3c64xx目录下的mach-mini6410.c,找出DM9000平台驱动对应的平台设备及资源。下面列出了平台设备资源的情况:
#define S3C64XX_PA_DM9000 (0x18000000)
#define S3C64XX_SZ_DM9000 SZ_1M
#define S3C64XX_VA_DM9000 S3C_ADDR(0x03b00300)
static struct resource dm9000_resources[] = {
[0] = {
.start = S3C64XX_PA_DM9000,
.end = S3C64XX_PA_DM9000 + 3,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = S3C64XX_PA_DM9000 + 4,
.end = S3C64XX_PA_DM9000 + S3C64XX_SZ_DM9000 - 1,
.flags = IORESOURCE_MEM,
},
[2] = {
.start = IRQ_EINT(7),
.end = IRQ_EINT(7),
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_HIGH,
},
};
这里定义了三个平台资源,下标为0和1的资源(后面简称为资源0、资源1…)是IO内存资源,其中资源0的start成员代表的地址S3C64XX_PA_DM9000,也就是0x18000000,是访问DM9000的INDEX端口的地址,而资源1的start成员代表的地址S3C64XX_PA_DM9000+4,也就是0x18000004,则是访问DM9000的DATA端口的地址。DM9000的INDEX端口和DATA端口分别用来写命令和读写数据,要理解为什么能通过这两个地址访问对应的端口,需从tiny6410/mini6410开发板上DM9000与S3C6410的连接关系入手。下面是两者之间的连接示意图:
图 3-4 DM9000与S3C6410的连接关系
DM9000的访问地址主要是由CMD和CS#这两个端口的连接方式来确定的,CS#是DM9000的片选引脚,CMD引脚在芯片手册中描述如下:
CMD pin :
Command Type
When high, the access of this command cycle is DATA port
When low, the access of this command cycle is INDEX port
DM9000的CS#接的是S3C6410静态内存区(物理地址为0x10000000~0x3fffffff)的Bank1片选nCS1引脚(对应起始物理地址为0x18000000),CMD引脚则接的是S3C6410地址总线的Xm0ADDR2位。因此可以确定,DM9000的INDEX端口地址是0x18000000(Xm0ADDR2=0),DATA端口的地址是0x18000004(Xm0ADDR2=1)。
注意: 由上面的分析可以知道,DM9000的寻址仅仅取决于其CMD和CS#两个引脚的接法。也就是说,即使读者要将访问地址改为“0x18000000 + 0x300”(事实上在友善之臂提供的uboot以及其他一些资料中就是用的这个地址),同样能够正常的访问到网卡的INDEX端口。
提示: 确定了DM9000的INDEX和DATA端口地址,我们就有了访问网卡的途径。读网卡寄存器的方法是:先向INDEX端口写入寄存器的地址,再从DATA端口读出该寄存器的值。写寄存器的方法与之对应:先向INDEX端口写入寄存器的地址,再向DATA端口写入值。通过I/O端口读写网卡寄存器的方法在驱动中由ior()、iow()这来两个函数实现。
0 0
- 关于国嵌 实验2.5 网卡驱动移植 网卡地址 的问题
- 关于国嵌 实验2.5 网卡驱动移植 网卡地址 的问题
- 网卡驱动移植 网卡地址计算
- Linux系统移植实验---网卡驱动的移植
- DM9000网卡驱动的移植
- 网卡DM9000的驱动移植
- <五> 网卡驱动的移植
- 关于DM90000网卡驱动问题
- 开发板移植ar9271网卡驱动问题
- 网卡驱动移植成功
- CS8900A网卡驱动移植
- DM9000网卡驱动移植
- cs8900a网卡驱动移植
- DM9000网卡驱动移植
- WIFI网卡驱动移植
- 网卡驱动移植1
- 移植网卡驱动DM9000
- 无线网卡驱动RT73的移植
- jsp的九大内置对象
- [POJ2954]Triangle(计算几何)
- 【MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)
- gyro替换为角度
- 利用ssh反向代理从公网访问局域网内的树莓派
- 关于国嵌 实验2.5 网卡驱动移植 网卡地址 的问题
- 画图板
- android6.0 外部存储设备插拔广播以及获取路径(U盘)
- 数据库设计:物理结构设计
- 51Nod - 1009 数位dp
- 初步了解Java中ThreadLocal
- WordPress函数:bloginfo(显示博客信息)
- GPIO驱动分析 & GPIO使用方法--S5PC110和S5PC210
- 正则表达式30分钟入门教程