完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
首先,分析几种存储: 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). 然后CPU从0x00000000开始执行(也就是在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,如果程序中有绝对地址跳转,就要考虑更改地址的值到底是多少,当然了,b和bl这样的相对跳转是没有影响的。如果要下载到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后面的选项不同给点话那个地址会发生变化,也就对程序产生了影响。做实验的时候一定不能仅仅是照抄,抄程序是我们学习的第一步,但是后面要转化为自己的东西还是要自动动手去实验的,去改变一些东西进行实验,能够发现更多的问题,因为教程是大众化的,不可能针对所有问题所有人,细节的东西还是需要自己好好的去挖掘。 |
|
|
|
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
598 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核源代码的目录结构和文件说明
531 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-Linux内核移植之内核简介
1178 浏览 0 评论
非科班也能玩转Android应用,体验QT跨平台能力-迅为RK3568开发板
1035 浏览 0 评论
飞凌嵌入式-ELFBOARD-ELF 2硬件分享之最小系统原理
1121 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 17:32 , Processed in 0.530170 second(s), Total 66, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号