历史上的今天
今天是:2024年11月25日(星期一)
2019年11月25日 | s3c2440 NAND与NOR启动方式详解+个人验证
2019-11-25 来源:eefocus
一:地址空间的分配
1:s3c2440是32位的,所以可以寻址4GB空间,内存(SDRAM)和端口(特殊寄存器),还有ROM都映射到同一个4G空间里.
2:开发板上一般都用SDRAM做内存flash(nor、nand)来当做ROM。其中nand flash没有地址线,一次至少要读一页(512B).其他两个有地址线
3:nandflash不用来运行代码,只用来存储代码,NORflash,SDRAM可以直接运行代码)
4:s3c2440总共有8个内存banks
6个内存bank可以当作ROM或者SRAM来使用
留下的2个bank除了当作ROM或者SRAM,还可以用SDRAM(各种内存的读写方式不一样)
7个bank的起始地址是固定的
还有一个灵活的bank的内存地址,并且bank大小也可以改变
5:s3c2440支持两种启动模式:NAND和非NAND(这里是nor flash)。
具体采用的方式取决于OM0、OM1两个引脚
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启动。
上述结论,本人已验证。验证过程如下:
使用2440init.s文件中启动方式源码,验证启动方式。
方法:读取BWSCON寄存器中[2:1]即读取OM[1:0]状态
ldr r0, =BWSCON
ldr r0, [r0]
ands r0, r0, #6 ;OM[1:0] != 0, NOR FLash boot
bne copy_proc_beg ;do not read nand flash
1、nor flash启动+Jlink调试过程,详见下图

注:BWSCON寄存器地址ox4800, 0000
结论:由上图可知:BWSCON=0x2212,1112 ,即OM[1:0]=01,即处理器从16位宽度的ROM启动。而实际开发板确实从NOR flash启动,同时NOR flash型号是EN29LV160AB 确实是16位宽度。
2、nand flash启动+Jlink调试,详见下图

结论:由上图可知:BWSCON=0x2212,1110,即OM[1:0]=00,即处理器从nand flash启动。而实际开发板确实从nand flash启动。
当从NAND启动时
cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行
当从非NAND flash启动时
nor flash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000).然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)。
总结:
Arm的启动都是从0地址开始,所不同的是地址的映射不一样。在arm开电的时候,要想让arm知道以某种方式(地址映射方式)运行,不可能通过你写的某段程序控制,因为这时候你的程序还没启动,这时候arm会通过引脚的电平来判断。
1当引脚OM0跟OM1有一个是高电平时,这时地址0会映射到外部nGCS0片选的空间,也就是Norflash,程序就会从Norflash中启动,arm直接取Norflash中的指令运行。
2当OM0跟OM1都为低电平,则0地址内部bootbuf(一段4k的SRAM)开始。系统上电,arm会自动把NANDflash中的前4K内容考到bootbuf(也就是0地址),然后从0地址运行。
这时NANDFlash中的前4K就是启动代码(他的功能就是初始化硬件然后在把NANDFlash中的代码复制到RAM中,再把相应的指针指向该运行的地方)
为什么会有这两种启动方式,关键还是两种flash的不同特点造成,NOR FLASH容量小,速度快,稳定性好,输入地址,然后给出读写信号即可从数据口得到数据,适合做程序存储器。NAND FLASH 总容量大,但是读写都需要复杂的时序,更适合做数据存储器。这种不同就造成了NORflash可以直接连接到arm的总线并且可以运行程序,而NANDflash必须搬移到内存(SDRAM)中运行。
在实际的开发中,一般可以把bootloader烧入到Norflash,程序运行可以通过串口交互,进行一定的操作,比如下载,调试。这样就很可以很方便的调试你的一些代码。Norflash中的Bootloader还可以烧录内核到Norflash等等功能。
上一篇:TX2440裸机程序之-LED
史海拾趣
|
各位高手有没有测试过加速计和陀螺仪这两颗的功能阿,三轴加速计有X,Y,Z三个电压输出,都是经过其内部的AD转换后输出的,不知道这三个方向上的电压是怎么变化的,是有加速度的时候变化呢,还是位置改变了变化啊? 陀螺仪有X,Y两个电压输出,也是 ...… 查看全部问答> |
|
很多MTD驱动都有调用simple_map_init()函数来初始化read,write等函数,不知道这个函数的用法,请大虾帮忙讲一讲啊,如果我需要改变这些read,write函数,该怎么办啦?… 查看全部问答> |
|
求职: 请问有没有人需要高级WINCE工程师--限深圳地区! 求职: 请问有没有人需要高级WINCE驱动工程师--限深圳地区! 如有,请如下EMAIL联系 lumit_hu@126.com… 查看全部问答> |
|
上周在研讨会上买了英蓓特的开发板,试了下,感觉有几个地方不爽,所以就自己动手DIY了:1)USB供电问题,必须插2条USB线,可怜我的本本一共才3个,鼠标用了一个,被他全占了,其它USB-232就没法用了;2)板子附带的1602没有接背光,而实际这 ...… 查看全部问答> |
|
各位高手大家好,小妹我用此板子的UART出了一點問題,大家可以幫幫我嗎? 感激不盡 問題是這樣的,我開啟了八個UART,為了使輸入資料可以做辨識,個別在UART4跟UART5的地方 加了三個#字號跟一個通道編號 例如:UART4是 ###Edata 這樣 ...… 查看全部问答> |
|
SimpliciTI简介: SimpliciTI是TI开发的专门针对其CCxxxx系列无线通信芯片的网络协议。 它支持两种网络拓扑结构:严格的点对点通信和基于星型的网络拓扑结构,在星型连接中Hub点在SimplciTI被称为Access Point,简称AP.(AP就是常说的网关,数据中 ...… 查看全部问答> |
|
老师给了一块tm4c 1294的launchpad,说让我们自己玩,但之前没接触过arm这些东西,接触过单片机;所以完全不知道怎么开始??这块板子能干嘛我都不知道,该怎么学习??完全处于迷茫状态??望大神相助,指点一二,让我有个方向!!非常感谢! … 查看全部问答> |




