您的位置 首页 FPGA

arm nandflash&norflash发动原理

部分ARM9的CPU内部都集成有一个SRAM,SRAM是英文StaticRAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的

部分ARM9的CPU内部都集成有一个SRAM,SRAM是英文Static RAM的缩写,它是一种具有停止存取功用的内存,不需求改写电路即能保存它内部存储的数据。这样他不需求初始化就能够直接运用。这与咱们在外部扩展的大容量的SDRAM是不相同的,外部大容量的SDRAM是需求初始化后才干运用的,这点咱们务必要搞清楚。这点在我做过移植的处理器:s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是这样的。在s3c2440这颗CPU上这个SRAM巨细为4KB,datasheet里把它叫做Stepping Stone,江湖人称“起步石”。

Nandflash和Norflash是不同的:Norflash像内存相同是直接挂在体系总线上的,这样有足够多的地址线使得CPU能够寻址到每一个存储单元上去,这也意味着CPU能够直接经过总线拜访Norflash上存储的内容,一起他还支撑XIP(即片上履行,不必将代码搬到内存中,直接在Norflash上就能运转)。而Nandflash它并不是直接挂载体系总线上,而是经过Nandflash控制器(这个一般集成在CPU内部)来完结读写操作的。假如咱们把Norflash的那种寻址方法叫直接寻址的话(不是汇编里的那个直接寻址,这儿指CPU能够直接经过地址线拜访存储器的存储单元),那么这儿的Nandflash便是直接寻址(这儿需求Nandflash控制器来寻址)。所以咱们在运用Nandflash之前,一定要初始化Nandflash控制器。
了解上面的这点后,就不难了解,为什么体系能够从Norflash直接发动,而不能直接从Nandflash发动。这是由于,ARM在CPU复位时,CPU默许会到0x0000 0000地址处去取指令,而假如咱们是从Norflash发动的话(一般Norflash会挂到Bank0,nGCS0上),s3c2440 CPU就会把Norflash的空间挂接到0x0000 0000这段内存空间上。这时CPU就能够直接从Norflash上取指令运转,发动了。而假如是Nandflash,由于Nandflash他不能直接挂到体系总线上,而且他的读写,擦除操作有必要依靠Nandflash控制器,这也就意味着Nandflash的存储空间永久不能映射到0x0000 0000这个地址上去。别的,Nandflash的读写操作也不是这样直接寻址的,有爱好的同学能够自己看看Nandlfash的datasheet,写一个RAW的Nandflash 擦除,读写操作程序就了解了。我就写过这么一个程序,对了解Nandflash究竟是怎样操作的十分有协助。
而假如这些CPU要从Nandflash上发动,那该怎样办呢?这就要用到我之前说到的CPU的内部SRAM了。
在S3C2440的datasheet里有说到,假如咱们装备从Nandflash发动的话,那么CPU会主动将内部SRAM的地址映射到0x0000 0000这个地址空间上了,而假如不是从Nandflash发动,那么挂载Bank0(nGCS0)上的设备就会被映射到0x0000 0000地址空间上,如咱们之前说到的Norflash。
简而言之便是:假如从Nandflash发动,那么CPU内部SRAM被映射到0x0000 0000地址空间上,这时Norflash就不可用了。而假如是从Norflash发动的话,那么Norflash被映射到0x0000 0000地址空间上。咱们之前说到ARM CPU在复位时,会默许到0x0000 0000地址上取指令。这样也便是假如从Nandflash发动的话,那么CPU默许会从内部SRAM中取第一条指令;而假如从Norflash发动的话,那么CPU默许从Norflash中取第一条指令。
那假如从SRAM发动的话,那么SRAM中的指令(也便是代码)从哪里来的呢?在s3c2440处理器(arm920t和arm926t的核应该都是这样的,别的我看S3C6410也是如此)上电时,CPU会主动将Nandflash的前4K代码(或叫指令)拷贝到内部SRAM中,这是由CPU主动完结的,不需求咱们干涉。这也就意味着,SRAM中的内容便是咱们Nandflash上前4K的代码了。
这样,假如是在咱们的bootloader如u-boot中就要保证,咱们编译出來的前4K代码完结以下功用:
1, 初始化CPU,外部SDRAM,Nandflash控制器等基本功用;
2, 将Nandflash上剩下的u-boot代码拷贝到外部的SDRAM中
3, 调到外部的SDRAM中来运转u-boot代码。
这样,U-boot就发动了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/263426.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部