作者:ARM-WinCE

我们在项目中更换了DRAM,所以需要重新配置S3C6410的DRAM控制器,结果发现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的状态。

Name

Bit

Description

Memory chips

[8:7]

01=2 chips

Memory type

[6:4]

100=MSDR, SDR, MDDR and DDR

Memory width

[3:2]

00=16-bit   01=32-bit

Controller Status

[1:0]

00=config   01=ready   10=paused   11=low-power

实际上,读到的有用信息就是Controller Status和Memory width。

2. DRAM Controller Command Register (Address: 0x7E001004)

DRAM命令寄存器,设置DRAM的工作状态。

Name

Bit

Description

Memc_cmd

[2:0]

000=Go   001=Sleep   010=Wakeup   011=Pause

100=Configure

最开始应该配置为0x4,是处于Configure状态。在配置完所有的DRAM之后,将该寄存器设置为0x0,处于运行状态。

3. Direct Command Register (Address: 0x7E001008)

DRAM命令寄存器,用于发送命令到DRAM和访问DRAM中的MRS和EMRS寄存器。

Name

Bit

Description

Extended memory command

[22]

扩展命令,该bit用于连接下面的Memory command[19:18],从而组成DRAM命令

Chip number

[21:20]

00=chip_0   01=chip_1    10=chip_2    11=chip_3

Memory command

[19:18]

和Extended Memory command组成DRAM命令字

000=PrechargeAll   001=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。

Name

Bit

Description

Memory burst

[17:15]

设置Burst大小

000=Burst 1   001=Burst 2   010=Burst4

011=Burst 8   100=Burst 16

Stop_mem_clock

没有访问时,Memory Clock自动停止

Power_down_prd

[21:20]

自动掉电所需的时钟周期

AP bit

[19:18]

0=Address bit 10          1=Address bit 8

Row bits

[17:16]

行地址

000=11 bits   001=12 bits   010=13bits

011=14 bits   100=15bits    101=16bits

Column bits

[13:0]

列地址

000=8 bits   001=9 bits   010=10 bits

011=11 bits   100=12 bits

该寄存器肯定是要配的,看看DRAM的datasheet就知道了。

5. Refresh Period Register (Address: 0x7E001010)

DRAM的刷新频率寄存器,用于配置刷新频率的。

Name

Bit

Description

Refresh period

[14:0]

多少个Memory的时钟周期

6. CAS Latency Register (Address: 0x7E001014)

DRAM的CAS延时寄存器,一定要配,参考DRAM的datasheet。

Name

Bit

Description

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。

Name

Bit

Description

Read delay

[12:11]

读延时

00=0 cycle   01=1 cycle    10,11=2 cycle

Memory type

[10:8]

DRAM类型

000=SDR   001=DDR   011=Mobile DDR

Memory width

[7:6]

00=16 bits    01=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设置

Name

Bit

Description

BRC_RBC

[16]

DRAM结构

0=Row-Bank-Column

1=Bank-Row-Column

Address match

[15:8]

片选地址比较值

Address mask

[7:0]

片选地址掩码

上面介绍了一些寄存器,还有一些寄存器由于没有用到,所以没有去了解。下面给一个DRAM初始化的例子:

WriteReg: 0x7e001004            0x4                  //设置DRAM控制器状态为Configure

WriteReg: 0x7e001010            0x40d              //设置DRAM的刷新周期

WriteReg: 0x7e001014            0x6                  //设置CAS延时

WriteReg: 0x7e001018            0x3                  //设置t_DQSS

WriteReg: 0x7e00101c             0xf                  //设置t_MRD

WriteReg: 0x7e001020            0xf                   //设置t_RAS

WriteReg: 0x7e001024            0xf                   //设置t_RC

WriteReg: 0x7e001028            0x1f                 //设置t_RCD

WriteReg: 0x7e00102c             0x21f              //设置t_RFC

WriteReg: 0x7e001030            0xf                   //设置t_RP

WriteReg: 0x7e001034            0xf                   //设置t_RRD

WriteReg: 0x7e001038            0x7                  //设置t_WR

WriteReg: 0x7e00103c             0x7                 //设置t_WTR

WriteReg: 0x7e001040            0xf                   //设置t_XP

WriteReg: 0x7e001044            0x1f                 //设置t_XSR

WriteReg: 0x7e001048            0x1f                 //设置t_ESR

WriteReg: 0x7e00100c             0x10012         //设置DRAM的Column, Row等属性

WriteReg: 0x7e00104c             0x0b45           //设置DRAM的buswidth,type等属性

WriteReg: 0x7e001200            0x150f8           //设置RBC以及片选属性

WriteReg: 0x7e001304            0x0                  //设置DQS延时

WriteReg: 0x7e001008            0xc0000          //发送NOP命令到DRAM

WriteReg: 0x7e001008            0x0                  //发送Precharge命令到DRAM

WriteReg: 0x7e001008            0x40000          //发送Autorefresh命令到DRAM

WriteReg: 0x7e001008            0x40000          //发送Autorefresh命令到DRAM

WriteReg: 0x7e001008            0xa0000          //设置DRAM的EMRS寄存器

WriteReg: 0x7e001008            0x80032          //设置DRAM的MRS寄存器

