可以打开

注册

 

发新话题 回复该主题

正点原子Linux连载第二十三章DD [复制链接]

1#
暑假白癜风防治 https://m.39.net/disease/a_6192223.html

第二十三章DDR3实验

I.MX6U-ALPHA开发板上带有一个MB/MB的DDR3内存芯片,一般Cortex-A芯片自带的RAM很小,比如I.MX6U只有KB的OCRAM。如果要运行Linux的话完全不够用的,所以必须要外接一片RAM芯片,I.MX6U支持LPDDR2、LPDDR3/DDR3,I.MX6U-ALPHA开发板上选择的是DDR3,本章就来学习如何驱动I.MX6U-ALPHA开发板上的这片DDR3。

23.1DDR3内存简介

在正式学习DDR3内存之前,我们要先了解一下DDR内存的发展历史,通过对比SRAM、SDRAM、DDR、DDDR2和DDR3的区别,有助于我们更加深入的理解什么是DDR。在看DDR之前我们先来了解一个概念,那就是什么叫做RAM?

23.1.1何为RAM和ROM?

相信大家在购买手机、电脑等电子设备的时候,通常都会听到RAM、ROM、硬盘等概念,很多人都是一头雾水的。普通用户区分不清楚RAM、ROM到可以理解,但是作为一个嵌入式Linux开发者,要是不清楚什么是RAM、什么是ROM就绝对不行!RAM和ROM专业的解释如下:

RAM:随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、SRAM、SDRAM、DDR等都是RAM。RAM一般用来保存程序数据、中间结果,比如我们在程序中定义了一个变量a,然后对这个a进行读写操作,示例代码如下:

示例代码23.1.1.1RAM中的变量

1inta;

2a=10;

a是一个变量,我们需要很方便的对这个变量进行读写操作,方法就是直接“a”进行读写操作,不需要在乎具体的读写过程。我们可以随意的对RAM中任何地址的数据进行读写操作,非常方便。

ROM:只读存储器,笔者认为目前“只读存储器”这个定义不准确。比如我们买手机,通常会告诉你这个手机是4+64或6+配置,说的就是RAM为4GB或6GB,ROM为64G或GB。但是这个ROM是Flash,比如EMMC或UFS存储器,因为历史原因,很多人还是将Flash叫做ROM。但是EMMC和UFS,甚至是NANDFlash,这些都是可以进行写操作的!只是写起来比较麻烦,要先发送要先进行擦除,然后在发送要写的地址或扇区,最后才是要写入的数据,学习过STM32,使用过WM25QXX系列的SPIFlash的同学应该深有体会。可以看出,相比于RAM,向ROM或者Flash写入数据要复杂很多,因此意味着速度就会变慢(相比RAM),但是ROM和Flash可以将容量做的很大,而且掉电以后数据不会丢失,适合用来存储资料,比如音乐、图片、视频等信息。

综上所述,RAM速度快,可以直接和CPU进行通信,但是掉电以后数据会丢失,容量不容易做大(和同价格的Flash相比)。ROM(目前来说,更适合叫做Flash)速度虽然慢,但是容量大、适合存储数据。对于正点原子的I.MX6U-ALPHA开发板而言,MB/MB的DDR3就是RAM,而MBNANFFlash或8GBEMMC就是ROM。

23.1.2SRAM简介

为什么要讲SRAM呢?因为大多数的朋友最先接触RAM芯片都是从SRAM开始的,因为大量的STM32单片机开发板都使用到了SRAM,比如F、F等,基本都会外扩一个KB或1MB的SRAM的,因为STM32F/F内部RAM比较小,在一些比较耗费内存的应用中会出现内存捉紧的情况,比如emWin做UI界面。我们简单回顾一下SRAM,如果想要详细的了解SRAM请阅读正点原子STM32F战舰开发板的开发指南。

