硬件——存储
嵌入式系统存储体系
通用计算机采用了Cache(高级缓冲存储器)、主存储器(RAM,内存)、外部存储器组成的三级存储体系
速度:寄存器>Cache > 内存 (RAM > ROM)> 硬盘
嵌入式存储器类型
RAM
RAM叫做随机存储器,是直接和CPU进行交互的内存(主存),通常作为正在运行程序和临时数据的存储煤质
RAM分类:
静态SRAM: SRAM,速度比DRAM快,不需要时钟同步
动态DRAM:同步动态RAM ,需要周期性刷新,密度比SRAM高,需要时钟同步
片内ram集成在CPU芯片内部,它是在CPU设计时就加上的,它使用和CPU几乎一样的制作工艺和材料,而且增加了芯片的大小,所以成本比较高,一般也就只有几十K字节,好钢当然要用在刀刃上,片内ram用来存放中断处理handler、RTOS调度器、任务上下文切换、内存分配释放等使用频率最高的代码和中断堆栈这种读写频率极高的内存区,如果有多余的部分也可以放一些经常被引用到的全局变量
片外RAM一般就是采购的市面上的成品,如Samsung,Hynix,Apmemory等,价格相对便宜,其容量的可选范围也较为宽松,从几M到几G的都有,它可以用来存储全局变量,bss,以及我们常用到的malloc所分配的堆空间等。
ROM
只读存储器,AM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存
ROM一般是有两种
一种是指集成在CPU芯片内部的一块只读存储区域,一般是几K到几十K字节大小,用来存储系统刚上电时对cpu和一些核心外设(如时钟,串口,MMU、DRAM、Flash等)进行初始化的代码,它在程序运行中也是不可写的,要对它执行写操作只能使用硬件烧写器进行,也就是一般所说的下载程序,这部分的代码在芯片测试阶段可以进行编程器下载更新,量产后一般就会固化,不能做任何修改的;
ROM另一种指的就是flash,它和硬盘有一个显著的区别:flash里存放的代码是可以由CPU直接取指并执行的,而PC上硬盘里的程序都需要加载到内存里才能运行,
falsh和RAM对比
flash的写操作要比RAM麻烦的多了,flash在写之前需要发送多个命令字来握手,还要先对即将要写的地址所在的扇区进行整体擦除,就是把该扇区里的内容全设为1,所谓写flash就是把其中的一些bit设为0;更要命的是,flash的每个独立bit位的写次数是有上限的,市面上大部分的产品都只能写10~100万次。多说一句,每个bit位的寿命是独立的,如果一个bit位在擦除和写的动作中,它的值始终为1,则不会有影响;例如反复对一个地址写0xF0,则不会影响高4bit的寿命,而低4bit每次都要先擦成1,再写入0,这样就会降低其寿命
NOR闪存与NAND型闪存相比,写入速度较慢,但一般不需要纠错码
在 NAND 类型的闪存中,存储器可以按字、页甚至按位寻址
常见的Nand Flash,内部只有一个chip,每个chip只有一个plane
Block:一个Nand Flash由很多个块做成,块是Nand Flash的擦除操作的基本/最小单位。
Page:每个块里面有很多页page,页是读写操作的基本单位
思考:
引导程序(系统的初始化代码)就必须放到ROM里。在CPU刚上电时,只能去一个默认的地址去取第一条指令,开始干活,这个地址都是映射到片内的ROM里,原因很简单,此时,作为外设的flash和DDR等都还没有初始化,CPU根本无法从它们那里读写数据,片内ROM里的这些代码就需要完成这些模块的初始化。另外,一个项目的处理器和主要外设确定了以后,这部分初始化代码在很长的时间里,都不需要做任何修改的
DDR
是SDRAM的一种,DDR 全称是 Double Data Rate SDRAM,也就是双倍速率 SDRAM,SDRAM 在一个 CLK 周期传输一次数据,
DDR 在一个 CLK 周期传输两次数据,也就是在上升沿和下降沿各传输一次数据,这个概念叫做预取(prefetch),相当于 DDR 的预取为 2bit,
DDR2 在 DDR 基础上进一步增加预取,增加到了 4bit,也就是在一个 CLK 周期传输4次数据,DDR3 在 DDR2 的基础上将预取提高到 8bit,也就是在一个 CLK 周期传输8次数据
Cache
只读数据(代码段、程序里的const、字符串等)一般来说,这些数据应该放在Flash里,可能有人会有疑问,放在flash里,会不会读取的速度很慢?读ROM的速度是比读RAM的数据要慢一点,但是不要忘了,现代CPU都有强大的cache,而且数据Dcache和指令Icache都是分开的,在系统运行中,cache的命中率可以高达80~90%,所以大部分时候CPU都可以在第一时间就拿到想要的指令和数据。
Cache写操作有两种,写回和写直达
写回的优点为:
处理器可以以cache而不是存储器接收的速度写单个的字
同一块内的多次写只需要对存储器层次结构的较低层写一次
当块被写回时,由于是写一整块,系统可以有效利用高传输带宽
写直达的优点为:
缺失较简单,代价较小,因此不需要把整个块写回到较低的存储器层次中
写直达比写回更易于实现,但是写直达cache仍需要一个写缓冲区
Cache的映射方法:
cache的映射技术,通常有三种:直接映射、关联映射、组关联映射