datasheet

STM32学习之:FMC-扩展外部SDRAM

2018-10-21来源: eefocus 关键字:STM32  FMC  SDRAM

参考资料:《STM32F4xx 参考手册 2》、《STM32F4xx 规格书》、库帮助文档《stm32f4xx_dsp_stdperiph_lib_um.chm》。

关于 SDRAM 存储器,请参考前面的“常用存储器介绍”,实验中 SDRAM 芯片的具体参数,请参考其规格书《IS42-45S16400J》来了解。

1、 SDRAM 控制原理

  STM32 控制器芯片内部有一定大小的 SRAM 及 FLASH 作为内存和程序存储空间,但当程序较大,内存和程序空间不足时,就需要在 STM32 芯片的外部扩展存储器了。

  STM32F429 系列芯片扩展内存时可以选择 SRAM 和 SDRAM,由于 SDRAM 的“容量/价格”比较高,即使用 SDRAM 要比 SRAM 要划算得多。我们以 SDRAM 为例讲解如何为 STM32 扩展内存。

  给 STM32 芯片扩展内存与给 PC扩展内存的原理是一样的,只是 PC上一般以内存条的形式扩展,内存条实质是由多个内存颗粒(即 SDRAM 芯片)组成的通用标准模块,而STM32 直接与 SDRAM 芯片连接。见图 26-2,这是一种型号为 IS42-45S16400J 的 SDRAM芯片内部结构框图,以它为模型进行学习。

  

1.1 SDRAM 信号线

  上图虚线框外引出的是 SDRAM 芯片的控制引脚,其说明见下表:

 

除了时钟、地址和数据线,控制 SDRAM 还需要很多信号配合,它们具体作用在描述时序图时进行讲解。

1.2 、控制逻辑

  SDRAM 内部的“控制逻辑”指挥着整个系统的运行,外部可通过 CS、WE、CAS、RAS以及地址线来向控制逻辑输入命令,命令经过“命令器译码器”译码,并将控制参数保存到“模式寄存器中”,控制逻辑依此运行。

1.3、 地址控制

  SDRAM 包含有“A”以及“BA”两类地址线,A类地址线是行(Row)与列(Column)共用的地址总线,BA地址线是独立的用于指定 SDRAM 内部存储阵列号(Bank)。在命令模式下,A类地址线还用于某些命令输入参数。

1.4 、SDRAM 的存储阵列

  要了解 SDRAM 的储存单元寻址以及“A”、“BA”线的具体运用,需要先熟悉它内部存储阵列的结构。见下图:SDRAM的存储阵列模型。

  SDRAM 内部包含的存储阵列,可以把它理解成一张表格,数据就填在这张表格上。和表格查找一样,指定一个行地址和列地址,就可以精确地找到目标单元格,这是SDRAM 芯片寻址的基本原理。这样的每个单元格被称为存储单元,而这样的表则被称为存储阵列(Bank),目前设计的 SDRAM 芯片基本上内部都包含有 4 个这样的 Bank,寻址时指定 Bank号以及行地址,然后再指定列地址即可寻找到目标存储单元。SDRAM 内部具有多个 Bank时的结构见下图:

SDRAM 芯片向外部提供有独立的 BA类地址线用于 Bank寻址,而行与列则共用 A类地址线。

图 26-2标号4中表示的就是它内部的存储阵列结构,通讯时当 RAS线为低电平,则“行地址选通器”被选通,地址线 A[11:0]表示的地址会被输入到“行地址译码及锁存器”中,作为存储阵列中选定的行地址,同时地址线 BA[1:0]表示的 Bank也被锁存,选中了要操作的 Bank号;接着控制 CAS线为低电平,“列地址选通器”被选通,地址线 A[11:0]表示的地址会被锁存到“列地址译码器”中作为列地址,完成寻址过程。

