• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : mini210/tiny210 DM9000AEP 物理地址怎么得到的 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 30988
精华: 0
发帖: 35
金钱: 175 两
威望: 35 点
综合积分: 70 分
注册时间: 2010-10-24
最后登录: 2015-10-22
楼主  发表于: 2012-03-30 10:55

 mini210/tiny210 DM9000AEP 物理地址怎么得到的

在mach-mini210.c中有:
#define S5PV210_PA_DM9000_A    (0x88001000)
#define S5PV210_PA_DM9000_F  (S5PV210_PA_DM9000_A +0x300c)

地址是怎么得来的?????!尤其是多出的0x1000,很费解??
还有资源的物理地址大小是怎么确定的呢?为什么是4k大小呢???
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
1楼  发表于: 2012-03-30 11:19
可以看看原理图,并结合CPU数据手册memory那一章
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2012-03-30 13:09

 回 楼主(elediy) 的帖子

通过原理图可以看到DM9000接在CPU memory controller的Xm0CSn1片选信号上;
通过S5PV210的用户手册可以看到Xm0CSn1对应的地址范围是0x88000000 ~ 0x8FFFFFFF. 后面的0x1000加不加我觉得是没有意义的,只要是在这个地址范围就可以。
S5PV210_PA_DM9000_F里面的0x300C偏移是为了满足DM9000 Command/Data地址切换(由连接的Xm0ADDR2 pin决定)加上的。
更多这方面的信息可以参考http://blog.csdn.net/liukun321/article/details/7315098
"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: 69850
精华: 1
发帖: 24
金钱: 170 两
威望: 34 点
综合积分: 68 分
注册时间: 2012-05-12
最后登录: 2012-11-30
3楼  发表于: 2012-09-09 20:58
http://bbs.elecfans.com/forum.php?mod=viewthread&tid=201808

这个帖子里面的理解是否更准确些?

0x88001000 -> 0x88000000
0x88001000 + 0x300c -> 0x88000004

最后实际起作用的地址就是 0x88000000 和 0x88000004 这2个。
另外 .end 只需要 多加 3 个字节,能够 ioremap 即可。

还没做实验验证,只是理论推理,不知是否正确,请指教。
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2012-09-09 21:45

 回 3楼(limingth) 的帖子

是的
"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: 69850
精华: 1
发帖: 24
金钱: 170 两
威望: 34 点
综合积分: 68 分
注册时间: 2012-05-12
最后登录: 2012-11-30
5楼  发表于: 2012-09-10 17:00
今天做了实验,验证了如下结论:

1. 0x88001000 改为 0x88000000
2. 0x300c 改为 0xC
3. .start 和 .end  一样,原来的 +3, +2, 甚至是 相同 (+0)

以上3个修改,都可以驱动 DM9000 网卡工作,上述理论理解正确。

但是 0xC 如果改为 0x4 就不能工作,说明这里面和 ADDR3 也有关系,但从原理图上只有 ADDR2 的关联,

在这个问题上,仍然无法解释原因。 原来友善之臂的代码,搞不懂为啥要 + 0x1000 和 0x300C
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
6楼  发表于: 2012-09-10 17:42
但是 0xC 如果改为 0x4 就不能工作,说明这里面和 ADDR3 也有关系,但从原理图上只有 ADDR2 的关联,

如果改成0x8呢?
"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: 69850
精华: 1
发帖: 24
金钱: 170 两
威望: 34 点
综合积分: 68 分
注册时间: 2012-05-12
最后登录: 2012-11-30
7楼  发表于: 2012-09-11 10:24
高手果然是高手,0x8能工作,0xC也能,但0x4不能。
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
8楼  发表于: 2012-09-11 19:42
引用第7楼limingth于2012-09-11 10:24发表的  :
高手果然是高手,0x8能工作,0xC也能,但0x4不能。

也许友善之臂得更新一下他们的原理图了
"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: 69850
精华: 1
发帖: 24
金钱: 170 两
威望: 34 点
综合积分: 68 分
注册时间: 2012-05-12
最后登录: 2012-11-30
9楼  发表于: 2012-09-15 08:46
刚开始我也认为是友善原理图的问题,为此还和 mindee 进行求证,是不是接了 ADDR3 。

后来仔细阅读芯片手册,才发现是一个 bit 位的问题。

2.4.1.1  SROM Bus Width & Wait Control Register

AddrMode1  [5]  Select SROM ADDR Base for Memory Bank1
0 = SROM_ADDR is Half-word base address.  
(SROM_ADDR[22:0] <= HADDR[23:1])

1 = SROM_ADDR is byte base address  
(SROM_ADDR[22:0] <= HADDR[22:0])
Note: When DataWidth1 is “0”, SROM_ADDR is byte base
address. (Ignored this bit.)
0
DataWidth1  [4]  Data bus width control for Memory Bank1
0 = 8-bit    
1 = 16-bit
0

原来的设置是 [5] = 0  [4] = 1,把 [5] = 1  [4] = 1 就解决了。
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go