找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2860|回复: 7

极致电子-RK3288开发板开源项目之-DDR如何实现2GB内存访问

[复制链接]

27

主题

74

回帖

953

积分

版主

积分
953
发表于 2015-10-12 09:37:28 | 显示全部楼层 |阅读模式

高速电路PCB网,专注于嵌入式方案,信号完整性和电源完整性仿真分析,高速电路PCB设计,各种EDA工具(Cadence\Mentor\\AD\\CAM\ANSYS HFSS)交流学习。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如题:如何实现RK3288可以访问2GB内存;
原理是什么?

379

主题

518

回帖

3780

积分

管理员

积分
3780
发表于 2015-10-12 11:47:24 | 显示全部楼层
首先要明确一个概念,那就是DDR的存储容量的问题:    1、为了大家不在容量上混淆概念,先明确一下单位 1个byte=8个bit。

    2、通常说的8位data线和16位data线和DDR3标的容量有没有直接关系? 应该说是没有。data线最终影响的只是单次放入数据的位数,
         一次不够可以多放几次(不过需要时间)。通过一个大门想放入总共32个人到客厅,一次只能过8个还是16个,不影响客厅的容量。
                 所以说一个DDR标的容量是512Mbyte还是1Gbyte,那实际就是这么多。
    3、那什么和DDR的容量有直接关系呢:这里有3个概念:
               一)个是DDR内部的存储单元,Bank的概念。为什么要有Bank,个人觉得和DDR
         的制造代价有关系吧,如果整个DDR就是一个Bank,那如果其中有一点点损坏,那整个DDR就坏了,如果缩小,做几个小Bank,那从
         产品良率来说,肯定是更高。存储单元之间就像矩阵一样。如果是地址中有三个BA,即三个Bank Address,BA0, BA1, BA2。
           所以是8个bank.
               二)是 行列选择。由上面的存储单元可知,矩阵的选择,无非是行列选择,行号,列号。确定之后就可以定住一个单元。比如地址线
        A0~A14,那行选择就有2的15次方个,列选择看每个芯片的自己定义,比如普遍使用A0~A9,那就有2的10次方个。

              如上的说法,一个8BanK,行列地址分别为2^15 和2^10 的总存储单元为 8*(2^15)*(2^10)== 256M个单元,这个M是数量单位。
              存储单元的数组大小,如一次可以存入8bit数据,或者16bit数据,颗粒数据线的宽度决定了存储单元单次存储的数组大小。
       那16bit的DDR颗粒,当bank ,行列信息都确定之后(如上举例),他的容量就是256M*(16/8)==512Mbyte   

              三)是page size的说法:用data sheet里面的说明如下:
                   Page size is the number of bytes of data delivered from the array to the internal sense amplifiers when an ACTIVE command is registered.
               Page size is per bank, calculated as follows: page size = 2 COLBITS * ORG/8
               where, COLBITS = the number of column address bits, ORG = the number of I/O (DQ) bits

              page size==(2^10 * 8)/8=1Kbyte 针对8bit位宽DDR来说。
              page size==(2^10 *16)/8=2Kbyte 针对16bit位宽DDR来说。
                     所以看出page size 是以byte 为单位的说法。
        4、CPU如何与DDR相互响应,这里指的是容量的映射方面:如果CPU的data数据宽度是32bit,那此时可以使用一个单独32bit宽度的DDR颗粒
              也可以使用2个16bit的颗粒拼合,在CPU这端看去,它不管,它依旧认为自己每次都是访问32bit的宽度的内存,每次4个byte。
                   给出的地址也是bank选择,然后行列信息。这样不管是你使用两个DDR颗粒还是一个DDR颗粒,都同样收到对应的单元位置信息,这个时候
             DDR直接存入从CPU给的数据信息就可以了(不管是单颗还是2颗拼合,2颗的时候无法是有高低字节区分,然后舍弃自己不要的)。 读DDR的               时候也一样。CPU每次看到的都是32bit数据。

这个时候回到题目上来,RK3288使用64bit的数据宽度,那如果使用16bit的DDR颗粒,选取4颗拼合,每颗512Mbyte的容量。然后照着这个容量去选择实际的Bank、行、列信息),就够了。
那这样看来就是:8个bank(BA0~BA2) ,行A0~A14、列A0~A9(行列在管脚走线上公用)。












点评

