内存控制器与SDRAM【赞】
原文链接:https://blog.csdn.net/qq_31216691/article/details/87115697
内存接口概念:
芯片资源:
S3C2440有ADDR0~ ADDR26共27根地址线(128M),其中ADDR0,ADDR16~ ADDR26为GPIO/地址线复用,GPIO只能是输出,DDR1~ADDR15为专用地址线,就只能是当地址线用。有32根数据线DATA0 ~DATA31全部都是专用数据线。虽然是32位的芯片,CPU发出的地址是32位的,但是只有27根地址线,所以32位地址只取了0 ~26位来使用。
外接的存储器可以像GPIO模块,USRT模块,I2C模块等一样,由CPU发起,通过内存控制器进行操作,只不过这个外设是在片外的。NAND FLASH和外接的存储器不是同一类型的,片内有一个专门的NAND控制来对外接的NAND FLASH硬件进行控制,所以NAND FLASH又属于另外一部分。
所有的外接存储器都是共用地址线和数据线,但是每个外接存储器有各自连接的独立片选信号引脚,以此可以得以区分当前地址线和数据线的外接模块。
片选信号是根据你的地址范围,自动进行拉低操作的,不需要再人为的去控制引脚。外接存储器处于写入或读取状态,要根据外接存储器的特性进行对引脚的操作,有的需要一个根W引脚,一个R引脚,有的只需要一根引脚控制W/R。
位宽:
这是官方说明书给出的8bit,16bit,32bit存储器的接法示意图:
8bit内存
16bit内存
两片16bit内存组合成的32bit内存
- 8bit的地址线都是从A0接起
- 16bit的地址线都是从A1接起
- 32bit的地址线都是从A2接起
之所以要这么连接,原理其实也是很简单,我们把内存的地址用一个图画出来,相信很快就能看懂了:
假设CPU执行以Byte取值:
mov r0, #3
ldrb r1,[r0] // 从地址3(00011)以Byte为单位取值到r1
- 1
- 2
对于8bit,A0-A0,,A1-A1,A2-A2,所以CPU发出什么地址,内存控制器就转发给存储器什么地址,返回值是精确哪个地址就是哪个地址。
对于16bit,A0没接,A1-A0,A2-A1,所以内存控制器转发给存储器的地址向右移动了一位,转发的不是3,而是1,但是16位的存储器返回的数据是16位的,所以返回到CPU的是Byte3|Byte2,但是内存控制器根据A0的0/1对这个返回的16为数据进行挑选,高低电平选择高位,低电平选择低位,所以返回到CPU的值依然是Byte3。虽然A0没接,但是依然是在起作用。
对于32bit,A0,A1没接,A2-A0,A3-A1,所以内存控制器转发给存储器的地址向右移动了两位,接收到的不是3,而是0,但是32位的存储器返回的数据是32位的,所以返回到内存控制器的是Byte3|Byte2|Byte1|Byte0,但是内存控制器根据A0,A1的0/1对这个返回的32为数据进行挑选,所以返回到CPU的值依然是Byte3。
假设CPU执行默认取值:
32位的机器,默认是以4字节进行取值:
mov r0, #4
ldr r1,[r0]
- 1
- 2
对于8bit,CPU会发出1次取值地址,内存控制器转发了4次连续的地址出去,返回4个字节的数据,内存控制器再把这4个字节的数据拼凑成一个32位数据,返回给CPU
对于16bit,CPU会发出1次取值地址,内存控制器转发了2次连续的地址出去,返回2个16位的数据,内存控制器再把这2个16位的数据拼凑成一个32位数据,返回给CPU
对于32bit,CPU会发出1次取值地址,内存控制器转发了1次连续的地址出去,返回1个32位的数据,内存控制器直接把这个32位数据,返回给CPU
整个过程虽然看似复杂,但是根据不同位宽的不同接线方式,CPU只要发出取值地址,内存控制器就会自动的把所有的复杂的事情全部处理完返回给CPU一个数据,全程CPU不需要参与过程。
连接两片16位32M的SDRAM实例:
S3C2440的SDRAM控制线:
1、SDRAM片选----nGCS6(对应ARM的地址0x3000 0000);nGCS7(对应ARM的地址0x38000000),每一根片选可联接128MBytes内存。现在扩展64MBytes内存,只需一根片选线,通常为nGCS6。
2、nWE----写使能。
3、nSRAS----SDRAM行地址开关。
4、nSCAS----SDRAM列地址开关。
5、写字节使能四根线----nWBE[3:0]。4个字节共32位,为一个数据单元。
6、SDRAM时钟两根线----SCLK[1:0]。两根线分别联接两个SDRAM芯片。
7、SDRAM时钟使能----SCKE。
S3C2440与两片内存联接时,用到的地址线是15根:13根行列复用地址线,两根Bank 线。
Bank的概念
Bank相当于块,一个EM63A165TS-6G内有四个内存块,每块16*4M内存单元。
每地址对应16bits,共有4M (2的22次方)地址范围,因此应该有22位地址线,寻址时22位的地址分两次(行地址和列地址)输入SDRAM芯片,nSRAS有效时,ADDR[2:14] 输入的是行地址,nSCAS有效时,ADDR[2:14]输入的是列地址。所以寻址一个内存单元至少需要两个时钟时间,第一个时钟行地址,第二个时钟列地址,然后才能找到对应内存单元。
地址线从ADDR2开始使用,而不是ADDR0开始使用,这个上面已经讲过原理了。
S3C2440的数据线32根,其中DATA[15:0]这16根联接第一块EM63A165TS-6G芯片,DATA[31:16]这16根联接第二块EM63A165TS-6G芯片。
为什么要两片16bit内存组合在一起
ARM是32位处理器所以它一次处理数据都是以32位为单位的,也就是说它读或者写数据时,地址只能为0x0、0x04、0x08、。。。即4字节对齐,因为一般DDR的数据线都为16位,所以为了得到32位的数据,一般都是将2个DDR连在一起,它们的地址相同,所以对已DDR而言是一个地址对应4个字节(因为一个DDR对应2个字节,两个DDR就对因4个字节,低16位存储在第一片,高16位存储在第二片)
一片内存只接了13根地址线是如何寻址32M的地址?
bank0和bank1就是用来选择4片存储块的,bank0和bank1是用来确定是那个存储块,在
EM63A165TS-6G中有4个bank,00代表bank0, 01代表bank1, 10代表bank2, 11代表bank3,需要知道的是这4片存储块是相互独立的,并且每个存储块都是阵列结构,所谓阵列结构指的是它是由行列组成的。
我们可以把一个bank看做是由一个个方格组成的存储块,而方格的个数就是4Mbit,每个方格的容量则为16bit,你要想确定一个方格的地址首先要确定它的行地址,再确定它的列地址,两线相交确定一点,这一点就是你要的地址。
一般SDRAM的地址线都采用分时复用原则,即先送行地址,再送列地址,EM63A165TS-6G这款芯片Row address : RA0 ~ RA12, Column address : CA 0 ~ CA8,即前9个地址线是复用的。
所以寻址的时候先发送RA0 ~ RA12行地址,在发送CA 0 ~ CA8列地址,而RA0 ~ RA8和CA 0 ~ CA8用的其实是同一个管脚,按照行地址13个,列地址9个算,最多能寻址2^22,即4194304个地址,换算成Mbit刚好是4Mbit,即一个bank的大小,这就是为什么寻32M只用了13根地址线的原因。
为什么bank0和bank1与2440的ADDR24和ADDR25连接?
bank0和bank1是用来选择存储块的,32M的空间需要25根地址线寻址,但是
对于EM63A165TS-6G只需要24根,因为它每个存储单元存储2个字节,我们来分一下,这24根地址线的前13根行地址,紧接着的9根为列地址,那么最后两根是干嘛?显而易见它是bank地址,用来选择存储块,所以BANK0接23, BANK1接24,但是由于我们是从ADDR2开始连得原因前面已经解释过了,所以每个地址加2.最后的地址连接方法,就是ADDR2~ ADDR14对应行地址, ADDR15~ ADDR23对应列地址,(由于管脚的分时复用其实是DDR2~ ADDR14对应行地址, ADDR2~ ADDR10对应列地址)ADDR24~ ADDR25对应BANK0~ BANK1,这就是bank0和bank1与2440的ADDR24和ADDR25连接的原因。再简单一点理解就是,如果最后两个位有使用,那么就是一个BANK的容量4M*16bit=8MByte无法满足了,所以需要换到下一个BANK,那么此时最后两个位也是对应的数据。
配置过程:
不使用UB/LB引脚,这个选项是给SRAM使用的,SDRAM不用管。他的作用是,可以通过nWEB这三个引脚来区分32位数据的哪一个Byte的数据wait信号是指当我们信号和地址设置完毕后,需不需要让内存控制器再等待一段时间,让SDRAM反应一下再取值,这是性能比较差的芯片才需要使用。
我们选用BNK6,外接2片16bit的芯片,是32位数据访问。
这是EM63A165的说明书截取出来的数据,我们使用的是EM63A165-6G,Clock Cycle Time最小是6ns,我们是挂在100MHZ的总线上,1/100 000 000 = 110^-8 s = 10ns(1秒(s) =100厘秒(cs)= 1000 毫秒(ms) = 1,000,000 微秒(μs) = 1,000,000,000 纳秒(ns)),符合芯片要求。
4M word * 16-bit 4-bank :4M的存储单元,每个存储单元16bit(每个单元2个字节),总共4块,也就是2byte(41024*1024)*4=33554432byte=32M,两片接在一起就是64M
MT选SDRAM这个毫无疑问,在SDRAM模式下只需要关心[3:0]这四个位,Trcd RAS to CASdelay是指行地址与列地址之间的时间间隙,查芯片手册可以知道最少延时18ns,100MHZ一个时钟周期是10ns,所以2个时钟周期就够了。纵列数量是9个A0 ~ A8,行列是13个A0~A12
REFEN使能打开,TREFMD选择自动刷新,Trp根据手册看是18ns,选择2个时钟周期就可以了,Tsrc=Trc-Trp=60-18=42ns,选择5个时钟周期就够了,计算Refresh Counter的值首先要知道Refresh period的值(刷新周期),8192 / 64ms ,是指刷新8192字节需要64毫秒,一个字节是64/8192=0.0078125us=7.8125ns,和表格中提供的例程是一样的,HCLK也是100MHZ,所以都不用算,Refresh Counter=1269=0x4F5
BURST_EN开启突发访问使能,SCKE_EN开启掉电模式使能,SCLK_EN选用推荐,BK76MAP内存映射是64M
其他选项你也没得选,只有CL可以做文章,CL是CAS latency,这个挺重要的,在开篇的时候就表明了,可以是2或3个时钟。这个CL是内存控制器给SDRAM输入一个CL时钟周期,比如CL=2, SDRAM收到这个CL时间后,每次接收完列地址后,等2个时钟周期再把数据返回给内存控制器。
以上就全部配置完成了。
以上很多知识都是通过看视频,和查找资料,外加自己的理解总结而成的,图片也是自己画的和截图的,肯定存在些许错误,如果哪位大神有发现错误的地方,请及时指正。
——冷亦花烟_CYB(菜蔡)
2019.2.12 21:01
http://www.taodudu.cc/news/show-2118382.html
相关文章:
- 混淆矩阵(Confusion Matrix)
- 雅可比矩阵(Jacobian)、海森矩阵(Hessian)
- 矩阵论与计算机英语论文,矩阵论翻译论文.pdf
- 矩阵
- matlab3阶幺矩阵,Matlab操作矩阵的相关方法
- 泰勒公式矩阵形式_雅可比矩阵、黑森矩阵、泰勒展开式
- 单片机 矩阵式按键
- 矩阵分析(2)--正规矩阵、正交矩阵
- Strassen矩阵乘法
- matlab 矩阵逻辑与,MATLAB矩阵的寻访与赋值
- 计算矩阵的逆源码(使用伴随矩阵,3×3的矩阵)
- LearnGL - 06.2 - Matrix - 矩阵03 - 逆矩阵、行列式、伴随矩阵、余子式、代数余子式、练习
- C语言实现矩阵的乘法
- 矩阵、向量
- 伴随矩阵例题_伴随矩阵习题及解答
- XTU-oj 字符矩阵
- python给矩阵赋值_python 实现矩阵旋转
- python 关联矩阵_创建关联矩阵
- 协方差矩阵
- 混淆矩阵 (Confusion Matrix)
- 数学专业英语—矩阵篇
- 矩阵的范数
- 矩阵专业词汇英文对照
- 矩阵的几个基本概念(一)
- 深入详细理解矩阵 (矩阵的加减乘、转置、共轭、共轭转置)
- 适合当屏保的酷炫h5站点+源码代码
- 如何禁止树莓派屏幕休眠
- MacBook Pro 进入屏保 发热严重
- win10好看的锁屏壁纸如何保存
- 计算机无法屏保,Win7屏幕保护程序不能修改怎么办 win7无法设置电脑屏幕保护程序如何解决...
内存控制器与SDRAM【赞】相关推荐
- 新1期_012课_内存控制器与SDRAM
一.基础知识 各种外设有各自的控制器.例如GPIO控制器可控制GPIO输入输出,UART 控制器可以控制不同脉冲的产生 等.而CPU的作用是向各种控制器写入数据,CPU是通过地址线区别不同的外设控制器 ...
- 韦东山ARM第一期作业(三)内存控制器和SDRAM
文章目录 01 - 作业所在路径 02 - 作业描述 03 - 作业解答 01 - 作业所在路径 ARM裸机1期加强版\源码文档图片\文档图片\第012课_内存控制器与SDRAM 02 - 作业描 ...
- 内存控制器与SDRAM
S3C2440统一编址包含了GPIO,串口.I2C.SDRAM等设备类型,但是这个芯片Nandflash不是在统一编址范围内,Nandflash控制器是在统一编址中的.其中Nandflash的地址线也 ...
- s3c2440内存控制器与SDRAM基本测试
前面我们实验的LED和串口程序,是cpu发送地址给特定的寄存器,在寄存器中写相应的位,达到控制要求. 第一类是GPIO门电路如LED,第二类是协议类如串口,这些都不是cpu直接给地址信息,而是通过寄存 ...
- 韦一之内存控制器,2440地址空间,NOR flash和SDRAM(012课)
大部分内容来自韦东山老师视频及博客:https://blog.csdn.net/thisway_diy/article/details/79389530 一个可参考的很好很详细的博客文档:https: ...
- 内存控制器与SDRAM_内存接口概念
辅线1_硬件知识_内存接口概念 如图是S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚),有串口控制器 (接有TXD RXD引脚). 配置GPIO控制器相应的寄存器,即可让引脚输出高低电 ...
- 存储控制器(SDRAM操作)
什么是存储控制器 2440是32位单片机,进行数据访问时通过32位地址访问. CPU发出32位地址信号给存储控制器,存储控制器根据地址信号设置片选信号及地址总线,将相应数据通过数据总线传回存储控制器, ...
- XLINX系列之Zynq-7000系列DDR内存控制器详解
1DDR内存控制器介绍 DDR内存控制器支持DDR2,DDR3,DDR3L和LPDDR2设备,包括三个主要块:AXI存储器端口接口(DDRI),带有交易调度器(DDRC)的核心控制器和具有数字PHY( ...
- 七彩虹 pci内存控制器 感叹号 蓝屏 DPC_WATCHDOG_VIOLATION
最近自己组装台电脑玩, 出现过几次蓝屏 代码 DPC_WATCHDOG_VIOLATION 打开设备管理器 发现好几个黄色感叹号的 点开显示没有兼容驱动(忘记截图了) 大概有 pci内存控制器, sm ...
- Memory Population Guidelines for Intel 3rd Gen Xeon Scalable Processors——内存控制器
Memory Population Guidelines for Intel 3rd Gen Xeon Scalable Processors 英特尔的第三代至强可扩展处理器采用全新的内存控制器架构. ...
最新文章
- v2.matchTemplate图片尺寸问题
- python在线工具-在线 Python运行工具
- SAP Classification(物料特性)
- 打造司机在线培训,网易云信助力曹操专车“一路畅行”
- AV1为何有信心打败H.265?
- 分享WCF聊天程序--WCFChat
- 深入分析Flex [Bindable] 【转】
- 字符串-长度、计数、位置方法演练
- easyUI学习笔记二
- LeetCode 2182. 构造限制重复的字符串(贪心、map)
- datastage配置jdbc_DataStage 错误集(持续更新)
- 【codevs3160】 LCS 【后缀自动机】
- 前端工作学习相关网站收集整理
- Python入门--函数传递过程中实参的变化
- ES5 对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
- linuxt gogs搭建
- 如何安装SQL2005 EXPRESS版
- ftp上传工具 免安装,3款最好用的ftp上传工具 免安装
- 乌尔都语简介和Unicode由来
- prolog与python_讲解:SENG201、Software、Python,Java/c++Web|Prolog
热门文章
- ArcGis for JavaScript 4.23版本接入国家天地矢量地图
- Maxwell 是什么?
- codeblocks下载安装与解决codeblocks找不到编译器的方法
- 过程工业中的smartLink HART-IP
- 林軒田《机器学习基石》课程总结
- Kindle PaperWhite 3 5.8.10越狱成功!
- 高性能初级维修电工及技能考核实训装置
- 2022年全栈开发者需要熟悉了解的知识列表
- 答题小程序学习,题库答题类小程序,云开发+cms做后台,有错题集,积分排名,做题进度
- Ubuntu18.04下小米、TPLink、腾达USB无线网卡跳坑记录