1.首要应该先了解Flash ROM的品种
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是次序存取设备,不能够被随机拜访,程序就不能够分支或跳转,这样你怎样去规划程序。
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中的指令运转。
b.当OM0跟OM1都为低电平,则0地址内部bootbuf(一段4k的SRAM)开端。体系上电,arm会主动把NANDflash中的前4K内容考到bootbuf(也便是0地址),然后从0地址运转。
这时NANDFlash中的前4K便是发动代码(他的功用便是初始化硬件然后在把NANDFlash中的代码复制到RAM中,再把相应的指针指向该运转的当地)
5.发动代码应该做什么?
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发动往后能够用作它处.