简介
简单介绍ARM设备启动原理和启动过程,帮助了解一些嵌入式相关理论基础知识。此文章是看韦东山老师的uboot启动课程总结的。
一 几种存储介质的介绍
1 SRAM:SRAM(Static Random Access Memory),即静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。这样他不需要初始化就能够直接使用。SRAM主要用于二级高速缓存(Level2 Cache)。它利用晶体管来存储数据。与DRAM相比较,SRAM的速度快,但在相同面积中SRAM的容量要比其他类型的内存小。部分ARM9的CPU内部都集成有一个SRAM。
这与我们在外部扩展的大容量的SDRAM是不一样的,外部大容量的SDRAM是需要初始化后才能使用,这对我们后面讨论启动过程必不可少,比如s3c2440这颗CPU上内部这个SRAM大小为4KB,datasheet里把它叫做Stepping Stone,江湖人称“起步石”。
2 SDRAM:同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写,用作内存。我们常说的DDR就是SDRAM家族中的一种。SDRAM使用需要先初始化才可以使用,不能直接使用。
3 NORFLASH:NOR FLASH地址线和数据线分开,有地址和控制信号,NORFLASH像内存一样是直接挂在系统总线上的,这样有足够多的地址线使得CPU能够寻址到每一个存储单元上去,这也意味着CPU能够直接通过总线访问NORFLASH上存储的内容,同时他还支持XIP(即片上执行,不用将代码搬到内存中,直接在NORFLASH上就能运行)。 此处说的在片上运行,只是代码部分在片上运行,程序中的变量还是要重定位到SDRAM中去。后面会提到。
4 NANDFLASH:NANDFLASH它并不是直接挂载系统总线上,而是通过NANDFLASH控制器(这个一般集成在CPU内部)来完成读写操作的。如果我们把NORFLASH的那种寻址方式叫直接寻址的话(不是汇编里的那个直接寻址,这里指CPU能够直接通过地址线访问存储器的存储单元,CPU可以直接访问NORFLASH,不能直接访问NANDFLASH),那么这里的NANDFLASH就是间接寻址(这里需要NANDFLASH控制器来寻址)。所以我们在使用NANDFLASH之前,一定要初始NANDFLASH控制器。
5 eMMC:eMMC = Nand FLASH + 控制器 + 标准封装接口
它的一个明显优势是在封装中集成了一个控制器,提供标准接口并管理闪存。eMMC和Nand flash 之间的区别,主要是:在组成结构上,eMMC存储芯片简化了存储器的设计,将Nand Flash芯片和控制芯片以MCP技术封装在一起,省去零组件耗用电路板的面积,同时也让手机厂商或是计算机厂商在设计新产品时的便利性大大提高。而Nand Flash仅仅只是一块存储设备,若要进行数据传输的话,只能通过主机端的控制器来进行操作。
6 UFS:UFS = Nand + 控制器 + 标准封装接口
UFS最新标准是UFS4.0,它是eMMC的进阶版,最大带宽可以达到23.2Gbps,读取速度高达4200MBps,写入速度高达2800MBps。目前,大多数5G手机的机型都用上了UFS 储存方案
二 NOR FLASH与NAND FLASH的性能区别
●NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。
●NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用●NAND的困难在于flash的管理和需要特殊的系统接口。
● NOR的读速度比NAND稍快一些。
● NAND的写入速度比NOR快很多。
● NAND的4ms擦除速度远比NOR的5s快。
● 大多数写入操作需要先进行擦除操作。
● NAND的擦除单元更小,相应的擦除电路更少。
三 启动方式
1 从XIP(Excute in chip)设备启动,比如从NOR启动,NORFLASH基地址被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是原来的地址0x40000000)。然后CPU从0x00000000开始执行(也就是在NORFLASH中执行)。这就是所谓的片上执行,但是程序中的需要写的变量,是无法进行修改的,所以这部分内容也需要重定位到SDRAM中执行。
2 从非XIP(Excute in chip)设备启动,比如从NAND启动(或者SD卡等),CPU会自动(这里的自动需要解释下,并不是我们所谓的自己搬运,而是从非XIP设备启动的芯片一般会内置一块区域BOOTROM,用来存储一段程序,一级加载)从NANDFLASH中读取前4KB(具体看SOC配置)的数据内容(SPL,二级加载)放置在片内SRAM里,同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。CPU是从0x00000000开始执行,也就是NAND FLASH里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把NANDFLASH中大代码复制到RAM(一般是SDRAM)中去执行。SPL程序的作用就是搬运用户代码到SDRAM中。
从上图可以大概分析下启动过程和启动原理。
启动方式1:
1 开机上电后BOOTROM中程序运行
2 BOOTROM程序将SPL程序拷贝到片内SRAM
3 SPL程序运行,初始化DDR
4 SPL程序将uboot程序拷贝到片外SDRAM(DDR)
5 uboot程序运行,重定位
6 重定位,搬运到SDRAM另外区域
7 修改地址,运行
启动方式2:
1 开机上电后BOOTROM中程序运行
2 BOOTROM程序功能强大,读取DDR配置文件初始化DDR,然后将uboot程序拷贝到片外SDRAM(DDR)
3 uboot程序运行,重定位
4 重定位,搬运到SDRAM另外区域
5 修改地址,运行
以上便是ARM常用的两种启动方式。以及他们的区别。文章来源:https://www.toymoban.com/news/detail-751615.html
另外,U-Boot有一个Download to SDRAM& Run这个选项,这个选项是把程序下载到SDRAM然后跳转到SDRAM开始执行。所以在做实验的时候,要考虑是要下载到NORFLASH中还是NANDFLASH中还是SDRAM中运行,代码是稍稍有点区别的。比如要下载到SDRAM中程序,它的开始地址是0X30000000,如果程序中有绝对地址跳转,就要考虑更改地址的值到底是多少,当然了,b和bl这样的相对跳转是没有影响的。如果要下载到NORFLASH中,它的开始地址是0X00000000,而且可以直接在NORFLASH中运行。如果是在NANDFLASH中运行,就要考虑程序是不是大于了4K。文章来源地址https://www.toymoban.com/news/detail-751615.html
到了这里,关于ARM启动原理和启动过程分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!