STM32H7x3 FMC拓展外部SDRAM全总结

文章详细介绍了如何在STM32H743微控制器上使用FMC(FlexibleMemoryController)外设扩展SDRAM存储器,包括SDRAM的基础知识、STM32H7系列时钟命名约定、FMC结构与SDRAM控制器的配置、硬件设计、工程配置与测试。内容涵盖了引脚分配、时序参数、初始化步骤以及驱动程序的编写,为读者提供了全面的参考信息。
摘要由CSDN通过智能技术生成

STM32H743 FMC拓展外部SDRAM全总结

一、SDRAM通用知识点总结

  SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器。同步是指其时钟频率和CPU前端总线的系统时钟相同,并且内部命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据的读写。

1.1 SDRAM引脚定义

引脚名称 功能 描述
A 0 − A 12 A0-A12 A0A12 地址线 可作为行地址和列地址线,
行地址:A0-A12
列地址:A0-A8
A10在预充电阶段也会被采样,其值决定是否所有的banks都进行预充电;也可以通过BS0,BS1信号线选择banks
B S 0 − B S 1 BS0-BS1 BS0BS1 Bank选择 在行地址锁存时或在读写时地址锁存了选择对应的Bank
D Q 0 − D Q 15 DQ0-DQ15 DQ0DQ15 数据线 用于数据输入输出的多路数据线
C S ‾ \overline{CS} CS 片选 使能或失能命令解码器
R A S ‾ \overline{RAS} RAS 行地址选通 信号有效时,地址线表示的为行地址
C A S ‾ \overline{CAS} CAS 列地址选通 信号有效时,地址线表示的为列地址
W E ‾ \overline{WE} WE 写使能 数据写入时能
L D Q M ‾ , U D Q M ‾ \overline{LDQM},\overline{UDQM} LDQM,UDQM 输入/输出掩码 表示数据线的有效部分
C K E CKE CKE 时钟输入 时钟失能信号,失能时SDRAM会开启自刷新
C L K CLK CLK 时钟使能 同步时钟信号,所有的信号都在CLK的上升沿时采样

1.2 SDRAM结构与控制

1.存储阵列

  SDRAM的存储结构为存储阵列,而非管道式存储,如上图所示,存储阵列类似为一张表格,通过指定行列地址就可以定位到最基本的存储单元,一个存储单元的大小通常就为数据通道数。这也是SDRAM可以实现随机访问的原因。一个存储阵列称之为一个逻辑Bank,为了在保证性能的前提下提升存储空间,一般整片SDRAM又会以若干个逻辑Banks组成,通常为2个或4个。单一Bank在访问时可能会造成非常严重的寻址冲突。
  寻址时,只需要指定对应的Bank,然后确定其行地址(Row address),再确定列地址(Cloumn address),就可以对应到具体的存储单元。
  因此,整个SDRAM的存储空间就算为:Size = n × R × C × D,n为Bank数,R和C分别为存储阵列行列数,D为存储单元的容量。

2.寻址过程

  整个SDRAM结构如图一所示,地址线一共有A0~A12,BS0~BS1。通讯时,RAS有效时,行地址选通器被选通,地址线A0~A12表示的地址数据会送入到行地址译码锁存器中译码锁存,作为寻址的行地址,同时BS0~BS1用于锁定对应的Bank;然后释放RAS,CAS有效时,列地址选通器被选通,A0~A9表征的列地址数据被送入列地址译码器中作为寻址的列地址,确定到对应的存储单元,完成整个寻址过程。

3.数据访问

  图一所示SDRAM的数据宽度为16bit,其存储单元容量亦为2Bytes = 16bits。当寻址完成后,可根据DQ0~DQ15数据传输数据。写数据时,经过响应时间后,DQ数据线上的数据被采集暂存到DQ Buffer中,然后通过数据控制电路写入到对应的地址存储单元;同理,读数据即为逆过程。在读写数据时,如果不需要一次性操作16bits有效数据时,可以直接通过UDQM,LDQM选择数据的有效部分,实现字节访问。