1.5 、数据输入输出

  若是写 SDRAM 内容,寻址完成后,DQ[15:0]线表示的数据经过图 26-2 标号5中的输入数据寄存器,然后传输到存储器阵列中,数据被保存;数据输出过程相反。

  本型号的 SDRAM 存储阵列的“数据宽度”是 16位(即数据线的数量),在与 SDRAM进行数据通讯时,16 位的数据是同步传输的,但实际应用中我们可能会以 8 位、16 位的宽度存取数据,也就是说 16 位的数据线并不是所有时候都同时使用的,而且在传输低宽度数据的时候,我们不希望其它数据线表示的数据被录入。如传输 8位数据的时候,我们只需要 DQ[7:0]表示的数据,而 DQ[15:8]数据线表示的数据必须忽略,否则会修改非目标存储空间的内容。所以数据输入输出时,还会使用 DQM[1:0]线来配合,每根 DQM 线对应 8 位数据,如“DQM0(LDQM)”为低电平,“DQM1(HDQM)”为高电平时,数据线 DQ[7:0]表示的数据有效,而 DQ[15:8]表示的数据无效。

1.6 、SDRAM 的命令

  控制 SDRAM 需要用到一系列的命令,见下表。各种信号线状态组合产生不同的控制命令。

表中的 H 表示高电平,L 表示低电平,X表示任意电平,High-Z 表示高阻态。

本型号的 SDRAM 芯片表示列地址时仅使用 A[7:0]线,而 A10 线用于控制是否“自动预充电”,该线为高电平时使能,低电平时关闭。

6. 刷新

  SDRAM 要不断进行刷新(Refresh)才能保留住数据,因此它是 DRAM 最重要的操作。刷新操作与预充电中重写的操作本质是一样的。

  但因为预充电是对一个或所有 Bank 中的工作行操作,并且不定期,而刷新则是有固定的周期,依次对所有行进行操作,以保证那些久久没被访问的存储单元数据正确。

  刷新操作分为两种:“自动刷新”(Auto Refresh)与“自我刷新”(Self Refresh),发送命令后 CKE 时钟为有效时(低电平),使用自动刷新操作,否则使用自我刷新操作。不论是何种刷新方式,都不需要外部提供行地址信息,因为这是一个内部的自动操作。

  对于“自动刷新”, SDRAM 内部有一个行地址生成器(也称刷新计数器)用来自动地依次生成行地址,每收到一次命令刷新一行。在刷新过程中,所有 Bank都停止工作,而每次刷新所占用的时间为 N 个时钟周期(视 SDRAM 型号而定,通常为 N=9),刷新结束之后才可进入正常的工作状态,也就是说在这 N 个时钟期间内,所有工作指令只能等待而无法执行。一次次地按行刷新,刷新完所有行后,将再次对第一行重新进行刷新操作,这个对同一行刷新操作的时间间隔,称为 SDRAM 的刷新周期,通常为 64ms。显然刷新会对SDRAM 的性能造成影响,但这是它的 DRAM 的特性决定的,也是 DRAM 相对于 SRAM取得成本优势的同时所付出的代价。

  “自我刷新”则主要用于休眠模式低功耗状态下的数据保存,也就是说即使外部控制器不工作了,SDRAM 都能自己确保数据正常。在发出“自我刷新”命令后,将 CKE 置于无效状态(低电平),就进入自我刷新模式,此时不再依靠外部时钟工作,而是根据 SDRAM内部的时钟进行刷新操作。在自我刷新期间除了 CKE 之外的所有外部信号都是无效的,只有重新使 CKE 有效才能退出自我刷新模式并进入正常操作状态。(用于低功耗)

  7. 加载模式寄存器

前面提到 SDRAM 的控制逻辑是根据它的模式寄存器来管理整个系统的,而这个寄存器的参数就是通过“加载模式寄存器”命令(LOAD MODE REGISTER)来配置的。发送该命令时,使用地址线表示要存入模式寄存器的参数“OP-Code”,各个地址线表示的参数如下图:

