文章目录

  • 前言
  • 一、使用存储器控制器访问外设的原理
  • 1.1S3C2410的地址空间
  • 1.2存储控制器与外设的关系
  • 1.3存储控制器的寄存器使用方法
  • 二、存储控制器操作实例:使用SDRAM
  • 理解思路,有兴趣的同学可以查看书籍
  • 总结



前言

存储控制器:是按照一定的时序规则对存储器的访问进行必要控制的设备,包括地址信号、数据信号以及各种命令信号的控制,使主设备(访问存储器的设备)能够根据自己的要求使用存储器上的存储资源。
存储控制器的作用:主要就是进行接口的转换,将主设备发出的读、写等命令转换成存储器能够识别的信号,还要完成主设备与存储器之间地址译码、数据格式的转换(比如数据位宽)。

掌握如何通过总线形式访问扩展的外设,比如内存,NOR Flash,网卡等

总线的使用方法是嵌入式底层开发的基础,了解它之后,再根据外设的具体特性,就可以驱动该外设了

一、使用存储器控制器访问外设的原理

1.1S3C2410的地址空间

S3C2410的“存储控制器”提供了访问外部设备所需的信号。它拥有如下的特性
  • 支持大端,小端字序
  • 每个BANK的地址空间为128MB,总共1GB(8个BANK)
  • 可编程控制的总线位宽(8、16、32),不过BANK0只能选择两种位宽(16、32)
  • BNAK0~BANK5可以支持外接ROM,SRAM等,BANK6 ~BANK7除可以支持ROM,SRAM外,还支持SDARM等
  • BNAK0~BANK6共7个BANK的起始地址是固定的,BANK7的起始地址可编程选择
  • BANK6,BNAK7的地址空间大小是可编程控制的
  • 每个BANK的访问周期均可编程控制
  • 可以通过外部的“wait”信号延长总线访问的周期
  • 外接SDRAM时,支持自刷新和省电模式

S3C2410对外引出27根地址线访问的范围只有128MB,为什么前面说总共是1GB,是因为CPU还对外引出了8根片选信号nGCS0 ~ nGCS7,对应BANK0~ BANK7.8个128MB就是1GB

S3C2410是一个32位的CPU,可以使用的地址范围理论上达到4GB。除去这里的1GB,还有一部分是CPU内部寄存器的地址,剩下的地址空间没有使用。

1.2存储控制器与外设的关系

BANK0~BANK6,分别外接了如下设备:

存储双控制器设计架构 存储控制器的作用_寄存器

存储控制器是一台控制着存储阵列的设备,主要包括三种类型的组件: “CPU”、“缓存存储器"和"与网络和存储设备的连接接口”。

这里就不详细的分析具体各个BANK对应外设的工作原理,只需要记住它的模式是CPU + 缓存存储器 +存储设备接口/网络连接接口

这里简单提一下SDRAM,如果学过计算机组成原理的基友可以跳过。
SDRAM其实就是一个存储阵列,阵列就像表格一样,将数据填进去。和表格的检索原理一样,指定行,指定列就能精确的定位到我们的具体单元。这就是SDRAM的寻址原理。当然为了扩大存储空间,我们就可以将多个这样的表格进行叠加,通过加上片选线来达到指定的目的,这样我们的SDRAM就可以完美的被我们使用了。

1.3存储控制器的寄存器使用方法

对于寄存器的使用,这里就不详细的介绍,只要有一个数据手册进行相应的位操作,我相信你一定可以很快掌握

  1. BWSCON 位宽和等待控制寄存器,32位寄存器,每4位对应一个BANK
  2. BANKCONx BANK控制寄存器(x为0~5)是用来控制相对应的BANK外接设备的访问时序
  3. BANKCONx(x为6~7),可以外接SDRAM,所以肯定有所不一样,这里不细说
  4. PEFRESH刷新控制寄存器
  5. PEFRESH BNAKSIZE寄存器
  6. MRSRBx SDRAM模式设置寄存器

二、存储控制器操作实例:使用SDRAM

理解思路,有兴趣的同学可以查看书籍

整个代码的思路:
从NAND Flash启动CPU时,CPU会通过内部的硬件将NANDFlash开始的4KB数据复制到称为“Steppingstone”的4KB的内部RAM中(起始地址为0),然后跳到地址0开始执行。
这个实例先使用汇编语言设置好存储控制器,使外接的SDRAM可用;然后把程序本身从Steppingstone复制到SDRAM中;最后跳到SDRAM中执行。

总结

实话实说这一章比较枯燥,如果没有计算机组成原理基础的同学看起来会非常吃力,所以建议大家可以学习了后面的知识再回过头来看这一章。通过这一章,你肯定对S3C2410的内存布局有了一个清晰的认识,同理,对于其他的架构计算机也是一个道理。对内存中的数据的修改,就是控制存储控制器对相应的CPU的信号进行处理找到对应的位置进行操作。