新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C6410的DRAM控制器

        S3C6410的DRAM控制器

        作者: 時間:2016-11-20 來源:網絡 收藏
        我們在項目中更換了DRAM,所以需要重新配置S3C6410DRAM控制器,結果發現S3C6410中的DRAM控制器還是挺復雜的。


        S3C6410支持兩個DRAM片選,可以分別接最大256MB的內存,該處理器用的DRAM控制器是來自ARM的PrimeCell Dynamic Memory Controller(PL340)。只看S3C6410的Datasheet中的DRAM部分介紹是不夠的,你還需要看PL340的技術參考文檔,這個文檔網上搜索一下就有了。想完全了解6410的DRAM控制器,必須兩篇文檔都看。我都看了,雖然沒完全了解,但是比看6410的datasheet要強多了。

        我用的是mobile DDR-SDRAM,所以在這里大概介紹一下寄存器及配置流程。先介紹一下寄存器:

        1. DRAM Controller Status Register (Address: 0x7E001000)
        DRAM狀態寄存器,這是一個RO寄存器,用于讀取DRAM的狀態。
        NameBitDescription
        Memory chips[8:7]01=2 chips
        Memory type[6:4]100=MSDR, SDR, MDDR and DDR
        Memory width[3:2]00=16-bit01=32-bit
        Controller Status[1:0]00=config01=ready10=paused11=low-power
        實際上,讀到的有用信息就是Controller Status和Memory width。

        2. DRAM Controller Command Register (Address: 0x7E001004)
        DRAM命令寄存器,設置DRAM的工作狀態。
        NameBitDescription
        Memc_cmd[2:0]000=Go001=Sleep010=Wakeup011=Pause
        100=Configure
        最開始應該配置為0x4,是處于Configure狀態。在配置完所有的DRAM之后,將該寄存器設置為0x0,處于運行狀態。

        3. Direct Command Register (Address: 0x7E001008)
        DRAM命令寄存器,用于發送命令到DRAM和訪問DRAM中的MRS和EMRS寄存器。
        NameBitDescription
        Extended memory command[22]擴展命令,該bit用于連接下面的Memory command[19:18],從而組成DRAM命令
        Chip number[21:20]00=chip_001=chip_110=chip_211=chip_3
        Memory command[19:18]和Extended Memory command組成DRAM命令字
        000=PrechargeAll001=Autorefresh
        010=MRS/EMRS訪問011=NOP
        100=Deep Power Down
        Bank address[17:16]訪問MRS和EMRS的時候,映射為Bank地址位
        Address_13_to_0[13:0]訪問MRS和EMRS的時候,映射為memory address[13:0]
        通過該寄存器初始化DRAM,先設置為NOP模式,然后設置為PrechargeAll進行充電,然后設置EMRS和MRS寄存器,一般是這么一個流程。具體的要參見你所使用的DRAM的datasheet。

        4. Memory Configuration Register (Address: 0x7E00100C)
        DRAM的配置寄存器,這個與需要參照你所使用的DRAM的datasheet。
        NameBitDescription
        Memory burst[17:15]設置Burst大小
        000=Burst 1001=Burst 2010=Burst4
        011=Burst 8100=Burst 16
        Stop_mem_clock沒有訪問時,Memory Clock自動停止
        Power_down_prd[21:20]自動掉電所需的時鐘周期
        AP bit[19:18]0=Address bit 101=Address bit 8
        Row bits[17:16]行地址
        000=11 bits001=12 bits010=13bits
        011=14 bits100=15bits101=16bits
        Column bits[13:0]列地址
        000=8 bits001=9 bits010=10 bits
        011=11 bits100=12 bits
        該寄存器肯定是要配的,看看DRAM的datasheet就知道了。

        5. Refresh Period Register (Address: 0x7E001010)
        DRAM的刷新頻率寄存器,用于配置刷新頻率的。
        NameBitDescription
        Refresh period[14:0]多少個Memory的時鐘周期

        6. CAS Latency Register (Address: 0x7E001014)
        DRAM的CAS延時寄存器,一定要配,參考DRAM的datasheet。
        NameBitDescription
        CAS Latency[3:1]CAS延時多少個時鐘周期
        CAS half cycle[0]0=0周期偏移1=半周期偏移
        對于MDDR和SDR只能設置為0

        7. t_dqss/t_mrd/t-ras/t_rc/t_rcd/t_rfc/t_rp/t_rrd/t_wr/t_wtr/t_xp/t_xsr/t_esr Registers (Address: 0x7E001018---0x7E001048)
        DRAM操作中所需時間和延時寄存器,這里不作過多介紹,具體可以參考PL340文檔。

        8. Memory Configuration 2 Register (Address: 0x7E00104C)
        DRAM的配置寄存器2。
        NameBitDescription
        Read delay[12:11]讀延時
        00=0 cycle01=1 cycle10,11=2 cycle
        Memory type[10:8]DRAM類型
        000=SDR001=DDR011=Mobile DDR
        Memory width[7:6]00=16 bits01=32 bits
        cke_init[3]復位后,設置CKE輸出的值
        dqm_init[2]復位后,設置DQM輸出的值
        a_gt_m_sync[1]ACLK頻率高于MCLK時,設置為1
        Sync[0]ACLK和MCLK同步時,設置為1

        9. CHIP_N_CFG Register (Address: 0x7E001200/0x7E001204)
        DRAM的Chip配置寄存器,用于片選decoding設置
        NameBitDescription
        BRC_RBC[16]DRAM結構
        0=Row-Bank-Column
        1=Bank-Row-Column
        Address match[15:8]片選地址比較值
        Address mask[7:0]片選地址掩碼


        上面介紹了一些寄存器,還有一些寄存器由于沒有用到,所以沒有去了解。下面給一個DRAM初始化的例子:

        WriteReg: 0x7e0010040x4//設置DRAM控制器狀態為Configure
        WriteReg: 0x7e0010100x40d//設置DRAM的刷新周期
        WriteReg: 0x7e0010140x6//設置CAS延時
        WriteReg: 0x7e0010180x3//設置t_DQSS
        WriteReg: 0x7e00101c0xf//設置t_MRD
        WriteReg: 0x7e0010200xf//設置t_RAS
        WriteReg: 0x7e0010240xf//設置t_RC
        WriteReg: 0x7e0010280x1f//設置t_RCD
        WriteReg: 0x7e00102c0x21f//設置t_RFC
        WriteReg: 0x7e0010300xf//設置t_RP
        WriteReg: 0x7e0010340xf//設置t_RRD
        WriteReg: 0x7e0010380x7//設置t_WR
        WriteReg: 0x7e00103c0x7//設置t_WTR
        WriteReg: 0x7e0010400xf//設置t_XP
        WriteReg: 0x7e0010440x1f//設置t_XSR
        WriteReg: 0x7e0010480x1f//設置t_ESR
        WriteReg: 0x7e00100c0x10012//設置DRAM的Column, Row等屬性
        WriteReg: 0x7e00104c0x0b45//設置DRAM的buswidth,type等屬性
        WriteReg: 0x7e0012000x150f8//設置RBC以及片選屬性
        WriteReg: 0x7e0013040x0//設置DQS延時
        WriteReg: 0x7e0010080xc0000//發送NOP命令到DRAM
        WriteReg: 0x7e0010080x0//發送Precharge命令到DRAM
        WriteReg: 0x7e0010080x40000//發送Autorefresh命令到DRAM
        WriteReg: 0x7e0010080x40000//發送Autorefresh命令到DRAM
        WriteReg: 0x7e0010080xa0000//設置DRAM的EMRS寄存器
        WriteReg: 0x7e0010080x80032 //設置DRAM的MRS寄存器
        WriteReg: 0x7e0010040x0//設置DRAM控制器開始運行


        關于DRAM控制器的配置要參見所使用的DRAM的Datasheet,了解DRAM的結構和初始化過程,才能正確配置。S3C6410的DRAM控制器比較復雜,有些寄存器也不是很理解,在ARM的PL340的文檔中也沒做太多解釋。
        我的建議就是能不換DRAM最好,換了也要盡量和S3C6410板上的DRAM相近。


        關鍵詞: S3C6410DRAM控制

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 彭山县| 清河县| 祁阳县| 民乐县| 永嘉县| 甘泉县| 绥棱县| 武山县| 怀远县| 玉山县| 惠安县| 资阳市| 青川县| 福贡县| 平乐县| 信丰县| 定陶县| 铅山县| 故城县| 扎兰屯市| 通许县| 黄浦区| 偏关县| 黑河市| 泾阳县| 新田县| 金山区| 神木县| 鹿泉市| 墨脱县| 建德市| 庆阳市| 静海县| 虞城县| 屯昌县| 英吉沙县| 吉林市| 普陀区| 南汇区| 鄂伦春自治旗| 公主岭市|