SRAM的全称叫做StaticRandom-AccessMemory,也就是静态随机存储器,这里的“静态”说的就是只要SRAM上电,那么SRAM里面的数据就会一直保存着,直到SRAM掉电。对于RAM而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方式,这里就以STM32F/F开发板常用的IS62WV16这颗SRAM芯片为例简单的讲解一下SRAM,这是一颗16位宽(数据位为16位)、1MB大小的SRAM,芯片框图如图23.1.2.1所示:

图23.1.2.1IS62WV16框图

图23.1.2.1主要分为三部分,我们依次来看一下这三部分:

①、地址线

这部分是地址线,一共A0~A18,也就是19根地址线,因此可访问的地址大小就是2^19==KB。不是说IS62WV16是个1MB的SRAM吗?为什么地址空间只有KB?前面我们说了IS62WV16是16位宽的,也就是一次访问2个字节,因此需要对KB进行乘2处理,得到KB*2=1MB。位宽的话一般有8位/16位/32位,根据实际需求选择即可,一般都是根据处理器的SRAM控制器位宽来选择SRAM位宽。

②、数据线

这部分是SRAM的数据线,根据SRAM位宽的不同,数据线的数量要不同,8位宽就有8根数据线,16位宽就有16根数据线,32位宽就有32根数据线。IS62WV16是一个16位宽的SRAM,因此就有16根数据线,一次访问可以访问16bit的数据,也就是2个字节。因此就有高字节和低字节数据之分,其中IO0~IO7是低字节数据,IO8~IO15是高字节数据。

③、控制线

SRAM要工作还需要一堆的控制线,CS2和CS1是片选信号,低电平有效,在一个系统中可能会有多片SRAM(目的是为了扩展SRAM大小或位宽),这个时候就需要CS信号来选择当前使用哪片SRAM。另外,有的SRAM内部其实是由两片SRAM拼接起来的,因此就会提供两个片选信号。

OE是输出使能信号,低电平有效,也就是主控从SRAM读取数据。

WE是写使能信号,低电平有效,也就是主控向SRAM写数据。

UB和LB信号,前面我们已经说了,IS62WV16是个16位宽的SRAM,分为高字节和低字节,那么如何来控制读取高字节数据还是低字节数据呢?这个就是UB和LB这两个控制线的作用,这两根控制线都是低电平有效。UB为低电平的话表示访问高字节,LB为低电平的话表示访问低字节。关于IS62WV16的简单原理就讲解到这里。

那么SRAM有什么缺点没有?那必须有的啊,要不然就不可能有本章教程了,SRAM最大的缺点就是成本高!价格高,大家可以在淘宝上搜索一下IS62WV16这个仅仅只有1MB大小的SRAM售价为多少,大概为5,6块钱。大家在搜索一下32MB的SDRAM多钱,以华邦的WG6KH为例,大概4,5块钱,可以看出SDRAM比SRAM容量大,但是价格更低。SRAM突出的特点就是无需刷新(SDRAM需要刷新,后面会讲解),读写速度快!所以SRAM通常作为SOC的内部RAM使用或Cache使用,比如STM32内存的RAM或I.MX6U内部的OCRAM都是SRAM。

23.1.3SDRAM简介

前面给大家简单讲解了SRAM,可以看出SRAM最大的缺点就是价格高、容量小!但是应用对于内存的需求越来越高,必须提供大内存解决方案。为此半导体厂商想了很多办法,提出了很多解决方法,最终SDRAM营运而生,得到推广。SDRAM全称是SynchronousDynamicRandomAccessMemory,翻译过来就是同步动态随机存储器,“同步”的意思是SDRAM工作需要时钟线,“动态”的意思是SDRAM中的数据需要不断的刷新来保证数据不会丢失,“随机”的意思就是可以读写任意地址的数据。

