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.

s3c2440存储控制器和地址以及启动的理解
在实际的开发中,一般可以把bootloader烧入到Norflash,程序运行可以通过串口交互,进行一定的操作,比如下载,调试。这样就很可以很方便的调试你的一些代码。Norflash中的Bootloader还可以烧录内核到Norflash等等功能。
6.存储控制器的作用
在2440中分了8个bank,每个bank的基地址由nCGSx来选择,每个bank都接外设之后,就可以通过存储控制器来进行地址上的选择了。每个bank与外设的连接方式不一样,主要看外设是每次进行多少位的数据传输,如果是8位,这样CPU的地址线A0就可以直接接外设的A0,如果是16位,那么CPU的A1就该接到外设的A0,一次类推往后移位,具体原因见错位原因。nor flash接在bank0,数据线为16位。存储控制器的特性如下:
1. 大小端设置;
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模式下支持自动刷新.
7.Nand Flash控制器
1. 自动启动: 系统复位后,boot code搬运到4KB Steppingstone,然后在其内部执行;
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启动过后可以用作它处.
此控制器框图如下:


s3c2440存储控制器和地址以及启动的理解

此为bootloading过程图:

s3c2440存储控制器和地址以及启动的理解

当系统处在复位状态时,Nand flash控制器从管脚NCON,GPG13,GPG14,GPG15得到nand flash的一些信息(如page size,bus width等,见下图).在上电或系统复位之后,则nand flash控制器将自动加载4KB boot loader代码,之后就是在steppingstone里执行.
注意:在自动启动这个过程中,ECC模块是不发挥作用的,所以前4KB nand flash应当不含bit error

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 涂了唇釉吃饭怎么办 鱼缸里的鱼产卵怎么办 不排卵怎么办如何促排卵 萝卜咸菜盐咸了怎么办 吃了蚕蛹身上痒怎么办 玉米没煮熟吃了怎么办 新鲜核桃吃多了怎么办 吃了发霉的核桃怎么办 拔牙后肿的厉害怎么办 拨牙之后脸肿怎么办 种牙之后脸肿了怎么办 鼻子放假体老了怎么办 鸡蛋吃多过敏了怎么办 想把衣服换颜色怎么办 衣服用84洗坏了怎么办 衣服用84洗花了怎么办 衣服用84洗黄了怎么办 白色衣服用84漂黄了怎么办 84把衣服泡黄了怎么办 84把衣服洗花了怎么办 衣服用84洗掉色怎么办 被84褪色的衣服怎么办 衣服被84烧红了怎么办 84溅到衣服上边怎么办 84把衣服泡花了怎么办 衣服颜色洗旧了怎么办 蒙版画笔用不了怎么办 眼睛小血管破裂出血怎么办 雅漾喷头坏了怎么办 一夜都是浅睡眠怎么办 注塑机合不了膜怎么办 吸了塑料烧焦味怎么办 热熔的管漏水怎么办 45岁了月经不来怎么办 吃了芒果身上痒怎么办 10个月宝宝上火怎么办 1个月的宝宝上火怎么办 2个月的婴儿上火怎么办 1岁宝宝不吃奶粉怎么办 奶水不够宝宝又不吃奶瓶怎么办 13岁脸上长粉刺怎么办