4.控制命令
  • 命令禁止
      当器件未被选中时,此时控制器无法与SDRAM进行数据传输与通讯,防止设备执行新命令,即为命令禁止状态。即拉高CS引脚,但是不能通知SDRAM正在执行的命令。

  • 无操作
      无操作命令(No-operation),也称为空命令、NOP命令。不论 SDRAM 处于何种状态,此命令均可被写 入,该命令给被选中的 SDRAM 芯片传递一个空操作信息,目的是为了防止 SDRAM 处于空闲或等待状态时,其他命令被写入,已在进行的操作不受影响。命令禁止的反操作。

  • 激活
      ACTIVE命令用于激活特定Bank中的行,以便后续访问。BA0~BA1的值选择Bank,A0~A12的值选择行。该行对于访问保持活跃状态,直到向该Bank发出预充电命令。在打开同一Bank中的不同行之前,必须发出PRECHARGE命令。

  • 读命令
      READ命令用于对激活的行进行突发读访问。通过BA0~BA1选择对应的Bank,地址线选择起始读列地址。A10确定是否使能自动预充电,使能后将在读脉冲串结束后对访问行进行预充电;失能后读访问的行将会保留打开状态供后续访问。
      读取的数据通过DQ数据线传输,根据字节选择DQM信号选择数据访问数据的有效部分,当DQM均无效时(均为高),两个时钟后所有DQ信号将处于高阻状态;根据高低字节DQM有效信号,DQ输出对应部分的有效信号。
  • 写命令
      WRITE命令用于对激活的行进行突发写访问。通过BA0~BA1选择对应的Bank,地址线选择起始读列地址。A10确定是否使能自动预充电,使能后将在写脉冲串结束后对访问行进行预充电;失能后写访问的行将会保留打开状态供后续访问。
      DQ数据信号线上的数据通过DQM信号线确定有效部分后将有效字节的数据写道存储阵列;如果DQM信号线均为无效(均为高电平),DQ信号线上的数据将被忽略,并不对该地址进行数据写入。
  • 预充电
      PRECHARGE命令用于关闭已选中Bank中选中的行或所有Bank中选中的行。在发出PRECHARGE命令经过指定的时间(tRP)后,Bank可用于后续访问。即SDRAM寻址具有独占性,在激活命令后,如果需要同一Bank的其他行进行寻址访问时,需要关闭原来选中的行,重新发送新要访问的地址。Bank关闭当前工作行,准备打开新行的操作就是预充电。Bank预充电后处于空闲状态,需要访问该Bank时必须先激活。
      预充电时Bank的选择由A10地址线、BS0~BS1确定。当A10有效时,将对所有Bank进行预充电,此时忽略BS信号;A10无效时,通过BS0~BS1信号线选择要预充电的Bank。

1.3 SDRAM特性

1. 刷新(Refresh)

  由于SDRAM作为动态存储器,数据存储原理是通过电容电荷的多与少来对数据进行保存,而电容会放电,因此在某个时间内需要对电容进行不断的充电来保证数据的准确性,此过程为刷新操作。区别于预充电,刷新具有固定的周期,依次对所有行进行操作。

  • 自动刷新(Auto Refresh):当SDRAM芯片与MCU进行时钟同步后,由MCU控制器负责对SDRAM进行刷新操作
  • 自刷新(Self Refresh):当芯片进入低功耗模式(空闲模式),为保证数据芯片自身也可以进行刷新操作
2.模式寄存器

  模式寄存器用于定义SDRAM的特定操作模式。该定义包括选择突发长度、突发类型、CAS延迟、操作模式和写入突发模式,如模式寄存器定义所示。模式寄存器通过LOAD MODE REGISTER(加载模式寄存器)命令进行编程,并保留存储的信息,直到再次编程或设备断电。

在这里插入图片描述
  模式寄存器位 M0:M2 指定突发长度,M3 指定突发类型(顺序或交错),M4:M6 指定CAS延迟,M7:M8 指定操作模式,M9 指定写入突发模式,M10:M11 保留供将来使用。当所有Banks空闲时,必须加载模式寄存器,并且控制器必须在启动后续操作之前等待指定的时间。违反这些要求之一将导致未指定的操作。

  • 突发及突发长度
      突发(Burst)是指对在同一行中相邻的存储单元连续进行数据传输,连续传输存储单元的数量就是突发长度。硬件上通过地址线读写寄存器内容。
      上文讲到的读/写操作,都是一次对一个存储单元进行寻址,如果要连续读/写就还要对当前存储单元的下一个单元进行寻址,也就是要不断的发送列地址与读写命令。虽然读/写延迟相同可以让数据的传输在I/O端是连续的,但它占用了大量的内存控制资源,在数据进行连续传输时无法输入新的命令,效率很低。为此,人们开发了突发传输技术,只有指定起始地址与突发长度,内存就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址。这样,除了第一笔数据的传输需要若干个周期外,其后每个数据只需一个周期的即可获得。

  • 突发类型
      给定突发内的访问可以被编程为顺序的或交错的;这被称为突发类型,并通过位 M3 选择。

  • CAS Latency
      列地址选通延迟,CAS延迟是读命令发出与数据线输出数据可用时之间的延迟,以时钟周期为单位。延迟可以设置为两个或三个时钟周期。下图分别为华邦和芯城SDRAM手册上的CAS延时示意。
    在这里插入图片描述
      如果在第n个时钟边沿发出读命令,并且CAS延迟为m个时钟,则数据将在n+m时钟边沿时可用。DQ在第n+m-1时钟边沿驱动输出,如果满足相关访问时间,则数据在第n+m个时钟边沿有效。

3.初始化时序与加载模式寄存器

在这里插入图片描述
  SDRAM作为动态器件上电后不能像SRAM一般可以直接进行读写,还需要对SDRAM器件进行一定的初始化,以配置SDRAM的上述特性参数。上图为芯城和镁光公司SDRAM器件手册上的初始化时序图,从上电开始共有5个阶段。

  1. 对VDD和VDQ同时上电,待电源稳定后使能时钟输出,此过程至少100us
  2. 发送一个或多个COMMAND INHIBITNOP命令
  3. 发送PRECHARGE ALL命令,对所有Banks进行预充电后。至少等待TRP时间后,所有Banks将完成预充电,然后设备处于空闲状态
  4. 发出至少两个AUTO REFRESH命令并等待至少等待T<
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值