主题 : 【求助】dm9000与s3c2440传送数据的问题 复制链接 | 浏览器收藏 | 打印
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
楼主  发表于: 2011-11-11 15:56

 【求助】dm9000与s3c2440传送数据的问题

各位,小弟最近在看《嵌入式应用开发完全手册》书关于网卡dm9000驱动移植部分的章节,有点不明白的地方:
dm9000定义了三个资源,1.dm9000的基地址,2.dm9000的基地址+4,3中断号(代码如下)
static struct resource dm9000_resources[] = {
    [0] = {
        /*Jack:check s3c6410 data sheet we can know that S3C64XX_PA_DM9000=0x18000000*/
        .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,
    },
};
用网卡的连线图也可知s3c6410的地址线ADDR2连接dm9000的cmd,cmd为低电平时传输地址,cmd为高电平时传输数据;
我不明白的是书上P444页:“dm9000的基地址的ADDR2为0,用来传输地址;dm9000基地址+4的ADDR2为1,用来传输数据”这句话是什么意思?什么叫一个地址的ADDR2?
寻求过很多帮助,无果,希望在这有人能帮到我,谢谢!
[ 此帖被wuweidong在2011-11-11 16:03重新编辑 ]
好好学习,天天鲁管
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
1楼  发表于: 2011-11-11 16:00
或者换个问法,比如下面这个函数:
static void
dm9000_reset(board_info_t * db)
{
    dev_dbg(db->dev, "resetting device\n");

    /* RESET device */
    writeb(DM9000_NCR, db->io_addr);
    udelay(200);
    writeb(NCR_RST, db->io_data);
    udelay(200);
}
db->io_addr是dm9000的基地址经过ioremap后的虚拟地址,db->io_data是dm9000的基地址+4 经过ioremap后的虚拟地址;
为什么我要设置dm9000的寄存器时要先把寄存器的地址写到db->io_addr上,再把寄存器的值写到db->io_data上,这其中的依据是什么?
好好学习,天天鲁管
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
2楼  发表于: 2011-11-11 16:04
静静的等候...
好好学习,天天鲁管
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
3楼  发表于: 2011-11-11 16:14
为什么就是要往dm9000的基地址写寄存器地址,往dm9000的基地址+4写寄存器的值呢???
好好学习,天天鲁管
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
4楼  发表于: 2011-11-11 16:43
这是比较合理的解释:
DM9000  MINI2440 功能描述
SD0   DATA0  数据信号
|           |
SD15  DATA15  数据信号
CMD  ADDR2  识别为地址还是数据
INT   EINT7  中断
IOR#   nOE   读命令使能
IOW#  nWE   写命令使能
AEN   nGCS4  片选使能
可以看出连接了16条数据线,1条地址线,而这唯一的一条地址线用于判断数据线传输的是地址还是数据,所以这16条数据线为数据和地址复用
而片选信号使用的BANK4,则访问0x2000 0000 – 0x27FF FFFF这个范围的地址时会激活片选使能信号nGCS4
而在MINI2440提供的内核中,DM9000的地址IO地址为0x2000 0000,数据IO为0x2000 0004
则向地址IO写数据的时候不会激活ADDR2,所以向DM9000传送的数据为地址,而向数据IO写数据的时候会激活ADDR2,所以向DM9000传送的数据为数据

但是还是有不明白的地方:什么叫地址IO和数据IO?
好好学习,天天鲁管
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2011-11-11 17:09

 回 3楼(wuweidong) 的帖子

这是由DM9000决定的。根据DM9000的spec, cmd为低电平时传输地址,cmd为高电平时传输数据, 而6410的ADDR2连的就是这个cmd pin。当6410往dm9000的基地址(0x18000000)写数据时,ADD2就是0x18000000的bit 2, 也就是0, 这样cmd pin就是低,而当往基地址+4 (0x18000004)写入时,ADDR为1, cmd pin为高。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
6楼  发表于: 2011-11-11 19:02

 回 5楼(kasim) 的帖子

明白了!谢谢版主!其实就是一点小小的细节,现在终于恍然大悟了   
好好学习,天天鲁管
畅游在知识的海洋...
级别: 论坛版主
UID: 33629
精华: 4
发帖: 554
金钱: 3075 两
威望: 615 点
综合积分: 1188 分
注册时间: 2010-12-03
最后登录: 2015-09-22
7楼  发表于: 2011-11-11 19:14
再追加的问一下,
是不是只要在0x1800_0000~0x1FFF_FFFF之间任意选两个地址,其中一个的bit2为1,另一个的bit2为0时,
也能达到同样的效果?
好好学习,天天鲁管
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
8楼  发表于: 2011-11-11 19:56

 回 7楼(wuweidong) 的帖子

是的,只要是在对应nGCSx映射地址范围内
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."