s3c2440内存类设备访问原理

发布者:SparkStar22最新更新时间:2021-09-18 来源: eefocus关键字:s3c2440 手机看文章 扫描二维码
随时随地手机看文章

在嵌入式里面所谓内存类接口有SDRAM接口,NORFLASH接口,DM9000网卡接口等 ,他们都有一个共同点就是可以直接连S3C2440内存控制器,数据总线,地址总线;这三者缺一不可。


内存类接口可以通过地址直接访问内部数据,当然他们都有自己的一段可访问的地址范围。S3C2440将其1G地址空间划分为8个bank,每个bank有128M,所以芯片提供了8个片选信号线,每个片选信号线对应一个bank,一个片选信号连接一个设备,所以每个设备可访问的地址的范围是128M空间,128M=2的27次方个字节,所以芯片上面的地址线只有27跟,最大只能到A26。理论上32位的CPU应该有32跟地址线,因为最大可以到0xffffffff=2的32次方=4G,但S3C2440的设计只有1G的地址空间,其他的都保留了,这1G的空间又被砍成了8块,所以每块就只能分得128M=27跟地址线的操作空间,也可以以这么理解:这8个片选信号在芯片内部通过A27-A29这三根地址信号经过3-8译码器译码所得。


S3C2440有两种启动方式:NOR和NAND方式;

如果是NOR启动,那么NORFLASH的片选必须接CS0片选,因为系统启动是从0地址开始执行的;这种方式下里面的内部4K sram可用作其他用途,其起始地址为0x40000000。

如果是NAND启动,那么CS0片选则不能接其他设备,因为这个时候BANK0的地址已经被SRAM映射了。


再来看BANK67,这两个块芯片规定给内存使用的,每个可以放128M,连起来最多可以放256M的内存,而且BANK6跟BANK7的内存大小必须一样,因为扩充一个BANK,芯片内部必须加一根地址线去访问,所以内存必须是相同的。


其他的BANK1-5都随便放什么设备了,比如网卡。


当我们需要操作在某个bank里面的地址空间的时候,内存控制器对这个bank对应的cs信号线自动使能的,不需要软件单独去使能的(不像操作IIC总线外设的CS信号)。

这里以SDRAM为例讲讲原理:


这里有两个芯片,有数据总线,地址总线和存储控制信号线;

先看数据总线可以知道,每个芯片占16BIT,所以可以知道他们分别存放32BIT数据的低16位和高16位。


再来看地址线,控制器的A2地址接存储芯片的A0地址,为什么存在这种不对应性?

因为CPU认为1个地址对应1个字节,而这个图里面的一个SDRAM 1个地址对应的是16BIT,两个SDRAM加起来就是32BIT,所以一个地址对应4个字节;从图上可以看出2440地址最小接A2,所以每加一个地址就可以滚动4个字节,而存储器上前面分析了每加一个地址滚动4个字节,这样才能对应起来。所以32BIT设备的最小操作单位是4个字节,不管是读还是写,但是SDRAM不同于其他设备,他通过DQM信号线的控制,DQM就是掩码控制位,在sdram中每个DQM控制8bit Data,在读操作的时候没什么大的影响,比如读32位的sdram module,但只要其中低8bit的数据,没有关系,只要读出32bit数据,再在软件里将高24位bit和0“与”就可以了,有没有DQM关系不大,但在执行写操作时如果没有DQM就麻烦了,可能在软件上是写一个8bit数据,但实际上32根数据线是物理上连接到SDRAM的,只要WR信号一出现,这32位就会写sdram中去,高24bit数据就会被覆盖。通过使用DQM就可以将其对应的8bit屏蔽,不会因为写操作而覆盖数据了。这样就达到读写一个字节数据的目的了。而NORFLASH就没有这样的接口,所以他不能像SDRAM一样写数据,要写数据必须先读出来,再修改,再写进去。


再来看下为什么BA0与BA1为什么接CPU A24,25?

可以直接去看S3C2440的芯片手册告诉我们怎么接,但原理都是一样的;这个SDRAM的大小是32M,前面分析了一个BANK是128M,最大地址线可到A26,那么A25是64M,A24是32M,依此类推,我们这里挂了两块SDRAM,总大小64M,所以最大地址线是A25,然后是A24,连上BA0,BA1刚好对应这两根地址线的00 01 10 11可以控制SDRAM的4个块(最大单位),其他行列信号由低位地址线去控制了,行列地址线是共用的,通过RAS与CAS区别。


如果我们知道了行列的地址线宽,是否能算出SDRAM的存储大小?


我们使用的是16MX16的SDRAM,所以行地址有13跟,列地址有9跟,共22跟,这里2的22次方=4M 字节,然后还有A24与A25两根控制4个块,就有4Mx4=16M地址空间,再看数据总线16BIT,一个地址访问两个字节,所以就有16MX2个字节=32M 字节。

关键字:s3c2440 引用地址:s3c2440内存类设备访问原理

上一篇:s3c2440的处理器结构和外设连接
下一篇:ARM裸机点LED

推荐阅读最新更新时间:2024-11-18 01:05

