s3c2440 存储系统和IO空间认识
用友善之臂的板子已经有一段时间了.对于存储系统和I/O空间的认识也渐渐淡忘了,原因是在做其他开发时,一直用着自带的启动代码,从不关心板子的储存空间配置.最近在做网卡驱动,突然间就不知道网卡的地址是什么了,于是花点时间总结一下.废话少说.开始吧.
1,板上的存储资源
两个32M的SDRAM.
一个2M的NOR FLASH
一个128M(有些是64M)的NAND FLASH
以上这些资源看原理图便知.
2,板上的I/O资源
这块板子上(准确的说是S3C2440)的I/O空间是用存储映射的方法映射到存储空间上的,也就说I/O空间是要占用存储空间的.
3,各种存储器的区别与各自的用途
为什么这块板子上有那么多存储设备呢?原因很简单.每种存储设备的用途都不一样,而且为了兼顾广大用户的需要,也必须有不同的存储设备.首先说SDRAM.(写到这突然想起忘了说SRAM了.SRAM是静态随机存储器,它具有掉电不丢失数据且不必频繁刷新的特点,存储速度快,相当于PC的内存,看来这块相当于内存的东西很重要,可是刚刚怎么没说有这块东西呢?原因很简单.因为本来就没有.其实,如果需要随机存储器,SDRAM就是随机存储器啊,只是它需要不断的刷新以保持里面的数据(电平).说到这,SDRAM的作用同学们也应该了解了.也就说我们这块板子就是有64M的内存,足够用了.
其次说说NOR FLASH.NOR FLASH是具有SRAM接口特性的ROM.可是NOR FLASH才2M未免太少了,没错,是很少,可是我们有NAND FLASH啊,它也是ROM啊,所以加起来我们可以说这块板子有130M(66M)的硬盘.这也足够用了,可以少好几个Linux了.
再说说NAND FLASH,NAND FLASH可以做的很大,但是速度却比不上NOR FLASH,NOR FLASH能做快却不能做的大,所以,速度和容量是一对矛盾.为了克服这对矛盾,这板子上两种FLASH都有了.各有用途.另外,初学者一定要知道NAND FLASH 与NOR FLASH启动的不同吧.这是跟他们的特性有关的,接下来谈谈.
4,NOR FLASH 启动与NAND FLASH 启动
开发板上有一个S2开关,当它打在NOR一端是就是NOR启动.相反,打在另一端就是NAND FLASH启动了.先说着两种启动的不同,再说说硬件上是如何启动的,空间有时如何分配的.当S2打在NAND FLASH启动,那么程序就是在NAND FLASH上跑起来.其实,在内部还有一个4K字节的steppingstone的缓冲器(其实这是一个SRAM),当选择NAND FALSH 启动时,这个缓冲器映射在地址0x0000_0000上,而它负责将NAND FLASH上的代码复制到SDRAM上(大家都知道,程序运行时都是在RAM上运行的,怎么可能是在FLASH上运行呢,其实就是将FLASH上的代码复制了而已)而负责复制这段代码的东西就是传说中的BIOS啦.
当S2打在NOR FLASH一端时,又有什么区别呢?当选择用NOR FLASH启动时,2M的NOR FLASH就映射到地址0x0000_0000上,程序就是从这里运行了.那难道程序就能从NOR FLASH上运行吗?当然不行,那为什么可以在这里启动呢,其实这个NOR FLASH已经安装了BIOS的了(若有读者不知什么是BIOS,那就暂且认为它的功能就是从FLASH上复制代码到SDRAM就可以了)
4,S3C2410 S3C2440NAND 存储系统
大家都知道,32位可以寻址4G空间.但是S3C2440却的存储空间里把4G这样子分的:
(途中只显示最低的1G)
0x4000_0000只有还有3G空间是这样分配:
OM[1:0]=01或者是10 时:0x4000_0000-0x4000_0fff.这4K字节的就是前面说的stepingstone的啦.0x4000_0fff_0x4800_0000是没用到的.0x4800_0000-0x6000_0000的空间是特殊功能寄存器的.你发现,所有的寄存器都是在这个范围内的.0x6000_0000—0Xffff_ffff的还是未用到的.
OM[1:0]=00时.这个时候如上图所示.刚刚说的steppingstone映射到ox000_0000那里,也即是途中的BOOT INTERNAL SRAM.其他的一样.
其实.S3C2440把低1G的空间分成了8块,由图可知,第0至6这七块的起始地址是不变的.而第七段的地址是可变的(它的地址有第六块需要用到多少来决定,反正就是第六第七是连在一起的).前6块可以是ROM SRAM .最后两块不但可以是ROM,SRAM外,还可以是SDRAM.其实啊,简单点的说,就是只有最后两块才能是SDRAM.也就是说SDRAM必须要映射到这两块里面.mini2440就是选择映射在第七块上,所以SDRAM的起始地址是0x3000_0000(这就是手册上为什么在加载测试程序时DNW的初始值要设为这个,它就是为了想程序直接加载到SDRAM上,这只是做实验而且,掉电后还是会丢失的.所以做产品时是不可能这样做的).
刚刚说S3C2440把存储空间分为8块,它为什么要这么做呢?其实很简单,即使它不这么做,我们也会这么做的.先了算一算数:每块128M,那就是需要27根地址线来寻址.而8块呢就跟着引出与之一一对应的8跟片选引脚.讲到这聪明的读者必能想到.其实这8根片选引脚就是里面用3根地址线译码出来的.所以一共用了30根地址线,30根不正好是1G么.呵呵.
二代嵌入式S3C2440开发备忘录-第一篇:知识准备共九篇
1. 指令集架构和系列
指令集架构 代表系列
V4-ARM7
V5-ARM9
V6-ARM11
V7 Cortex-M:
Cortex-M0
Cortex-M3
Cortex-M4
Cortex-R:
Cortex-A:
Cortex-A7
Cortex-A8
Cortex-A9
V8(64Bit/异构) Cortex-A5x:
Cortex-A53
Cortex-A55
Cortex-A57
2. 寄存器和组工作模式
USER/SYS FIQ SCV ABORT IRQ UND
R0
R1
R2
R3
R4
R5
R6
R7
R8 R8'
R9 R9'
R10 R10'
R11 R11'
R12 R12'
R13(SP) R13' R13' R13' R13' R13'
R14(LR) R14' R14' R14' R14' R14'
R15(PC)
CPSR
SPSR SPSR SPSR SPSR SPSR
统计:
R0-R15 = 16
CPSR/SPSR = 6
R13/R14 = 10
R8'-R12' =5
16 + 6 + 10 + 5 = 37
CPSR:
31 30 29 28 27~8 7 6 5 4~0
N Z C V 保留 I F T M[4:0]
N:
N=1 -> 计算结果为负数
N=0 -> 计算结果为正数或0
Z:
Z=1 -> 运算结果为零
Z=0 -> 运算结果不为零
对于CMP指令,Z=1表示相等
C:
加法指令产生进位C=1,否则C=0
减法指令产生借位C=0,否则C=1
对于有移位操作的指令,C为操作中最后被移出的一位
V:
V=1 -> 溢出
V=0 -> 无溢出
I:
I=1 ->禁止IRQ
F:
F=1 ->禁止FIQ
T:
T=1 ->Thumb指令集
M:
处理器模式
0b10000->用户模式
0b10001->FIQ
0b10010->IRQ
0b10011->SVC
0b10111->中止
0b11011->未定义
0b11111->系统
LINUX用户态:
1. 用户模式(usr):应用程序执行态
LINUX内核态:
//----------------特权模式----------------//
2. 系统模式(sys):运行具有特权的操作系统任务
3. 中断模式(irq):通用中断处理
4. 快中断模式(fiq):支持数据传送或者通道处理
5. 未定义指令终止模式(und):当未定义指令被执行时进入该模式,可用于支持硬件
6. 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护
7. 管理模式(svc):操作系统使用的保护模式
在特权模式中,除了SVC以外,其他都属于异常模式包括sys/irq/fiq/und/abt
复位和软中断会进入SVC模式,所以ARM上电后会进入SVC模式,BootLoad就是在SVC模式下运行的
操作系统起来后从init进程后就进入用户态;用户态进入系统态有3种方式:软中断、异常(如缺页)、周边设备产生中断
软中断是主动方式,其他两种是被动进入内核态
3. S3C2440启动方式
3.1. 当引脚OM0跟OM1有一个是高电平时,这时地址0会映射到外部nGCS0片选的空间,也就是Norflash,程序就会从Norflash中启动,arm直接取Norflash中的指令运行。
3.2. 当OM0跟OM1都为低电平,则0地址内部bootbuf(一段4k的SRAM)开始。系统上电,arm会自动把NANDflash中的前4K内容考到bootbuf(也就是0地址),然后从0地址运行。这时NANDFlash中的前4K就是启动代码(他的功能就是初始化硬件然后在把NANDFlash中的代码复制到RAM中,再把相应的指针指向该运行的地方)
3.3. 不管是从NORFLASH启动还是从NAND FLASH启动,ARM都是从0x0000 0000地址开始执行的
3.4. 由于Nand Flash控制器从Nand Flash中搬移到内部RAM的代码是有限的,所以在启动代码的前4K里,我们必须完成S3C2440的核心配置以及把启动代码(U-BOOT)剩余部分搬到RAM中运行,至于将2440当做单片机玩裸跑程序的时候,就不要做这样的事情,当代码小于4K的时候,只要下到nand flash中就会被搬运到内部RAM中执行了
3.5.
NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来
NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据
通俗的说,只给地址不行,要先命令,再给地址,才能读到NAND的数据,在一个总线完成的。
结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash
3.6. 在2440中为什么可以配置成从Nand Flash中启动程序?
如果S3C2440被配置成从Nand Flash启动, S3C2440的Nand Flash控制器有一个特殊的功能,在S3C2440上电后,NandFlash控制器会自动的把Nand Flash上的前4K数据搬移到4K内部SRAM中,(此内部RAM被称为Steppingstone)并把0x00000000设置内部RAM的起始地址,CPU从内部RAM的0x00000000位置开始启动。这个过程不需要程序干涉。程序员需要完成的工作,是把最核心的启动程序放在Nand Flash的前4K中,也就是说,你需要编写一个长度小于4K的引导程序,作用是将主程序拷贝到SDRAM中运行(NF地址不是线性的,程序不能直接运行,必须拷贝到线性RAM中
3.7. 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启动
3.8. 当从NAND启动时
cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行
3.9. 当从非Norflash启动时
nor flash被映射到0x00000000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x40000000). 然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)
3.10. Nandflash和Norflash通常在ARM(搭载Linux)系统中充当什么角色?
如Mini2440的nandflash有128M,而Norflash有2M,而系统中一般Bootloader:200KB, kernel:2M, fs:100M, 这样首先这些数据不会都存放在Norflash中,所以Nandflash中存放Bootloader/kernel/fs, 而Norflash存放Bootloader,这样Mini2440既可以从Nandflash启动,也可以从Norflash中启动。
3.11. 程序如果在Norflash里面运行,是不是意味着RAM在程序运行的这个过程没有任何意义?
程序编译完之后,有codesize和datasize,前者通常指的是存在flash中的代码,data通常是指在ram中的用户数据,如数组等。比如2M大小的未初始化数组,在code里面其实很小,只会指定code大小之类的参数,而程序启动后,由.bss段展开,则会产生在ram内对应2M大小的内存块
3.12. 所以,在使用openocd调试的时候,如果需要使用load_image xxx.bin载入程序到片内SRAM中调试的话,就要分2种情况
3.12.1 如果使用NandFlash启动,那SRAM地址为0,那下载程序到片内SRAM:load_image xxx.bin
3.12.2 如果使用NorFlash启动,因为SRAM地址为0x40000000,所以下载程序到片内SRAM应该这样使用:
load_image xxx.bin 0x40000000,如果没有加0x40000000,就默认下载到0x00000000地址,而NorFlash启动的情况下0x00000000处是NorFlash,而不是SRAM,但是openocd使用load_image命令只能实现简单的内存写,不能写NorFlash,
这样NorFlash烧不进,SRAM地址又不对,从而导致了程序即无法写入内存又无法写入NorFlash而丢失并且程序丢失了
openocd还不报错,显示一切正常,但运行的是之前存储在NorFlash里面的程序,不是要下载的目标程序,这点很容易误导人
相关问答
【sports怎么读】作业帮[回答]sports[英][spɔ:ts][美][spɔ:ts]生词本简明释义adj.有关运动的n.运动(sport的名词复数);运动会;突变;娱乐以下结果由金山词霸提供柯林斯高...
arm的基本资源?IIC总线通信。IIS总线。SPI。就这些就差不多了,学好上面这些内容,对学习Linux操作系统还是一些类似的ARM芯片都比较简单了。当然2440还有其他资源,像U...
心理健康咨询的方式有哪些?心理健康咨询方式有很多。如果是学生,学校都会有专门设置心理健康室,也会配备专业的心理健康老师,可以进行预约,如果学校没有配备,可以去找当地的心理健康...深...
【求一篇好的两分钟英文自我介绍父母,家庭,爱好.】作业帮[回答]IntroducemyselfMayIintroducemyselftoyou?MynameisTina,myChinesenameisXXX,mybirthdayis...
为何我的右下角mcafee图标不见了??-ZOL问答你把启动项删除了...用Windows优化大师一类的可视化启动项管理器试试,要不然运...XP系统控制面板--添加删除程序--找到McafeeBackupandRestore--右键卸载。V...
用迈克菲McAfee杀软,有些界面图标右下角多出个感叹号怎么去掉...Vista系统控制面板--程序和功能--找到McafeeBackupandRestore--右键卸载。有用(0)回复zhaiyanna笔记本的话是网线有问题了有用(0)回复精品应用...
【在英语中,一个句子中谓语动词只能有一个么?为什么?】作业帮[回答]谓语成分只能有一个,但是你可以用并列谓语动词,就是用连词比如and连接,至于为什么,只能说语法这么规定的,一个主语成分一个谓语成分,但是其实并不矛...
The End 歌词介绍 - 185**** 2440 的回答 - 懂得《TheEnd》Myhomeisinmotionasdarknessunfolds,Theairoverloadedthesky'sdancinggold,Bu...
迈克菲杀毒软件把我文件隔离了怎么恢復,我一气之下把软件卸载...C:\DocumentsandSettings\你的用户名\LocalSettings\ApplicationData\ESET\ESETSmartSecurity或者ESETNOD32...
请教一下,要肿么卸载mcafee-ZOL问答点击Start->ControlPanel(控制面板)->AddorRemovePrograms(添加或者删除程序):你会发现有四个关于McAfee的程序,你可以直接卸载掉以...