Chinaunix首页 | 论坛 | 博客

fx

  • 博客访问: 1346935
  • 博文数量: 115
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3964
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-02 14:36
文章分类
文章存档

2022年(2)

2019年(2)

2018年(10)

2017年(1)

2016年(50)

2015年(12)

2014年(9)

2013年(29)

分类: 嵌入式

2014-03-28 10:06:21

存储系统概述:
    计算机系统的存储被组织成一个6个层次的层次结构。从上到下依次有:
    s0: cpu内部寄存器
    s1:芯片内部的高速缓存(cache)
    s2: 芯片外的高速缓存(SRAM,DRAM,DDRAM)
    s3: 主存储器(flash eprom eeprom等)
    s4: 外部存储器(磁盘,光盘,SD卡等)
    s5: 远程二级存储(分布式文件系统,Web服务器)
    这种存储分层结构中,上一层的存储器作为下一层存储器的高速缓存。

    高速缓冲存储器(cache)被广泛用来提高存储系统的性能。
    cache可分为统一的cache和独立的 数据/指令cache。
    当cpu更新了cache的内容时,要将结果写回到主存中,可以采用写通法和写回法。
    写通法:cpu在执行写操作时,必须吧数据同时写回到cache和主存中。
    写回法:cpu在执行写操作时,数据只写回到cache中。仅当该cache需要被替换是才将数据写回主存中。
储存管理单元:
    MMU(存储管理单元)在CPU和物理内存之前进行地质转换,将地址从逻辑空间映射到物理空间,这个转换过程成为内存映射。
    MMU主要完成以下工作:
        1:虚拟存储空间到物理存储空间的映射。采用了页式虚拟存储管理,它把虚拟地址空间分成一个个大小固定的快,每一块称
            为一页,把物理内存的地址空间分成同样大小的页。MMU实现的就是从虚拟地址到物理地址的转换。
        2:存储访问权限的控制
        3:设置虚拟存储空间的缓冲特性
    嵌入式系统中常常采用页式存储管理。页表是存储在内存中的一个表,页表用来管理这些页。页表的每一行对应于虚拟
    存储空间的一个页,该行包含了该虚拟内存页对应的物理内存页的地址,该页的访问权限和该页的缓冲特性等。
    从虚拟地址到物理地址的变换过程就是查询页表的过程。ARM中使用系统控制协处理器CP15的寄存器C2来保存页表的基地址

    从虚拟地址到物理地址的变换过程其实就是查询页表的过程,由于页表放在内存中,这个查询过程通常代价很大。
    基于程序执行过程中的局部性原理。在一段时间内,对页表的访问只是局限在少数几个单元。根据这
    一特点,增加了一个小容量,高速(访问速度和CPU中的寄存器相当)的存储部件来存放当前访问需要的地址变换条目,这个
    存储部件称为地址转换后备缓冲器(TLB)。 当CPU访问内存是,首先在TLB中查找需要的地址变换条目。如果该条目不存在
    CPU再从位于内存中的页表中查询,并把相应的结果添加到TLB中。更新它的内容

    当ARM处理器请求存储访问时,首先在TLB中查找虚拟地址。如果系统中数据TLB和指令TLB是分开的
    在取指令时,从指令TLB查找相应的虚拟地址,对于内存访问操作,从数据TLB中查找相应的虚拟地址。

    当内存中的页表改变后或修改了CP15中的寄存器C2来使用新的页表时,TLB中的内容需要全部清除。
    可通过CP15中的寄存器C8来清空TLB


    MMU可以将某些地址转换条目锁定在TLB中,从而使得与改地址变换条目相关的地址变换速度保持很快。

    嵌入式系统中的虚拟存储空间到物理存储空间的映射是以内存块为单位的。即虚拟存储空间中一块连续的存储空间被映射到物理
    储存空间中同样大小的一块连续存储空间。在页表和TLB中,每一个地址变换条目实际上记录了一个虚拟存储空间的内存块的
    基地址与物理存储空间相应的一个内存块的基地址的对应关系。

    嵌入式系统支持的内存块大小有
        段:大小为1MB的内存块
        大页:大小为64KB的内存块
        小页:大小为4KB的内存块
        极小页:大小为1KB的内存块
    MMU中的域指的是一些段,大页,小页的集合。每个域的访问控制特性都是由芯片内部的寄存器中相应的控制位
    来控制的。ARM中通过CP15的c3寄存器中的两位来控制每个域的访问控制特性

    MMU中的快速上下文切换技术。通过修改系统中不同进程的虚拟地址,避免在进行进程间切换时造成的
    虚拟地址到物理地址的重映射,从而提高系统的性能。

    嵌入式系统中,i/o操作通常被映射成存储器操作,即输入输出是通过存储器映射的可寻址外围寄存器和中断输入的组合来实现的
    i/o的输出操作可通过存储器写入操作实现,I/o的输入通过存储器读取操作实现。这些存储器映射的i/o空间不满足
    cache所要求的特性,不能使用cache技术,一些嵌入式系统中使用 DMA 实现快速存储。