给力!!!: 5.0 大赞!!!: 5.0
值得一看!!!: 5.0
给力!!!: 5 大赞!!!: 5 值得一看!!!: 5
看完后明了了很多,非常感谢  发表于 2015-10-12 11:55 AM
www.yanfa.tech 站长 ,交流微信QQ 276556668

379

主题

518

回帖

3780

积分

管理员

积分
3780
发表于 2015-10-12 12:11:12 | 显示全部楼层
纯属抛砖引玉,诸位有不同见解的,也可以一起来讨论。
www.yanfa.tech 站长 ,交流微信QQ 276556668

0

主题

8

回帖

28

积分

新手上路

积分
28
发表于 2015-10-12 13:39:15 | 显示全部楼层
干货文章  极致电子-RK3288开发板开源项目之-DDR如何实现2GB内存访问

22

主题

110

回帖

5204

积分

技术专家

积分
5204
发表于 2015-10-12 16:18:06 | 显示全部楼层
请教:
1,有没有32位甚至64位的DDR3内存颗粒?(32位的应该有吧,见过一些单内存颗粒的板子)
2,RK3288的内存总线是64位宽,可不可以只用32位数据地址?

点评

1)32位的有。 64位的我没见过。 2)你说的取其中一个channel 1、 Support 2 channel, each channel 16 or 32bits data widths 2、 Support up to 2 ranks (chip selects) for each channel, totally 4GB(max) ad  详情 回复 发表于 2015-10-13 09:10 AM

379

主题

518

回帖

3780

积分

管理员

积分
3780
发表于 2015-10-13 09:10:35 | 显示全部楼层
any_012 发表于 2015-10-12 16:18
请教:
1,有没有32位甚至64位的DDR3内存颗粒?(32位的应该有吧,见过一些单内存颗粒的板子)
2,RK3288 ...

1)32位的有。 64位的我没见过。
2)你说的取其中一个channel
1、 Support 2 channel, each channel 16 or 32bits data widths
2、 Support up to 2 ranks (chip selects) for each channel, totally 4GB(max) address space,
      maximum address space for one rank of channel 0 is also 4GB, which is
      software-configurable.

看上去是支持的,但是怎么配置,没有找到信息。
www.yanfa.tech 站长 ,交流微信QQ 276556668
发表于 2015-10-19 00:04:19 | 显示全部楼层
关于DDR回复一下我个人的看法:
1.通常说的8位data线和16位data线和DDR3标的容量有没有直接关系?   
   我们平时看DDR的datasheet手册里边DDR的容量基本表示都例如“256M*8bits”。其中256M就是该DDR的存储单元数。
   何为BANK?这里的BANK是指“逻辑BANK”,SDRAM的内部是一个存储阵列(好比硬件开发的EXCEL物料清单)。一个阵列就如同一张表格(比如:表格1核心板物料,表格2底板物料,表格3总体物料)。然后这个表格有行和列确定一个存储单元。这3个物料表格就是我们所说的BANK。
   何为存储单元?就好比是我们EXCEL表格中的单元格,有行和列来确定一个单元格,一个单元格就表示“一个存储单元”。
   何为位宽?术语称为“物理BANK”,就是我们平时所称的“位宽(8bits/16bits)”。就是该单元格中能写入的二进制位数。体现在IC的接口上就是DQ数据总线的位数。
从中可以看出,DDR的存储容量实际上跟位宽是有关系的,但是鉴于容量的表达形式(256M*4bits),意思就是:该工作表(DDR颗粒)有256M个单元格(存储单元),每个单元格(存储单元)可以写入4bits数据。
如何计算?  容量=2^(行数+列数+BANK线数)*4bits/8bits/16bits
2.CPU如何跟DDR相接?
   这个具体需要看该ARM芯片的地址手册和DDR的手册。原三星的2440需要考虑不同位宽的DDR地址线的错位接法。但是现在大部分的ARM芯片已经内存管理器已经在内部做了处理,直接A0--A0即可,一个32bits的DDR可以由2个16位的DDR并联获得,地址线A0-A2,数据线DDR1接ARM的Data0-Data15,DDR2接ARM的DATA16-DATA31,这样每次ARM芯片对于同一地址读取的是两个数据,一个高16位,一个低16位。即组成了32bits的内存颗粒。
备注;实际接法需要考虑BANK,行,列  
个人观点,请各位斧正,Thanks
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

内容正在加载中,请稍候……

QQ|Archiver|手机版|小黑屋|TechAIRD(gaosupcb Inc.)

GMT+8, 2026-8-24 07:48 PM , Processed in 0.076485 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表