tiny6410裸机实验第5章--------------DDR(初始化原理)

时间:2021-01-27 03:54:59

【说明】

                前面我们介绍了地址相关的一些概念以及地址无关码的概念,我们知道了,当程序超过了8KB的时候,我们得把程序复制到DDR中运行,但是,DDR要使用是要先初始化的。6410带有DRAM控制器,它在初始化之后可以让我们对DDR的访问变得十分方便。。。这里我们要初始化2个东西,也就是DRAM控制器,以及DDR本身。在这之前,大家如果对于DDR参数不太熟悉,可以看看这篇文章哦!http://hard.zol.com.cn/2004/0330/90618.shtml

 

【怎么初始化】

                在S3C6410芯片手册中,第5章开头直接给出了初始化DRAM控制器和初始化DDR的步骤!!一步一步来绝对没错的!,先从DRAM控制器开始。

 

【初始化DRAM控制器】

                 直接上芯片手册中的初始化顺序图,然后一步一步介绍

           tiny6410裸机实验第5章--------------DDR(初始化原理)

 

               1】进入配置状态

                          它说往某某寄存器写入100(二进制),那我们就得先看看这寄存器是干什么的。。

                           tiny6410裸机实验第5章--------------DDR(初始化原理)

                             哦!原来就这3位是有用的!二话不说,第一步理解了。


                 2】配置时序

                           1)刷新周期

                            这一步十分关键,我们要告诉控制器我们使用的DDR的一些参数。如果参数设置不对,控制器按这参数来操作DDR肯定是不对的。

                            一路找下面,我们发现在一堆配置寄存器后面出现了一个刷新周期寄存器

                            tiny6410裸机实验第5章--------------DDR(初始化原理)

                            什么是刷新周期呢? 其实我们DDR并不能一直保持数据,它需要每隔一段时间充一下电来维持数据。这个间隔就是刷新周期。 

                             那我怎么知道刷新周期是多少呢?

                             不同DDR不一样 所以要看DDR的手册。。一般DDR手册开头就有介绍,比如我的手册《K4X1G163PC - L(F)E/G》

                             tiny6410裸机实验第5章--------------DDR(初始化原理)

                             那我们如何设置才能得到7.8us的刷新周期呢?还记得我们的时钟初始化吗,HCLK我们初始化成133MHZ,而DDR用的就是这个时钟,我们来算一下

                             一秒钟是133MHZ那一个时钟周期就是1 / (133 * 10^6) 秒,也就是1 / 133 us,那我们需要7.8us就是7.8 /(1 / 133) 个周期啦哈哈

                            代码中用纳秒,原理一样

                             

                            2)延迟寄存器

                            就在刷新周期寄存器下边我们又看到一个CAS,延迟寄存器。

                            tiny6410裸机实验第5章--------------DDR(初始化原理)

                           这个又是干什么的呢?CAS就是指当发出写命令后要延迟多少周期再去读取数据,从第0位我们默认为0,而【1:3】 我们就要看DDR手册了。

                           tiny6410裸机实验第5章--------------DDR(初始化原理),还想什么,它叫我们写成3!

                          3)其他参数

                           和上边一样,一路配置下来,只要看到什么参数,就把参数的名字往DDR手册里一复制查找,,里边写什么你就配置成什么就可以啦,没有的就无视咯

                

                3】属性设置

                          这一步需要配置这个寄存器

                     tiny6410裸机实验第5章--------------DDR(初始化原理)

                      1)设置列地址数,

                         tiny6410裸机实验第5章--------------DDR(初始化原理)

                       2)设置行地址

                           tiny6410裸机实验第5章--------------DDR(初始化原理)

                            tiny6410裸机实验第5章--------------DDR(初始化原理)

                          那我怎么知道列地址数呢,,看DDR的手册!看到这里了,明显了吧!

                       tiny6410裸机实验第5章--------------DDR(初始化原理)

                         3)设置自动预充电地址

                            tiny6410裸机实验第5章--------------DDR(初始化原理)

                             一看就知道又要看DDR手册。。。。在这里看到没,,A10!!!!!! 

                            tiny6410裸机实验第5章--------------DDR(初始化原理)

                        4)设置内存突发长度

                             tiny6410裸机实验第5章--------------DDR(初始化原理)

                             在DDR手册中有这么些值,,都可以取的

                             tiny6410裸机实验第5章--------------DDR(初始化原理)

                     4】依旧是属性设置

                               因为内存比较复杂,所以用一个32位的寄存器去设置不够,所以还有个寄存器也要设置,看名字就知道和刚才寄存器是兄弟了

                              tiny6410裸机实验第5章--------------DDR(初始化原理)

                             1)设置存储长度

                                tiny6410裸机实验第5章--------------DDR(初始化原理)

                               6410是32位机器,所以就是01了

                              2)设置DDR类型

                                 tiny6410裸机实验第5章--------------DDR(初始化原理)

                                    可别告诉我你找不到你的是哪种DDR。。。。。。。。看DDR芯片手册的最大的标题tiny6410裸机实验第5章--------------DDR(初始化原理)

                                   tiny6410裸机实验第5章--------------DDR(初始化原理)

                 4】设置芯片

                            tiny6410裸机实验第5章--------------DDR(初始化原理)

                                     1)设置地址组织方式:

                                          tiny6410裸机实验第5章--------------DDR(初始化原理)   

                                           DDR芯片手册上哪里有说明呢?其实这张图我们见过的,如下,显然是BRC模式,也就是1

                                             tiny6410裸机实验第5章--------------DDR(初始化原理)

 

【初始化DDR自身】

                        其实现在DDR控制器就可以往DDR发东西了,但是根据手册上的说明,其实DDR控制器还没有设置好,只不过在设置DDR控制器的中间是要先初始化一下DDR自身的,所以在这里我们就来初始化DDR,初始化好了之后,我们再继续初始化DDR控制器剩下的部分内容。

                        S3C6410手册上给出了初始化DDR的办法!!,一目了然,我的是DDR所以选这个

                        tiny6410裸机实验第5章--------------DDR(初始化原理)

                                             

                        1】寄存器

                                            就是一次又一次往下面这个寄存器写数据就可以啦,,上边叫我们写什么我们就写什么咯哈哈!

                                   tiny6410裸机实验第5章--------------DDR(初始化原理)

 

【继续DDR控制器】

                                1】设置就绪

                                           现在什么都配置好了,就直接把状态寄存器配置成"REDAY“

                                           tiny6410裸机实验第5章--------------DDR(初始化原理)

                              2】查询是否就绪

                                            现在就等待它就绪就可以了

                                             tiny6410裸机实验第5章--------------DDR(初始化原理)

                                              查看最低2位,知道变为01

                                              tiny6410裸机实验第5章--------------DDR(初始化原理)