常见的嵌入式系统存储设备:
    1:RAM(随机存储器)
        RAM可以被读写,地址可以任意次序被读。常见的RAM有sram(静态随机存储器),dram(动态随机存储器)等。
    2:ROM(只读存储器)
        烧入数据后,无需外加电源来保存数据。断电后数据不丢失,但速度慢。常见的ROM有PROM,EPROM等。

    3:flash memory:
        闪存存储器是嵌入式系统中重要的组成部分。用来存储程序和数据。掉电后数据不会丢失。
        flash memory是一种非易失性存储器。根据结构不同可分为 nor flash和nand flash。
        flash memory在物理结构上分成若干个区块,区块之间相互独立。nor flash把整个存储区分成若干个扇区。
        nand flash把整个存储区分成若干个块。可以对块或扇区为单位进行擦出和再编程

        flash memory的写操作只能将数据位从1写为0.所以对存储器进行写入之前需要先擦除。
        nand flash的擦除单位比nor flash小,所以 nand flash的写入速度比nor flash快。但读速度比nor flash慢

        除了nor flash的读,flash memory的其他操作不能想RAM那样直接对目标地址进行总线操作。
        例如执行一次写操作须输入一串特殊指令。

        nor flash带有sram接口,有足够的地址引脚来寻址,可以容易存取其内部的每一个字节。而nand flash的地址,数据,
        命令共用8/16位总线。每次读写都需要使用复杂的命令。

        flash memory器件存在位交换现象。可使用edc/ecc(错误探测/错误纠正)算法来确保可靠性。
        flash memory在使用过程中,可能导致某些区块的损坏。nand flash使用前需对介质进行初始化扫描以发现坏块,并标记不可用。
       应用程序可以直接在nor flash内运行
        在nor flash 上运行期代码不需要软件支持。在nand flash上通常需要驱动程序。
        也就是内存技术驱动程序(MTD)。nand/nor flash的写入和擦出均需要MTD

    4:CF卡(标准存储卡)
    5:SD卡(安全数据卡)
    6:硬盘存储器

nand flash 接口:
    arm系统可以在一个外部的nand flash存储器上执行启动代码,为了支持nand flash的启动装载,arm中配置了
    一个叫做steppingstone的内部sram缓冲器。当以nand flash启动时,nand flash存储器的前4kb将被自动加载到steppingstone中,然后
    系统自动执行这些载入的启动代码。一般情况下,启动代码将复制nand flash的内容复制到sdram中。
    使用arm内部硬件ECC功能可以对nand flash的

    数据的有效性进行检查。复制完成后,将在sdram中执行主程序。
    在nand flash启动后,steppingstone 4kb内部sram缓冲器可以作为其他用途
    nand flash控制器不能通过DMA访问,可以使用LDM/STM指令来代替DMA操作。
    注意: 以nand flash自动启动时,不进行ECC检测,因此,应确保nand flash前4kb不能有错误。

ECC生成模块
    1:当MCU写数据到nand flash时,ECC生成模块产生ECC代码。
    2:当MCU从nand flash读数据时,ECC生成模块产生ECC代码,同时用户程序将它与先前写入的ECC对比来检验。
        为增加nand flash的稳定性,R/nB端口连接一个上拉电阻

SDRAM 接口
    sdram 可读可写,不具有掉电保持数据特性,但其存储速度大大高于flash存储器。在嵌入式系统中,
    sdram主要用做程序的运行空间,数据及堆栈区。

    sdram 在嵌入式系统中应用时,为避免数据丢失,必须定时刷新
    因此要求处理器具有刷新控制逻辑,或在系统中另加入刷新控制逻辑电路。

    嵌入式系统中通常使用两片16位的sdram来并联构建32位的sdram存储系统。
    两片sdram,如K4s561362N-lc60,每篇为32M,其中一片做搞16位,另一片为低16位。将两片最为一个整体配置到Bank6。
    高位片的CLK接到arm芯片SCLK1,低位片接到arm芯片SCLK0。
    CKE连接到arm芯片的SCKE端。/RAS,/CAS,/WE端分别连接到arm芯片的nsdras,nsdcas,ndwe端。
    两片sdram的地址线A0-A12接到arm芯片上的ADDR2-ADDR14。(32位存储系统4字节对齐,[1:0]位为0)
    两片sdram的BA1,BA0连接到arm芯片的ADDR25,ADDR24。(根据每片sdram的大小而定)
    高位片的DQ0-DQ15连接到arm数据总线的高16位。低位片连接到arm数据总线的低16位。
    高16位的UDQM ,LDQM分别连接到arm芯片的 nWEB3,nWEB2低位片连接到arm的nWEB1,nWEB0。
阅读(3646) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~