WriteReg: 0x7e001004            0x0                  //设置DRAM控制器开始运行

关于DRAM控制器的配置要参见所使用的DRAM的Datasheet,了解DRAM的结构和初始化过程,才能正确配置。S3C6410的DRAM控制器比较复杂,有些寄存器也不是很理解,在ARM的PL340的文档中也没做太多解释。

我的建议就是能不换DRAM最好,换了也要尽量和S3C6410板上的DRAM相近。

S3C6410的DRAM控制器相关推荐

  1. S3C6410的SPI控制器

    ********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...

  2. 【嵌入式开发】ARM 内存操作 ( DRAM SRAM 类型 简介 | Logical Bank | 内存地址空间介绍 | 内存芯片连接方式 | 内存初始化 | 汇编代码示例 )

    文章目录 一. 内存 简介 1. 两大内存分类 ( 1 ) DRAM 简介 ( 定期刷新 | 速度慢 | 成本低 ) ( 2 ) SRAM 简介 ( 不需刷新 | 存取速度快 | 功耗大 | 成本高 ...

  3. sm总线控制器找不到驱动程序_细说嵌入式系统下的驱动程序设计

    嵌入式系统驱动程序的开发有别于WIndows或Linux.后者除了必须了解新设备的硬件特性,把控制硬件的程序尽快完成之外,还需要设法让驱动程序符合Windows或Linux的规定(大且复杂的架构).但 ...

  4. tiny4412 裸机程序 七、重定位代码到DRAM【转】

    本文转载自:http://blog.csdn.net/eshing/article/details/37116637 一.关于DRAM 上一章我们讲解了如何对代码进行重定位,但是将代码重定位到只有25 ...

  5. DRAM刷新refresh相关知识归类-基础小知识(三)

    文章目录 一.背景小知识 1.1 DRAM的层次结构 1.2 刷新要求 1.3 DRAM存储芯片的读写时序 1.4 刷新方式分类 参考文献 RAM每一位数据都是通过芯片内的一个 小电容充电(或低电平) ...

  6. SPC5645SF1VLT微控制器-MCU 32位

    SPC5645SF1VLT 描述 说明 框图 功能列表 低功耗运行 176 LQFP封装引脚排列 描述 产品类别:32位微控制器 - MCU RoHS指令:是的 核心:e200z4d 数据总线宽度:3 ...

  7. 基于s3c6410 otg controller的gadget driver及usb枚举分 析

    一.简介      一个完整的USB系统由两部分构成,即usb主机(usb host)和usb设备(usb device).usb主机通常是指我们的pc机.具有host controller的嵌入式设 ...

  8. Dram学习笔记(2) 读《终极内存技术指南》笔记 + 纠正一些流传很广的文章错误

    文章目录 0. 引言 1. Dram 名词解释 2. 一些流程步骤的梳理 2.1 内存结构 2.2 一次burst的实现 2.3 一次mask burst的实现 3. 不懂的地方 3.1 数据在内存里 ...

  9. OK6410开发板学习之一步一步实现精简BootLoader(BL1部分)

    众所周知,ok6410开发板是一块基于s3c6410芯片的开发板,板载资源丰富.s3c6410是三星电子生产的基于arm11内核的芯片.本文旨在总结一下bootloader操作步骤,用于以后复习.查找 ...

最新文章

  1. 数据结构显示树的所有结点_您需要了解的有关树数据结构的所有信息
  2. 负离子发生器模块 ANION GENERATOR
  3. couldn't register *** with the bootstrap server. Error: unknown error code.
  4. ram在计算机网络中表示的是,2018年职称计算机考试题库(20)
  5. 安卓APP_ 控件(11)webView —— 简单应用:显示网页
  6. Linux动态库的导出控制
  7. Unity打包APK细节(翻译自官网)
  8. WPF中制作立体效果的文字或LOGO图形(续)
  9. Android基础新手教程——3.4 TouchListener PK OnTouchEvent + 多点触碰
  10. FydeOS for PC v6.0 发布,安卓子系统升级到 Pie
  11. 知识竞赛现场管理系统安装配置及使用疑难问题汇编
  12. Jquery的validate表单验证
  13. testNg官方文档
  14. t580 thinkpad_ThinkPad T580性能如何?联想ThinkPad T580商务本详细评测
  15. 趋势科技防毒墙网络版—OfficeScan
  16. 数字孪生,开启3D智慧园区管理新篇章
  17. 家用简易NAS系统搭建
  18. Linux文件编辑命令vi详细说明
  19. Java语言程序设计基础篇(第十版 梁勇著)课后习题答案 - 第二章
  20. 踩坑记之6666端口

热门文章

  1. Linux/Ubuntu 单机配置Hbase
  2. pandas追加写入行、列
  3. dijikstra 旅行商问题_第27期:基于旅行商问题(TSP)的配送网络优化—R实现
  4. mysql触发器的基本操作_MySQL基本操作-触发器
  5. 博客园 文章和随笔区别
  6. 配置Hibernate二级缓存步骤
  7. SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用
  8. 物联网 云计算 大数据 分布式
  9. ntext字段的REPLACE处理示例.sql
  10. 管理Shader——Shader概览