移植u-boot-2010.09到S3C2440(六)—— SDRAM地址与容量的计算(转)

来源:互联网 发布:js只允许输入数字 编辑:程序博客网 时间:2024/05/17 18:03

唉,我还是算错了。。。


对于 GEC2410 开发板,SDRAM 的物理起始地址是 0x30000000,结束地址是 0x34000000,大小是
64Mbytes。

我有个疑问?为什么SDRAM 的物理起始地址是 0x30000000,结束地址是 0x34000000,得出的大小是
64Mbytes?

因为容量是用10进制显示的,故我们得把0x34000000-0x30000000=0x4000000转换成10进制。(转换方法见附)

4*16^6+0*16^5+0*16^4+0*16^3+0*16^2+0*16^1+0*16^0=67108864(Byte)

一般不要用十六进制转成二进制,二进制转成10进制方法算那个比较麻烦:

0x4000000=0100 0000 0000 0000 0000 0000 0000(B) 转成10进制就是 1*2^26+0*2^25+0*2^24+0*2^23+0*2^22+0*2^21+0*2^20+0*2^19+0*2^18+0*2^17+0*2^16+0*2^15+0*2^14

+0*2^13+0*2^12+0*2^11+0*2^10+0*2^9+0*2^8+0*2^7+0*2^6+0*2^5+0*2^4+0*2^3+0*2^2+0*2^1

+0*2^0=67108864(Byte) 注意权值是从0开始的。

67108864/1024(变成K)/1024(变成M)=64M

注:规定与传输速度有关的“B”一般指的是“Bit”;与容量有关的“B”一般指的是“Byte”。

***********************************************************************************************************************************

附:十六进制转换成十进制的方法

十六进制数转换成十进制数

2进制,用两个阿拉伯数字:0、1;

8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;

10进制,用十个阿拉伯数字:0到9;

16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?

 

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。

十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……

所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。

假设有一个十六进数 2AF5, 那么如何换算成10进制呢?

用竖式计算:

2AF5换算成10进制:

第0位: 5 * 160 = 5

第1位: F * 161 = 240

第2位: A * 162 = 2560

第3位: 2 * 163 = 8192 +

-------------------------------------

                 10997

直接计算就是:

5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997

(别忘了,在上面的计算中,A表示10,而F表示15)

 

现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。

假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式:

1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100

***********************************************************************************************************************************



原创粉丝点击