模式寄存器的各个参数介绍如下:

Burst Length

  Burst Length译为突发长度,下面简称 BL。突发是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度。

  上文讲到的读/写操作,都是一次对一个存储单元进行寻址,如果要连续读/写就还要对当前存储单元的下一个单元进行寻址,也就是要不断的发送列地址与读/写命令(行地址不变,所以不用再对行寻址)。虽然由于读/写延迟相同可以让数据的传输在 I/O 端是连续的,但它占用了大量的内存控制资源,在数据进行连续传输时无法输入新的命令,效率很低。

  为此,人们开发了突发传输技术,只要指定起始列地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期外,其后每个数据只需一个周期的即可获得。其实我们在 EERPOM 及 FLASH 读写章节讲解的按页写入就是突发写入,而它们的读取过程都是突发性质的。  

  非突发连续读取模式:不采用突发传输而是依次单独寻址,此时可等效于 BL=1。虽然也可以让数据连续地传输,但每次都要发送列地址与命令信息,控制资源占用极大。突发连续读取模式:只要指定起始列地址与突发长度,寻址与数据的读取自动进行,而只要控制好两段突发读取命令的间隔周期(与 BL 相同)即可做到连续的突发传输。 而 BL 的数值,也是不能随便设或在数据进行传输前临时决定。在初始化 SDRAM 调用 LOAD MODEREGISTER 命令时就被固定。BL可用的选项是 1、2、4、8,常见的设定是 4 和 8。若传输时实际需要数据长度小于设定的 BL值,则调用“突发停止”(BURST TERMINATE)命令结束传输。

BT  

  模式寄存器中的 BT位用于设置突发模式,突发模式分为顺序(Sequential)与间隔(Interleaved)两种。在顺序方式中,操作按地址的顺序连续执行,如果是间隔模式,则操作地址是跳跃的。跳跃访问的方式比较乱,不太符合思维习惯,我们一般用顺序模式。顺序访问模式时按照 “0-1-2-3-4-5-6-7”的地址序列访问。

CASLatency  

模式寄存器中的 CASLatency是指列地址选通延迟,简称 CL。在发出读命令(命令同时包含列地址)后,需要等待几个时钟周期数据线 DQ 才会输出有效数据,这之间的时钟周期就是指 CL,CL一般可以设置为 2 或 3个时钟周期。如下图:

CL只是针对读命令时的数据延时,在写

[1] [2] [3]

关键字:STM32  FMC  SDRAM

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/2018/ic-news102141951.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32学习之:外部中断
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

用STM32F407玩控制—系统组成

原本想在嵌入式操作系统的基础上玩控制,但有几个原因放弃了这一想法,1兴趣转移,2觉得在“裸装”单片机是玩控制没啥不好,3 STM32F407也应该属于当前主流单片机了,就控制上应用来说足够足够了,不像51单片机增加一个变量都要横算竖算,因此,玩到STM32F407也可以了,没必要再进一步深入了,再说,也想玩别的东西了,因此,这个系列的博文是个“早产儿”,4终极原因是最近一直感到眼睛干涩,可能是手机、平板电脑看的太多,而我为了方便,通常都是看电子书,这样一来只能尽量少看手机和平板电脑了,什么兴趣也得归零了,好,就此打住,转入正题,玩控制当然得有控制对象(被控对象),但你不可能有一家化工厂或火电厂给你去作试验,甚至连一个马达也不可能
发表于 2018-10-20
用STM32F407玩控制—系统组成

用STM32F407玩控制—不完全微分PID控制

以满足过程控制的要求,在STM32F407中用定时器来实现周期循环,具体是用TIM_GetITStatus函数实现定时中断,pid控制算法就放在这个函数条件下,TIM_GetITStatus的用法如下(参见《F407固件库手册》):ITStatus TIM_GetITStatus  ( TIM_TypeDef *  TIMx,   uint16_t  TIM_IT  )  Checks whether the TIM interrupt has occurred or not.Parameters:TIMx
发表于 2018-10-20
用STM32F407玩控制—不完全微分PID控制

