s3c2440存储控制器和地址以及启动的理解
来源:互联网 发布:淘宝店铺名字在哪里改 编辑:程序博客网 时间:2024/06/06 04:17
1.首先应该先了解Flash ROM的种类
NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。
NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。
通俗的说,只给地址不行,要先命令,再给地址,才能读到NAND的数据,在一个总线完成的。
结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash.
2.Nand Flash的命令、地址、数据都通过I/O口发送,管脚复用,这样做做的好处是,可以明显减少NAND FLASH的管脚数目,将来如果设计者想将NAND FLASH更换为更高密度、更大容量的,也不必改动电路板。在S3C2440中NANDFLASH的控制依靠NAND FLASH控制器。不能够执行程序,本人总结其原因如下 :
a. NAND FLASH本身是连接到了控制器上而不是系统总线上。CPU启动后是要取指令执行的,如果是SROM、NOR FLASH 等之类的,CPU 发个地址就可以取得指令并执行,NAND FLASH不行,因为NAND FLASH 是管脚复用,它有自己的一套时序,这样CPU无法取得可以执行的代码,也就不能初始化系统了。
b. NAND FLASH是顺序存取设备,不能够被随机访问,程序就不能够分支或跳转,这样你如何去设计程序。
3.在2440中为什么可以配置成从Nand Flash中启动程序?
如果S3C2440被配置成从Nand Flash启动, S3C2440的Nand Flash控制器有一个特殊的功能,在S3C2440上电后,Nand Flash控制器会自动的把Nand Flash上的前4K数据搬移到4K内部SRAM中,(此内部RAM被称为Steppingstone)并把0x00000000设置内部RAM的起始地址,CPU从内部RAM的0x00000000位置开始启动。这个过程不需要程序干涉。程序员需要完成的工作,是把最核心的启动程序放在Nand Flash的前4K中,也就是说,你需要编写一个长度小于4K的引导程序,作用是将主程序拷贝到SDRAM中运行(NF地址不是线性的,程序不能直接运行,必须拷贝到线性RAM中?)。
4.Samsung S3C2440支持Nor Flash和Nand Flash启动,在TQ2440上可以通过跳线设置启动方式。主要由OM[1:0]这两位来决定从何处启动。具体含义如下:
OM[1:0]所决定的启动方式
OM[1:0]=00时,处理器从NAND Flash启动
OM[1:0]=01时,处理器从16位宽度的ROM启动
OM[1:0]=10时,处理器从32位宽度的ROM启动。
OM[1:0]=11时,处理器从Test Mode启动。
Arm的启动都是从0地址开始,所不同的是地址的映射不一样。在arm开电的时候,要想让arm知道以某种方式(地址映射方式)运行,不可能通过你写的某段程序控制,因为这时候你的程序还没启动,这时候arm会通过引脚的电平来判断。
a.当引脚OM0跟OM1有一个是高电平时,这时地址0会映射到外部nGCS0片选的空间(Bank0),也就是Norflash,程序就会从Norflash中启动,arm直接取Norflash中的指令运行,不需要将Norflash中的内容拷贝到SDRAM中来。
b.当OM0跟OM1都为低电平,则0地址内部bootbuf(一段4k的SRAM)开始。系统上电,arm会自动把NANDflash中的前4K内容拷贝到bootbuf(也就是0地址),然后从0地址运行。
这时NANDFlash中的前4K就是启动代码(他的功能就是初始化硬件然后在把NANDFlash中的代码复制到RAM中,再把相应的指针指向该运行的地方)
5.启动代码应该做什么?
由于Nand Flash控制器从Nand Flash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K里,我们必须完成S3C2440的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行,至于将2440当做单片机玩裸跑程序的时候,就不要做这样的事情,当代码小于4K的时候,只要下到nand flash中就会被搬运到内部RAM中执行了。
bootloader在某种意义上来说即是一个启动代码,种类有很多(vivi uboot 等),但是功能上无非就是完成一些初始化。bootloader是芯片复位后进入操作系统之前执行的一段代码,完成由硬件启动到操作系统启动的过渡,为运行操作系统提供基本的运行环境,如初始化CPU、堆栈、初始化存储器系统等,其功能类似于PC机的BIOS.
2. 地址空间:每个bank为128MB (总共1GB);
3. 除了bank0其余所有banks的数据位宽是可编程的(8/16/32-bit);(bank0是16/32位)
4. 总共8个memory banks,其中6个bank是接ROM,SRAM等,其余2个bank是接ROM,SRAM,SDRAM等;
5. 7个memory bank的起始地址是固定的;(发现size也是固定的,128MB)
6. 1个memory bank的起始地址和大小是可灵活可变的;
7. 所有banks的访问周期数是可编程的;
8. 支持片外等待信号以扩充总线周期;
9. SDRAM在Power down模式下支持自动刷新.
2. Nand Flash存储接口: 支持256Words,512Bytes,1KWords和2KBytes Page;
3. 软件模式: 用户能直接访问nand flash;
4. 接口: 支持8/16-bit Nand flash存储接口;
5. 支持大小端模式;
6. 硬件ECC发生器:检测和指示(软件纠正)(此处不怎么理解);
7. Steppingstone: 4KB SRAM Buffer,在nand flash启动过后可以用作它处.
此为bootloading过程图:
当系统处在复位状态时,Nand flash控制器从管脚NCON,GPG13,GPG14,GPG15得到nand flash的一些信息(如page size,bus width等,见下图).在上电或系统复位之后,则nand flash控制器将自动加载4KB boot loader代码,之后就是在steppingstone里执行.
注意:在自动启动这个过程中,ECC模块是不发挥作用的,所以前4KB nand flash应当不含bit error
- s3c2440存储控制器和地址以及启动的理解
- s3c2440存储控制器和地址以及启动的理解
- s3c2440存储控制器和地址以及启动的理解
- s3c2440存储控制器和地址以及启动的理解
- s3c2440存储控制器和地址以及启动的理解
- s3c2440存储控制器和地址以及启动的理解
- s3c2440存储控制器和地址以及启动的理解
- s3c2440存储控制器和地址以及启动的理解
- S3c2440的存储控制器
- S3C2440的存储控制器
- S3C2440 存储控制器 与 启动方式
- 对s3c2440的存储控制及启动代码的理解
- S3C2440存储控制器和MMU浅析
- S3C2440存储控制器和MMU浅析
- S3C2440 存储控制器和MMU浅析
- S3C2440存储控制器和MMU浅析
- S3C2440存储控制器和MMU浅析
- S3C2440存储控制器和MMU浅析
- Visual c++ 2010入门
- 编程技术备忘—响应按钮的down,up事件
- SQLServer 2005 和自增长主键identity说再见——NEWSEQUENTIALID()
- dojo.coords简析
- Cannot drop the database 'databasename' because it is currently in use
- s3c2440存储控制器和地址以及启动的理解
- WIN_DOS经典大全
- MessageBox换行
- XP启用Guest却无法访问网络怎么办
- windows内核情景分析学习笔记6
- Table 单元格重叠变粗 使用border-collapse:collapse; 可以解决
- GLSL教程2
- VC 2010的重大变化
- 基于MSBuild的xnb资源预生成机制