s3c2416的启动模式
/*
@编写人:mingliang.lu
@日 期:2014-10-22
@备 注:个人读书笔记,仅供参考
@E-Mail : mingllu@163.com
*/
三星公司推出了大约3版本的s3c2416的数据手册,分别是4月份,6月份,以及10月份的,各版本的数据手册中启动方式也经历了一些变化:
| nand启动? | iROM启动? | moviNand启动? |
4月份.2008年 | 支持 | 支持 | 支持 |
6月份.2008年 | 支持 | 支持 | 支持 |
10月份.2008年 | 已删除 | 支持 | 支持 |
从上述表格,不难看出,s3c2416启动方式从最初的
(Nand Boot Mode)/(iROM+外部存储设备Boot Mode)/(MoviNand Boot Mode)
到最新的
(iROM + 外部存储设备Boot Mode)/(MoviNand Boot Mode)
删除掉了nandBoot Mode这种启动模式,转而主推iROM+外部存储设备(Nandflash/MMC/SD卡等)启动方式。这样可以统一iROM MMC/SD/NAND吧!也就不用关心太多的启动方式。
关于3种启动方式,简单的介绍:
Nand启动(较新的数据手册中已经不再推荐使用),是指从标准的nandflash硬件接口设计电路,普通的nandflash启动的方式。其启动的步骤较为简单,系统上电后,nandflash控制器会将nandflash的偏移地址0x0处拷贝8k左右的代码到内部的ram 0x0地址处运行,用户代码从0x0地址处开始运行。
iROM启动,是指使用s3c2416内部自带的rom(大约32kb),将存放在外部存储器(如,nandflash,mmc,sd卡,cf卡等)中的程序加载到内存(sdram)中去运行的启动方式。iROM的启动一般认为分四步走,依次是:
通过设置[OM4, OM3, OM2,OM1, OM0] = [0,1,0,0,x],上电复位即可从IROM启动,IROM启动即先执行芯片固化代码(在0x0位置处),固化代码先进行初始化芯片,如设置系统时钟,初始化堆栈等,随后会再根据相关引脚的配置([GPC7:GPC5]),确定启动设备是SD/MMC还是NAND,对于IROMNAND启动,固化代码从[GPC7:GPC5]的引脚配置状态得出NANDFLASH的信息,如页大小,地址周期多少。之后固化代码再从NANDFLASH的0x0地址偏移出读出8k的代码到内部RAM地址0x40000000处,这块8k的IRAM就被叫做Steppingstone。因为这8k的IRAM代码往往需要进一步引导用户的其它代码到RAM运行。对于IROM SD/MMC启动,固化代码会直接从SD/MMC卡的一个特殊位置读出8k的代码到0x40000000处的Steppingstone。复制完代码到Steppingstone后,固化代码跳转到0x40000000处开始执行用户的代码。
moviNand启动,是指采用了norflash接口的特殊nandflash(samsung公司称之为moviNand,而sandisk公司也称之为iNAND),一般在手机娱乐设备使用,而一般的开发已经遗弃了Norflash一类设备。这一类的设备启动较为简单,不做分析这里。
Samsung 2416启动之-----iROM模式下的nandflash启动
s3c2416官方的数据手册中提出了两种启动的模式:
一种是利用外部的rom方式启动,启动设备如 rom(norFLash)/oneNand
一种是利用内部自带的iROM,并选择MoviNand/iNand/MMC card/nandFlash
等存储设备作为iROM启动方式下的启动设备。
注意:
OneNAND跟ROM在硬件设计上采用的同样的norflash类型的接口,即,地址和数据总线分开的方式,OneNand比ROM类型的设备具备了更大的容量,说的直白一些,OneNAND就是增强型norflash。
图1-1:s3c2416启动模式OM[4:0]设置
OM[4] | OM[3] | OM[2] | OM[1] | OM[0] | Operation Mode |
0 | 1 | 0 | 0 | 0 | iROM |
0 | 1 | 0 | 0 | 1 | iROM |
|
|
|
|
|
|
1 | 0 | 0 | 0 | 0 | Reserverd |
1 | 0 | 0 | 0 | 1 | JTAG |
1 | 0 | 0 | 1(16bit) | 0 | oneNand |
1 | 0 | 0 | 1(16bit) | 1 | oneNand |
1 | 0 | 1 | 0(8bit) | 0 |
ROM/ OneNand |
1 | 0 | 1 | 0(8bit) | 1 | |
1 | 0 | 1 | 1(16bit) | 0 | |
1 | 0 | 1 | 1(16bit) | 1 |
注:OM[0] : 0代表外部晶振,1代表外部时钟 OM[4:0]:01000 =0x08
配置OM[4:0]=0x08仅仅只是将启动的模式设置成了iROM模式,还需要配置GPC5/6/7
为IROM模式选择响应的存储设备,关于GPC5/6/7的配置值,见下图标所示:
举例:假如我们准备采用nandflash作为启动设备,nand的页大小为2048字节,参照nandflash芯片的收据手册可知道地址周期为5,我们可以配置GPC5/6/7应该配置成GPC[7:5]=101
综合上面所说的,我们要配置我们的开发板的启动模式为iROM模式,并且选择nandflash作为启动设备,那么我们正确的配置OM[4:0]以及GPC5/6/7的值应如下:
OM[4] | OM[3] | OM[2] | OM[1] | OM[0] | GPC7 | GPC6 | GPC5 |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 |