第五章 驱动开发_Nand flash启动 & Nor flash启动 & 时
发布时间:2020-12-15 17:46:23 所属栏目:百科 来源:网络整理
导读:1.开发板通过配置的时钟一般较低,通过倍频器倍频得到高频率? 这是因为CPU的主频是通过外频乘以倍频得来的,而外频是整个系统的基准频率,当外频提高时,如不作任何调整,PCI频率、内存频率、前端总线或HT总线频率等都会随之提升,因此有时就会出现超频后硬盘不
1.开发板通过配置的时钟一般较低,通过倍频器倍频得到高频率? 这是因为CPU的主频是通过外频乘以倍频得来的,而外频是整个系统的基准频率,当外频提高时,如不作任何调整,PCI频率、内存频率、前端总线或HT总线频率等都会随之提升,因此有时就会出现超频后硬盘不正常的现象,在超频时往往锁定PCI频率并设置内存异步,就是这个原因。 而对于倍频来说它与周边其它部件无关,提升倍频不会对它们造成影响,从另一方面来说降低了对这些部件承受能力的要求。因为外频提升得越高,这些部件也就是承受越高的频率,我们虽然超频对象是CPU,但那些世界纪录都是在极品主板、极品内存的帮助下产生的,就是因为这些主板、内存能够承受更高的频率。 如果单纯提升倍频,那么只要CPU能够承受,普通的内存和主板就可以将主频提到一个比较高的程度,降低了超频难度。当然,对于那些超频高手来说,他们还是选择倍频和外频相结合的方式,寻找一个最佳的平衡点,以求达到最高的频率。 2.Nand flash启动和Nor flash启动 部分ARM9的CPU内部都集成有一个SRAM,SRAM是英文StaticRAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。这样他不需要初始化就能够直接使用。这与我们在外部扩展的大容量的SDRAM是不一样的,外部大容量的SDRAM是需要初始化后才能使用的,这点大家务必要搞清楚。这点在我做过移植的处理器:s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是这样的。在s3c2440这颗CPU上这个SRAM大小为4KB,datasheet里把它叫做SteppingStone,江湖人称“起步石”。 ? Nandflash和Norflash是不同的:Norflash像内存一样是直接挂在系统总线上的,这样有足够多的地址线使得CPU能够寻址到每一个存储单元上去,这也意味着CPU能够直接通过总线访问Norflash上存储的内容,同时他还支持XIP(即片上执行,不用将代码搬到内存中,直接在Norflash上就能运行)。而Nandflash它并不是直接挂载系统总线上,而是通过Nandflash控制器(这个一般集成在CPU内部)来完成读写操作的。如果我们把Norflash的那种寻址方式叫直接寻址的话(不是汇编里的那个直接寻址,这里指CPU能够直接通过地址线访问存储器的存储单元),那么这里的Nandflash就是间接寻址(这里需要Nandflash控制器来寻址)。所以我们在使用Nandflash之前,一定要初始化Nandflash控制器。 理解上面的这点后,就不难理解,为什么系统能够从Norflash直接启动,而不能直接从Nandflash启动。这是因为,ARM在CPU复位时,CPU默认会到0x00000000地址处去取指令,而如果我们是从Norflash启动的话(一般Norflash会挂到Bank0,nGCS0上),s3c2440CPU就会把Norflash的空间挂接到0x00000000这段内存空间上。这时CPU就能够直接从Norflash上取指令运行,启动了。而如果是Nandflash,因为Nandflash他不能直接挂到系统总线上,并且他的读写,擦除操作必须依赖Nandflash控制器,这也就意味着Nandflash的存储空间永远不能映射到0x00000000这个地址上去。另外,Nandflash的读写操作也不是这样直接寻址的,有兴趣的同学可以自己看看Nandlfash的datasheet,写一个RAW的Nandflash擦除,读写操作程序就明白了。我就写过这么一个程序,对理解Nandflash究竟是怎么操作的非常有帮助。 而如果这些CPU要从Nandflash上启动,那该怎么办呢?这就要用到我之前提到的CPU的内部SRAM了。 在S3C2440的datasheet里有提到,如果我们配置从Nandflash启动的话,那么CPU会自动将内部SRAM的地址映射到0x00000000这个地址空间上了,而如果不是从Nandflash启动,那么挂载Bank0(nGCS0)上的设备就会被映射到0x00000000地址空间上,如我们之前提到的Norflash。 简而言之就是:如果从Nandflash启动,那么CPU内部SRAM被映射到0x00000000地址空间上,这时Norflash就不可用了。而如果是从Norflash启动的话,那么Norflash被映射到0x00000000地址空间上。我们之前提到ARM CPU在复位时,会默认到0x00000000地址上取指令。这样也就是如果从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代码。 4, 这样,U-boot就启动了。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |