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-13 07:43

基于S3C2440的UART传输小结
这里简单地介绍一下通过寄存器来控制S3C2440的UART传输。 查看S3C2440的芯片手册可以发现UART有着发送和接收的缓存区,在缓存区有数据后其便一个字节一个字节地将数据传输到对应端口处。 这里介绍其中使用到的几个寄存器。 ULCONx:用于设置数据的数据位、校验位、停止位之类的信息。 UCONx:设置查询方式以及UART的时钟源。 UFCONx:是否使用FIFO之类的方式。 UMCONx:是否使用流控 UBRDIVx:设置UART的波特率, 一般有两类:一种是标准的串口波特,为921600的约数,如300、600、1200、2400、4800、9600、19200、38400、43000、
[单片机]
基于<font color='red'>S3C2440</font>的UART传输小结
s3c2440的简单BOOTLOADER
调试了很久终于成功启动了板子,这个程序分两个部分,一个是启动代码boot.s负责初始化硬件并拷贝前4k的程序到内存中执行。另外一个是主程序文件main.c,main设置UART并使用串口循环输出打印一个类似于shell的界面,可以接收命令,但暂时没做命令解释,功能还不全,主要是为了看看能不能实现基本的BOOTLOADER功能。 mian.c #define BUF_SIZE 100 #define GPHCON (*(volatile unsigned long *)0x56000070) #define GPHUP (*(volatile unsigned long *)0x56000078) #define ULCON0
[单片机]
s3c2440裸机-LCD编程-5-LCD上实现画点线圆
1.画点 无论是何种图形,都是基于点来构成的,因此我们需要先实现画点,其他的都是上层的一些数据处理了,像各种图形、甚至色彩鲜艳的图片无非都是一些由点构造出的数据而已。 我们在在farmebuffer.c实现画点,在geomentry.c实现画线、画圆等几何图形,font.c实现画字。 那么一个像素点要显示到lcd上,我们要知道它的位置坐标,然后还要知道它的颜色值,假设该像素点的坐标为(x,y),那么该像素的地址为: (x,y)= fb_base + (xres*(bpp/8))*y +x*bpp/8; 那么所以在画点前需要先获取lcd参数:fb_base、xres、yres、bpp; static unsigned
[单片机]
存储控制器和SDRAM 实验
S3C2440 存储控制器(memory controller)提供了访问外部设备所需的信号,这是一种通过总线形式来访问扩展的外设。 S3C2440 的存储器控制器有以下的特性: 支持小字节序、大字节序(通过软件选择) 每个BANK的地址空间为128MB,总共1GB(8 BANKs) 可编程控制的总线位宽(8/16/32 -bit),不过 BANK0 只能选择两种位宽(16/32 -bit) 总共8个BANK, BANK0 ~ BANK5 可以支持外接 ROM,SRAM等,BANK6 ~ BANK7 除可以支持 ROM,SRAM外,还支持SDRAM等; BANK0 ~ BANK6 共7个BANK的起始地址是固定的; BAN
[单片机]
存储控制器和SDRAM 实验
S3C2440裸机------Nor Flash编程_擦写读
1.读NorFlash 我们首先来实现读flash的函数,我们默认每次读取64个字节,然后我们把读取到的内容打印出来,其中前面打印数值,后面打印字符,对于不可见字符用...代替。 void do_read_nor_flash(void) { unsigned int addr; volatile unsigned char *p; int i, j; unsigned char c; unsigned char str ; /* 获得地址 */ printf( Enter the address to read: ); addr = get_uint(); p =
[单片机]
<font color='red'>S3C2440</font>裸机------Nor Flash编程_擦写读
S3C2440看门狗电路分析
看门狗的作用我想大家都应该清楚,S3C2440看门狗定时器它不仅可以当作看门狗来使用,还可以当作普通的定时器来使用。S3C2440看门狗电路模块框图: 看门狗电路采用PCLK作为时钟源,PCLK通过两个分频器之后才是看门狗定时器的工作时钟。那看门狗定时器的时钟到底是多少呢,有如下计算公式: t_watchdog= 1/ prescaler value和division factor的取值是通过看门狗的控制寄存器WTCN来设置的,prescaler value取值范围为0~255,division factor取值有16、32、64和128。 S3C2440看门狗定时器如果是作为普通定时器来使用的话,WTCNT降为0时它可以
[单片机]
S3C2440—7.存储控制器访问外设
一.内存接口的概念 S3C2440是SOC,所以会有很多外设,一般驱动外设的方法可以分为: 通过CPU访问相应的的寄存器,然后通过控制器驱动外设 CPU直接访问外设地址,驱动外设 后一种访问方式是CPU直接对内存地址的访问,即通过内存接口访问外设,CPU通过片选线选定外设,通过地址线先选定地址,通过数据线进行控制。 我们称这种外设为内存类设备,通常有:NOR FLASH、网卡、SDRAM…… 那CPU是如何通过这些总线来驱动内存类设备呢?这就涉及到存储控制器了,下面就来介绍一下存储控制器的原理。 二.存储控制器(内存控制器) 2.1 什么是存储控制器? 存储控制器是按照一定的时序规则对存储器的访问进行必要控制的
[单片机]
<font color='red'>S3C2440</font>—7.存储控制器<font color='red'>访问</font>外设
郭天祥-S3C2440开发板Linux2.6.31移植教程
本人使用的开发板是广州天嵌的TQ2440开发板 最近使用了郭天祥的教程学习S3C2440嵌入式linux2.6.31系统移植,移植yaffs2文件系统成功后,发现开发板移植的系统的ping命令无法ping通电脑。后面通过烧录开发板自带的linux镜像文件和yaffs2文件系统,对比之后。发现本人的笔记本(联想G40系列),如果只接通过本地网卡与开发板直连,无法ping通,但是使用自己的台式电脑,可以使用网线直连开发板ping通,确认了问题的原因是: 1.笔记本在网线直连开发板的情况下,无法ping通开发板。 2.个人移植的linux 2.6.31操作系统驱动存在问题。 第一个问题很好解决,如果要继续
[单片机]
热门资源推荐
热门放大器推荐
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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