与SRAM相比,SDRAM集成度高、功耗低、成本低、适合做大容量存储,但是需要定时刷新来保证数据不会丢失。因此SDRAM适合用来做内存条,SRAM适合做高速缓存或MCU内部的RAM。SDRAM目前已经发展到了第四代,分别为:SDRAM、DDRSDRAM、DDR2SDRAM、DDR3SDRAM、DDR4SDRAM。STM32F/F/H等芯片支持SDRAM,学过STM32F/F/H的朋友应该知道SDRAM,这里我们就以STM32开发板最常用的华邦WG6KH为例,WG6KH是一款16位宽(数据位为16位)、32MB的SDRAM、速度一般为MHz、MHz或MHz。WG6KH框图如图23.1.3.1所示:

图23.1.3.1WG6KH框图

①、控制线

SDRAM也需要很多控制线,我们依次来看一下:

CLK:时钟线,SDRAM是同步动态随机存储器,“同步”的意思就是时钟,因此需要一根额外的时钟线,这是和SRAM最大的不同,SRAM没有时钟线。

CKE:时钟使能信号线,SRAM没有CKE信号。

CS:片选信号,这个和SRAM一样,都有片选信号。

RAS:行选通信号,低电平有效,SDRAM和SRAM的寻址方式不同,SDRAM按照行、列来确定某个具体的存储区域。因此就有行地址和列地址之分,行地址和列地址共同复用同一组地址线,要访问某一个地址区域,必须要发送行地址和列地址,指定要访问哪一行?哪一列?RAS是行选通信号,表示要发送行地址,行地址和列地址访问方式如图23.1.3.2所示:

图23.1.3.2SDRAM行列寻址方式

CAS:列选通信号,和RAS类似,低电平有效,选中以后就可以发送列地址了。

WE:写使能信号,低电平有效。

②、A10地址线

A10是地址线,那么这里为什么要单独将A10地址线给提出来呢?因为A10地址线还有另外一个作用,A10还控制着Auto-precharge,也就是预充电。这里又提到了预充电的概念,SDRAM芯片内部会分为多个BANK,关于BANK我们稍后会讲解。SDRAM在读写完成以后,如果要对同一个BANK中的另一行进行寻址操作就必须将原来有效的行关闭,然后发送新的行/列地址,关闭现在工作的行,准备打开新行的操作就叫做预充电。一般SDSRAM都支持自动预充电的功能。

③、地址线

对于WG6KH来说一共有A0~A12,共13根地址线,但是我们前面说了SDRAM寻址是按照行地址和列地址来访问的,因此这A0~A12包含了行地址和列地址。不同的SDRAM芯片,根据其位宽、容量等的不同,行列地址数是不同的,这个在SDRAM的数据手册里面会也清楚的。比如WG6KH的A0~A8是列地址,一共9位列地址,A0~A12是行地址,一共13位,因此可寻址范围为:2^9*2^13=B=4MB,WG6KH为16位宽(2个字节),因此还需要对4MB进行乘2处理,得到4*2=8MB,但是WG6KH是一个32MB的SDRAM啊,为什么算出来只有8MB,仅仅为实际容量的1/4。不要急,这个就是我们接下来要讲的BANK,8MB只是一个BANK的容量,WG6KH一共有4个BANK。

④、BANK选择线

BS0和BS1是BANK选择信号线,在一片SDRAM中因为技术、成本等原因,不可能做一个全容量的BANK。而且,因为SDRAM的工作原理,单一的BANK会带来严重的寻址冲突,减低内存访问效率。为此,人们在一片SDRAM中分割出多块BANK,一般都是2的次方,比如2,4,8等。图23.1.1.2中的⑤就是WG6KH就是4个BANK示意图,每个SDRAM数据手册里面都会写清楚自己是几BANK。前面我们已经计算出来了一个BANK的大小为8MB,那么四个BANK的总容量就是8MB*4=32MB。

既然有4个BANK,那么在访问的时候就需要告诉SDRAM,我们现在需要访问哪个BANK,BS0和BS1就是为此而生的,4个BANK刚好2根线,如果是8个BANK的话就需要三根线,也就是BS0~BS2。BS0、BS1这两个线也是SRAM所没有的。

⑤、BANK区域

关于BANK的概念前面已经讲过了,这部分就是WG6KH的4个BANK区域。这个概念也是SRAM所没有的。

⑥、数据线

WG6KH是16位宽的SDRAM,因此有16根数据线,DQ0~DQ15,不同的位宽其数据线数量不同,这个和SRAM是一样的。

⑦、高低字节选择

WG6KH是一个16位的SDRAM,因此就分为低字节数据和高字节数据,LDQM和UDQM就是低字节和高字节选择信号,这个也和SRAM一样。

23.1.4DDR简介

终于到了DDR内存了,DDR内存是SDRAM的升级版本,SDRAM分为SDRSDRAM、DDRSDRAM、DDR2SDRAM、DDR3SDRAM、DDR4SDRAM。可以看出DDR本质上还是SDRAM,只是随着技术的不断发展,DDR也在不断的更新换代。先来看一下DDR,也就是DDR1,人们对于速度的追求是永无止境的,当发现SDRAM的速度不够快的时候人们就在思考如何提高SDRAM的速度,DDRSDRAM由此诞生。

DDR全称是DoubleDataRateSDRAM,也就是双倍速率SDRAM,看名字就知道DDR的速率(数据传输速率)比SDRAM高一倍!这1倍的速度不是简简单单的将CLK提高1倍,SDRAM在一个CLK周期传输一次数据,DDR在一个CLK周期传输两次数据,也就是在上升沿和下降沿各传输一次数据,这个概念叫做预取(prefetch),相当于DDR的预取为2bit,因此DDR的速度直接加倍!比如SDRAM速度一般是~MHz,对应的传输速度就是~MT/s,在描述DDR速度的时候一般都使用MT/s,也就是每秒多少兆次数据传输。MT/S就是每秒M次数据传输,MT/s描述的是单位时间内传输速率。同样~MHz的频率,DDR的传输速度就变为了~MT/S,所以大家常说的DDR、DDR就是这么来的。

DDR2的IO时钟是DDR的2倍,因此DDR内核时钟依旧是~MHz的时候,总线速度就是~MHz。而且DDR2在DDR基础上进一步增加预取(prefetch),增加到了4bit,相当于比DDR多读取一倍的数据,因此DDR2的数据传输速率就是~MT/s,这个也就是大家常说的DDR2、DDR2。当然了,DDR2还有其他速度,这里只是说最常见的几种。

DDR3在DDR2的基础上将预取(prefetch)提高到8bit,因此又获得了比DDR2高一倍的传输速率,因此在总线时钟同样为~MHz的情况下,DDR3的传输速率就是~MT/S。

I.MX6U的MMDC外设用于连接DDR,支持LPDDR2、DDR3、DDR3L,最高支持16位数据位宽。总线速度为MHz(实际是MHz),数据传输速率最大为MT/S。这里我们讲一下LPDDR3、DDR3和DDR3L的区别,这三个都是DDR3,但是区别主要在于工作电压,LPDDR3叫做低功耗DDR3,工作电压为1.2V。DDR3叫做标压DDR3,工作电压为1.5V,一般台式内存条都是DDR3。DDR3L是低压DDR3,工作电压为1.35V,一般手机、嵌入式、笔记本等都使用DDR3L。

正点原子的I.MX6U-ALPHA开发板上接了一个MB/MB的DDR3L,16位宽,型号为NT5CCM16JR/MT5CCM16EP,nanya公司出品的,分为对应MB和MB容量。EMMC核心板上用的MB容量的DDR3L,NAND核心板上用的MB容量的DDR3L。本讲解我们就以EMMC核心板上使用的NT5CCM16EP-EK为例讲解一下DDR3。可以到nanya

分享 转发
TOP
发新话题 回复该主题