S3C6410 DDR

以nand flash启动,则,nand flash 前 8K 的内容就会被原原本本的(硬件自动)复制到 6410 片内
    8K 内存中,且被映射到 0x0 地址中,然后从 0 地址开始运行。(ARM 的 CPU 都这样)
    
    当程序大于 8K 时,就得用DDR(需要初始化 DRAMC 和 DDR )。启动时吧全部程序复杂到DDR里面。
    
问题:DDR共128MBYTE,那,把程序复制到DDR哪里?
    答:复制到链接地址。
    
    
一个程序分为3段:
            1.代码段:指令
            2.数据段:有初始值并且初始值不等于零的全局变量、静态变量。
            3.BSS段:初始值为零或无初始值的全局变量、静态变量。
            
二进制文件中不包含BSS段。

总结:
    1.程序运行时,“应该”位于它的链接地址
    2.由硬件决定了,一上电,则程序被复制到片内8K里面,从0x0开始运行。而又由
        于程序大于8K,所以需要用到DDR,因此需要重定位,前面一小段代码把程序复制
        到DDR上它对应的链接地址(这里的前一段代码作用有两个:一是重定位,二是把程序代码复制到对应DDR的链接地址上然后清零BSS段)。
    3.那为何前面一小段代码能够正确运行?因为这一段代码是用位置无关码写的
        位置无关码:
                1)跳转用b,bl这些相对跳转指令
                2)不用全局变量,静态变量。
                
    
从原理图上看出DDR由15条地址线链接,能访问2的15次方(即32k)个地址。

怎么访问DDR?
        1.初始化 DRAMC (动态内存控制器)
                        1)地址线的设置(行/列地址)
                        2)位宽
                        3)设置时序(时间参数)
        2.初始化 DDR

        
不会设置,需查找网络资源。

你可能感兴趣的:(s3c6410,DDR)