一、S3C2440地址空间的分配
1. s3c2440A 的存储器控制器有以下特性:
大小端(通过软件选择)
地址空间:每个bank有128M 的字节(总共1G字节/8个banks)
可编程的访问位宽,bank0(16/32 位),其他bank(8/16/32 位)
共8个存储器banks
6个是ROM,SRAM 等类型存储器bank
2个是可以作为ROM、SRAM、SDRAM 等存储器bank
7个固定的存储器bank起始地址
最后一个bank 的起始地址可调整
最后两个bank 大小可编程
所有存储器bank的访问周期可编程
总线访问周期可通过插入外部wait来延长
支持SDRAM 的自刷新和掉电模式
2. 寻址空间
s3c2440是32位的,所以理论上可以寻址4GB空间,内存(SDRAM)和端口(特殊寄存器),还有ROM都映射到同一个4G空间里。但是,芯片引脚上只给出了27根地址(ADDR[26:0]), 单靠芯片上的27根引脚,它只能控制128M的空间,剩下的在哪里?
在cpu芯片手册上,查它的内部寄存器的地址,我们可以找到一部分答案。比如这次总结笔记要讲的存储器控制寄存器,13个寄存器,每个寄存器的地址,都大于0x40000000的地址。而0x40000000(1G)是1G空间的分界线,也就是说,1G~3G之间的空间,实际上都是被芯片自己占用了。实际上,给用户的使用的空间,只有1G。
我们刚才说了,我们使用了128M,用了27根地址线。而1G空间,需要30根地址线。剩下的3根用在什么地方?查了资料,突然明白了。这三根被三星公司偷偷地用在了3-8译码器的输入端去了。而这个3-8译码器的输出端,就是对应这nGCS0~7,对应着8个bank。很明显了,三星的2440留给用户使用的这1G空间,27根线用于芯片引脚来控制具体的bank了,剩下的三根,用于选择当前处于哪个bank。
二、S3C2440系统启动
手册里说,2440启动方式决定于bank0,以及OM[1:0]。
Arm的启动都是从0地址开始,所不同的是地址的映射不一样。在arm开电的时候,要想让arm知道以某种方式(地址映射方式)运行,不可能通过你写的某段程序控制,因为这时候你的程序还没启动,这时候arm会通过引脚的电平来判断。
S3C2440支持两种启动方式:NandFlash和非NandFlash(例NorFlash)启动。
从NorFlash启动时,与nGCS0相连的NorFlash就被映射到nGCS0片选的Bank0空间,其地址被映射为0x0000 0000。
从NandFlash启动时,cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因此我们编写的启动代码要确保存储在0地址处。
在实际的开发中,一般可以把bootloader烧入到Norflash,程序运行可以通过串口交互,进行一定的操作,比如下载,调试。这样就很可以很方便的调试你的一些代码。Norflash中的Bootloader还可以烧录内核到Norflash等等功能。
NorFlash启动时,没有额外需要考虑的问题,因为这种情况下程序在系统启动前就存储在NorFlash中,我们只要保证将启动代码保存在NorFlash开始的位置即可,系统上电或复位时,0地址处的启动代码就会被执行。
NandFlash启动时,系统启动前所有的程序存储在NandFlash中,系统的启动过程稍微有点复杂:系统上电或复位时,0地址处为S3C2440内部自带的BootSRAM,启动前里面没有任何存储内容,启动后S3C2440先通过硬件机制将NandFlash前4k的内容拷贝到BootSRAM中,然后再运行里面的程序(从0地址处开始)。这种情况下我们需要保证将启动代码保存在NandFlash开始的位置,并且启动代码的大小要小于4K。
如果系统的所有程序在编译链接后的大小小于4K,那在系统的启动代码中无需考虑将程序从NandFlash搬运到SDRAM这个问题,因为所有的程序在启动时即全部由NandFlash拷贝至BootSRAM,程序在BootSRAM中运行即可;如果系统的所有程序在编译链接后的大小大于4K,那在系统的启动代码中就需要包含一段将系统的全部程序从NandFlash搬运到SDRAM的代码,因为系统启动时只将NandFlash的前4K拷贝到了BootSRAM中,还有部分程序在NandFlash中,而程序在NandFlash中是无法运行的,需要将所有程序拷贝至SDRAM并在其中运行,所以系统的启动代码中要包含这段有关程序拷贝的代码,并在所有程序拷贝完成后使程序跳转到SDRAM中运行。也就是说NandFlash启动时需要考虑到涉及的两次搬移,第一次搬运是S3C2440硬件机制自动实现的,无需干预,第二次搬运需要程序员来实现,搬运程序量大小是系统的所有程序。
关键字:S3C2440 地址空间 分配与启动
引用地址:
S3C2440地址空间的分配与启动
推荐阅读最新更新时间:2024-03-16 16:04
Qt2.2.0移植到ARM9(四)(JZ2440----S3c2440)
Linux:Ubuntu9.10 编译器版本:arm-linux-gcc-4.3.2 Qt:qtopia-free-src-2.2.0.tar.gz 依赖库:libjpeg库(参考移植(一));uuid库。 操作参考《嵌入式Linux应用开发完全手册》 1、安装qtopia2.2.0 (1)解压 qtopia-free-src-2.2.0.tar.gz位于系统的/work/GUI/qtopia目录下。 解压命令:$tar zxvf qtopia-free-src-2.2.0.tar.gz (2)编译、安装jpeg库(省略,之前已完成) (3)编译、安装uuid库(省略,之前已完成) (4
[单片机]
S3C2440触摸屏驱动实例开发讲解
一、开发环境 主 机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二、前提知识 1、Linux输入子系统(Input Subsystem): 在Linux中,输入子系统是由输入子系统设备驱动层、输入子系统核心层(Input Core)和输入子系统事件处理层(Event Handler)组成。其中设备驱动层提供对硬件各寄存器的读写访问和将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层提交给事件处理 层;而核心层对下提供了设备驱动层的编程接口,对上又提供了事件处理层的编程接口;而事件处理层
[单片机]
s3c2440 ads程序移植到keil中(二) 初步完成
如果我把参数配置发生改变呢 然后再一次编译 要包错误 如下所示 错误如下 这个错误解决不了 最后查看了网上网友的方法 又可以修改 但是引入了nand文件 最后反正知道了2440init.s文件要修改许多 所以我就不再这里继续整了 浪费时间 直接运用网上网友的东西即可 网友编写的地址 https://blog.csdn.net/hannibaychty/article/details/44873327 从买板子到现在,想想也有2个月啦,开始就想跑裸奔的,可是工程都是在ADS下,win7系统根本不能用,于是就想着怎么在MDK跑,可是MDK上s3c2440的启动文件是不完整的,因此不推荐使用,为此蛋疼聊好长一段时间,查了很
[单片机]
ARM_S3C2440中断分析
1.什么是中断 所谓中断,是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先安排的事件服务的中断程序中去,服务完毕,再返回去执行刚才被中断的程序。 2.什么是中断优先级 中断优先级是指,中断源被响应和处理的优先等级。设置优先级的目的是为了在有多个中断源同时发出中断请求时,CPU能够按照预定的顺序(如:按事件的轻重缓急处理)进行响应并处理。 3.什么是中断嵌套 中断嵌套是指当CPU正在处理某个中断源即正在执行中断服务程序时,会出现优先级更高的中断源申请中断,为了使更急的中断源及时得到服务,需要暂时中断(挂起)当前正在执行的级别较低的中断服务程序,去处理更
[单片机]
S3C2440 测试程序(二)RTC显示实验
源代码: void RTC_Display(void) { U16 year ; U8 month, day ; // week U8 hour, minute, second ; RTC_Time_Set() ; 注: 初始日期和时间的设置 Uart_Printf( \nRTC TIME Display, press ESC key to exit !\n ) ; while( Uart_GetKey() != ESC_KEY ) { rRTCCON = 1 ; //RTC read and write enable year = 0x2000+rBCDYEAR ; //2012 month = rBCDMON
[单片机]
S3c2440处理器中nor flash启动和nand flash启动问题
S3c2440是三星公司推出的一款基于ARM920T的处理器,采用ARM内核,不同于单片机,无片上rom与ram,必须搭配相应的外围电路进行使用,现在,让我们从零开始进行这一块MCU的学习,为了入门简单方便,前期我不会搭载任何操作系统,本手册写到哪算哪. 1.什么是nor flash启动和nand flash启动 在任何视屏教程里面,都会告诉你一个开关左右选择就能norflash启动或者nand flash启动,norflash启动能直接运行代码,nand flash启动不能直接运行代码,可是为什么呢? 要知道这一点,首先要明白nandflash和norflash的区别,首先,norflash是随机存储介质,也就是说,对n
[单片机]
s3c2440定时器简介
S3c2440 有5 个16 位的定时器。定时器0、1、2、3 有脉宽调制功能(PWM)。定时器4有一个没有输出引脚的内部定时器。定时器0 有一个用于大电流设备的死区生成器。 定时器0 和1 共享一个8 位的预分频器(预定标器),定时器2,3,4 共享另一个8 位预分 频器. 定时器的时钟源为PCLK,首先经过预分频器降低频率后,进入第二个分频.可以生成5 种不同的分频信号(1/2,1/4,1/8,1/16 和TCLK) 定时器启动后,TCNTn开始减一计数,当TCNTn 等于TCMPn时, TOUTn 反转, TCNTn继续减数. 当TCNTn= 0 时, TOUTn 再次反转,并触发中断(中断已经使能).
[单片机]
I2C总线学习—查缺补漏—S3C2440的I2C控制器
学习了IIC总线协议的理论部分,觉得应该学习具体操作2440的IIC控制器,毕竟最终都是为了学习S3C2440,所以就把这一部分补上。 S3C2440的I2C接口有四种工作模式:主机发送器、主机接收器、从机发送器、从机接收机。其内部结构如下图所示。 从上图可以看出,S3C2440提供4个寄存器来完成所有的IIC操作。SDA线上的数据从IICDS寄存器经过移位寄存器发出,或通过移位寄存器传入IICDS寄存器;IICADD寄存器中保存S3C2440当做从机时的地址;IICCON、IICSTAT两个寄存器用来控制或标识各种状态,比如选择工作工作模式,发出S信号、P信号,决定是否发出ACK信号,检测是否
[单片机]