s3c2440GPIO程序编写
1.GPIO简介: GPIO(通用输入/输出端口)是相对于芯片而言的,如果在对应的芯片存在GPIO引脚则可以通过读这些引脚来获取引脚的变化(即:引脚的高低电平的变化). s3c2440属于ARM920T,共有GPIO130个,分为A~J这9组 每一组GPIO对应三个寄存器,通过这三个寄存器来控制和访问 GPxCON:GPIO 控制寄存器 GPxDAT:GPIO数据寄存器 GPxUP:上拉电阻使能寄存器 每一个GPIO口又分为好几个GPIO口, GPF0, GPF1, GPF2, GPF3,GPF4,GPF5, GPF6, GPF7, GPG0,GPG1, GPG2, GPG3, GPG4, G
[单片机]
S3C2440开发板裸机程序系列06—LCD控制器
1.概述 S3C2440对LCD的支持还是很强大的,有广度有深度,这里只简单学一种,后续有精力再实践各种模式。 本篇从显示模式、显示时序、硬件连接、控制器寄存器设置等几个方面进行展开。 2.LCD显示模式 如前面所述,S3C2440支持多种灰度和彩色显示模式。这里只介绍16BPP(bit per pixel),即每个像素点用16bit,即占用2个字节。16BPP又有2种显示格式:5:6:5格式和5:5:5:1格式。 这里只以565格式为例。从上图可清楚的明白RGB三色对应的各位的对应关系。 3.LCD显示时序 LCD采用”之”字扫描,从左上角开始,将显示像素数据一行一行的显示到屏幕上,对于4.3
[单片机]
<font color='red'>S3C2440</font>开发板裸机程序系列06—LCD控制器
S3C2440特殊功能寄存器地址的深入挖掘
S3C2440集成了丰富了外设控制器(LCD控制器、USB Device控制器、USB Host控制器、NAND FLASH控制器、I2C控制器、SPI控制器等)。要控制这些外设就要设置相应控制器的寄存器以产生相应的驱动时序。学习S3C2440,主要是如何配置寄存器。 下面是S3C2440特殊功能寄存器地址: #define rBANKCON0 (*(volatileunsigned *)0x48000004) //Boot ROM control #define rBANKCON1 (*(volatileunsigned *)0x48000008) //BANK1 control #define rBANKCON2
[单片机]
对<font color='red'>S3C2440</font>特殊功能寄存器地址的深入挖掘
ARM S3C2440中断分析
1.什么是中断 所谓中断,是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先安排的事件服务的中断程序中去,服务完毕,再返回去执行刚才被中断的程序。 2.什么是中断优先级 中断优先级是指,中断源被响应和处理的优先等级。设置优先级的目的是为了在有多个中断源同时发出中断请求时,CPU能够按照预定的顺序(如:按事件的轻重缓急处理)进行响应并处理。 3.什么是中断嵌套 中断嵌套是指当CPU正在处理某个中断源即正在执行中断服务程序时,会出现优先级更高的中断源申请中断,为了使更急的中断源及时得到服务,需要暂时中断(挂起)当前正在执行的级别较低的中断服务程序,去处理更
[单片机]
s3c2440裸机开发环境的搭建
用于arm裸机程序开发的IDE基本有MDK,IAR,还有ADS,也可以选择在linux下安装交叉编译链来进行开发。笔者选择的是MDK作为我进行开发的IDE。下面介绍笔者搭建开发环境的过程。 笔者主要参考了两篇博文来进行开发环境的搭建的,分别是: http://blog.csdn.net/mybelief321/article/details/8910528 http://blog.csdn.net/shengnan_wu/article/details/8116815 笔者搭建后的相关环境如下: 开发板:mini2440 操作系统:Windows 8.1 64位 开发环境:MDK 4.6版本 仿真器
[单片机]
<font color='red'>s3c2440</font>裸机开发环境的搭建
S3C2440裸机------NandFlash编程_擦除与烧写
1.擦除 NandFlash是以块为单位进行擦除的,一个块是128K,从上面的时序图我们可以看到,首先我们要发出60命令,然后发出三个行地址,然后发送D0H,然后等待擦除结束。 int nand_erase(unsigned int addr, unsigned int len) { int page = addr / 2048; if (addr & (0x1FFFF)) { printf( nand_erase err, addr is not block alignnr ); return -1; } if (len & (0x1FFFF)) { printf(
[单片机]
<font color='red'>S3C2440</font>裸机------NandFlash编程_擦除与烧写
s3c2440#SDRAM#初始化
一、引脚说明 JZ2440的SDRAM接线图 可以看到两块SDRAM并行接入到开发板,一共有27条地址线,32条数据线(各16条) (1)CLK:SDRAM工作的时钟,并且所有的输入信号都是在CLK的上升沿进行检测的,也就是说我们给SDRAM给的任何命令,一定要在CLK的上升沿保持稳定,以免SDRAM获取我们给出的命令时出现错误。 (2)CKE:时钟使能信号,高电平(激活)、低电平(无效),是用来控制SDRAM内部时钟是否工作的一个信号(在SDRAM内部也是有时钟的哦) (3)其中地址线分出两条来选择bank,因为SDRAM中有四个bank。 (4)RAS、CAS、WE:这三根线就是用来给SDRAM发命令的
[单片机]
s3c2440#SDRAM#初始化
S3C2440之ADC分析
一、硬件原理分析 我们从结构图和数据手册可以知道,该ADC模块总共有8个通道可以进行模拟信号的输入,分别是AIN0、AIN1、AIN2、AIN3、YM、YP、XM、XP。那么ADC是怎么实现模拟信号到数字信号的转换呢?首先模拟信号从任一通道输入,然后设定寄存器中预分频器的值来确定AD转换器频率,最后ADC将模拟信号转换为数字信号保存到ADC数据寄存器0中(ADCDAT0),然后ADCDAT0中的数据可以通过中断或查询的方式来访问。对于ADC的各寄存器的操作和注意事项请参阅数据手册。 开发板通过一个10K的电位器(可变电阻)来产生电压模拟信号,然后通过第一个通道(即:AIN0)将模拟信号输入ADC。左图中的Aref表示AD的参
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved