OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3901|回复: 1

学习嵌入式Linux-JZ2440-启动过程分析

[复制链接]

22

主题

93

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2012-9-7
在线时间
3 小时
发表于 2015-5-6 20:28:36 | 显示全部楼层 |阅读模式

首先,分析几种存储:

1>几种存储器

SRAM:SRAM(Static Random Access Memory),即静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。SRAM主要用于二级高速缓存(Level2 Cache)。它利用晶体管来存储数据。与DRAM相比,SRAM的速度快,但在相同面积中SRAM的容量要比其他类型的内存小。

       部分ARM9的CPU内部都集成有一个SRAM,SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。这样他不需要初始化就能够直接使用。这与我们在外部扩展的大容量的SDRAM是不一样的,外部大容量的SDRAM是需要初始化后才能使用的,这点大家务必要搞清楚。

s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是这样的。在s3c2440这颗CPU上这个SRAM大小为4KB,datasheet里把它叫做Stepping Stone,江湖人称“起步石”。

SDRAM:同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写,用作内存。

NORFLASH:NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。NORFLASH像内存一样是直接挂在系统总线上的,这样有足够多的地址线使得CPU能够寻址到每一个存储单元上去,这也意味着CPU能够直接通过总线访问NORFLASH上存储的内容,同时他还支持XIP(即片上执行,不用将代码搬到内存中,直接在NORFLASH上就能运行)。

NANDFLASH:NANDFLASH它并不是直接挂载系统总线上,而是通过NANDFLASH控制器(这个一般集成在CPU内部)来完成读写操作的。如果我们把NANDFLASH的那种寻址方式叫直接寻址的话(不是汇编里的那个直接寻址,这里指CPU能够直接通过地址线访问存储器的存储单元),那么这里的NANDFLASH就是间接寻址(这里需要NANDFLASH控制器来寻址)。所以我们在使用NANDFLASH之前,一定要初始化NANDFLASH控制器。

 

 

2>NOR与NAND的性能区别

NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。 NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。
● NOR的读速度比NAND稍快一些。
● NAND的写入速度比NOR快很多。
● NAND的4ms擦除速度远比NOR的5s快。
● 大多数写入操作需要先进行擦除操作。
● NAND的擦除单元更小,相应的擦除电路更少。

 

启动过程:

1>NOR启动

NORFLASH被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000. 然后CPU0x00000000开始执行(也就是在NORFLASH中执行)。

2>NAND启动

CPU会自动从NANDFLASH中读取前4KB的数据放置在片内SRAM里,同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。CPU是从0x00000000开始执行,也就是NAND FLASH里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把NANDFLASH中大代码复制到RAM(一般是SDRAM)中去执行。

 

         另外,U-Boot有一个Download to SDRAM & Run这个选项,这个选项是把程序下载到SDRAM然后跳转到SDRAM开始执行。所以在做实验的时候,要考虑是要下载到NORFLASH中还是NANDFLASH中还是SDRAM中运行,代码是稍稍有点区别的。比如要下载到SDRAM中程序,它的开始地址是0X30000000,如果程序中有绝对地址跳转,就要考虑更改地址的值到底是多少,当然了,bbl这样的相对跳转是没有影响的。如果要下载到NORFLASH中,它的开始地址是0X00000000,而且可以直接在NORFLASH中运行。如果是在NANDFLASH中运行,就要考虑程序是不是大于了4K

 

         我在学习过程中就遇到了一个类似的问题,就是做按键控制LED灯的亮灭的程序。因为我一开始没有意识到这个问题,就在下载的时候直接选择了Download to SDRAM & RUN,怎么都看不到按键控制LED的效果,纠结了好久,还以为是代码写错了(其实如果是下载到SDRAM,确实是写错了),后来突然想到,下载到NANDFLASH试一试,然后果然就好了。最后看到后面的章节才意识到地址的问题,然后修改了跳转到main函数前设置SP的地方,一开始是把SP设置为0,然后修改为0X34000000,然后下载到SDRAM & RUN就正常了。

         这个经历让我对地址这个东西有了新的认识,以及编译选项中有一个-Ttext选项,我对于这个按键控制LED的程序修改了这个编译选项,发现没什么影响,因为这个是编译选项,影响的是编译过程,程序中如果知识相对跳转,所以不会有什么影响。但是后面有一个SDRAM的实验,就是跳转到SDRAM中执行的那条指令是绝对地址跳转的,-Ttext后面的选项不同给点话那个地址会发生变化,也就对程序产生了影响。做实验的时候一定不能仅仅是照抄,抄程序是我们学习的第一步,但是后面要转化为自己的东西还是要自动动手去实验的,去改变一些东西进行实验,能够发现更多的问题,因为教程是大众化的,不可能针对所有问题所有人,细节的东西还是需要自己好好的去挖掘。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-5-6 22:11:26 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-26 07:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表