用STM32F407玩控制—史密斯预估补偿控制

过程对象模型发生变化,蒸汽中含水量也会引起过程对象模型发生变化,这些都不一而足,而恰恰史密斯预估补偿控制对模型误差十分敏感,因而有了各种改进型,其中一种是增益自适应补偿方案,如图2所示,它增加了一个除法器、一个微分导前环节和一个乘法器,在这种方案中,就是模型有误差,控制效果仍然较好,见图2,  通常来说,模型不准的情况下,预估器中时间延滞要小一些,小的物理含义是提早通知调节器。由于过程控制中通常将过程对象近似为一阶系统加纯滞后环节,那么在STM32F407上实现史密斯预估补偿控制,需要做:1.仿真一个一阶系统环节,2.仿真一个纯滞后环节,3.仿真一个微分导前环节,一阶系统环节仿真前面已经说过,这里略去,纯滞后环节
发表于 2018-10-20
用STM32F407玩控制—史密斯预估补偿控制

用STM32F407玩控制—自适应模糊PID控制

,我们采用的隶属度函数如图3所示,然后在此基础上进行模糊推理,通常这一步由MATLAB的M代码实现,由此获得Δkp、Δki、Δkd的查询表如4所示,其曲面输出图见图3,在C语言中,查询表用两维数组来实现,将偏差e和偏差变化率ec分别乘上比例因子ke、kec就可得到数组下标,从而可以进行两维数组的引用,因此在C语言中的编程可以说是非常简单的,复杂的是前面那部分,我们在STM32F407中实现的自适应模糊PID控制器,其控制效果如5所示,从图中可以看出这是一个大纯滞后系统,控制效果还相当好,实际上要用好自适应模糊PID控制器,还不是一件容易的事,首先的要确定合适的初始PID值,这一点,如果人工整定手气不佳,可以用自动整定来帮忙,其次得调整
发表于 2018-10-20
用STM32F407玩控制—自适应模糊PID控制

用STM32F407玩控制—神经网络PID控制

在玩51单片机时就想玩神经网络PID控制,但51单片机的数据存储器地址空间很小,就普通的应用,要增加一个变量尚且“抖抖哗哗”,更遑论玩神经网络PID控制,那可需要非常多的变量,而玩STM32F407就不存在这方面问题了。转入正题,大部分书上的神经网络PID控制,讲的是BP神经网络PID控制,举的例子都是非线性系统,通常仿真效果都不错,但BP神经网络PID控制有一个限制,就是kp、ki、kd小于1,这就限制了它的应用范围,如果kp、ki、kd>1,那就得改进,而刘金琨的《先进PID控制 MATLAB仿真》一书中讲了一种RBF神经网络PID控制,它突破了前者的限制,其原理如图1所示,图中RBF NN1神经网络根据偏差e
发表于 2018-10-20
用STM32F407玩控制—神经网络PID控制

STM32学习——AD单通道与多通道转换(DMA)

第三章AD转换本章的内容分两部分,第一是AD的单通道转换,第二是AD的多通道转换。首先先将单通道转换。 STM32中自带的AD最大的转换频率是14MHZ,共有16个转换通道,每个转换通道对应的管脚如下表所示。管脚名默认复用功能PF6ADC3_IN4PF7ADC3_IN5PF8ADC3_IN6PF9ADC3_IN7PF10ADC3_IN8PC0ADC123_IN10PC1ADC123_IN11PC2ADC123_IN12PC3ADC123_IN13PA3ADC123_IN3PA6ADC12_IN6PA7ADC12_IN7PC4ADC12_IN14PC5ADC12_IN15PB0ADC12_IN8PB1ADC12_IN9注
发表于 2018-10-20

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved