学习笔记--- S3C2440 内存类设备接口接线与访问原理

发布者:转眼人老最新更新时间:2022-04-02 来源: 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 从NANDFLASH启动的设计原理与过程
下一篇:学习笔记--- S3C2440 对NANDFLASH操作原理与测试代码分析

推荐阅读最新更新时间:2024-11-22 14:23

关于S3C2440电路板布线的总结
S3C2440芯片间距0.8毫米,17*17个引脚,相对于6410来说,布线还是比较容易的,如果一般要求,四层板就可以满足,但是板的面积要稍大一点,保证能够走通线。 用2440,一般的应用是基板与核心板的形式,因为核心板需要做最少四层板,而基板一般两层就可以了,当然像数码相框,GPS之类的就不用基板了;核心板的电路是不用经常更换的,而基板的电路可能要不时的调整,所以,用这种两层板的形式对于小批量的应用,是能够节约不少的。 说到布线,先说层数,友善之臂的MINI2440是4层的,MICRO2440的核心板是6层的,当然面积比较小,如果你不是很在意面积的话,四层板就足够了,可以比友善的稍大一点,如果实在要求很小,
[单片机]
S3C2440移植uboot之新建单板_时钟_SDRAM_串口
文章目录 1.新建单板 1.1 将2410的单板文件夹拷贝成2440: 1.2 将2410的头文件拷贝成2440 2.修改boards.cfg,使uboot支持2440单板: 3.修改uboot系统时钟 4.烧写修改后的uboot 5.烧写uboot,发现串口已有数据,但是乱码 5.1进入archarmcpuarm920ts3c24x0Speed.c下的get_HCLK ()函数: 5.2编译测试 5.3所以就直接去掉该文件,不让编译器编译即可,步骤如下所示: 加粗样式 1.新建单板 1.1 将2410的单板文件夹拷贝成2440: cd /work/system/u-boot-2012.04.01/board/sam
[单片机]
<font color='red'>S3C2440</font>移植uboot之新建单板_时钟_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编程_擦写读
基于ARM处理器S3C2440和Linux的I2C触摸屏设计
  0引言   随着计算机相关技术的发展,ARM嵌入式系统受到越来越广泛的应用,与人们生活的结合也越来越紧密。触摸屏设备因其友善的人机交互性,操作方便灵活,输入速度快,被广泛的应用于这种嵌入式领域中。嵌入式Linux系统具有开发源代码、内核稳定、可裁减性等特点,吸引着众多商业公司和自由软件开发者的目光,成为嵌入式系统领域不可或缺的操作系统之一。触摸屏是一种输入设备,操作简单易学,可靠性高,不占额外的空间,是最常用的便携式系统的输入设备。特别是电阻式触摸屏,它结构简单,成本低,透光效果好,工作环境和外界完全隔离,不怕灰尘和水气,同时具有高解析度、高速传输反应、一次校正、稳定性高、不漂移等特点,因而被广泛用于工业控制领域。   1
[单片机]
s3c2440 ads程序移植到keil中(二) 初步完成
如果我把参数配置发生改变呢 然后再一次编译 要包错误 如下所示 错误如下 这个错误解决不了 最后查看了网上网友的方法 又可以修改 但是引入了nand文件 最后反正知道了2440init.s文件要修改许多 所以我就不再这里继续整了 浪费时间 直接运用网上网友的东西即可 网友编写的地址 https://blog.csdn.net/hannibaychty/article/details/44873327 从买板子到现在,想想也有2个月啦,开始就想跑裸奔的,可是工程都是在ADS下,win7系统根本不能用,于是就想着怎么在MDK跑,可是MDK上s3c2440的启动文件是不完整的,因此不推荐使用,为此蛋疼聊好长一段时间,查了很
[单片机]
<font color='red'>s3c2440</font> ads程序移植到keil中(二) 初步完成
Uboot S3C2440 BL1 的流程
1. reset 中断向量表 2. 进入reset (1) 设置svc32 模式 (2) flash I/D caches (3)disable MMU 和 cache (4)2440 没有onenand (5)bl lowlevel_init 接 (5) 1.初始化时钟 2. 初始化UART,串口 3.nandflash 简单初始化 4. 判断当前uboot 是否运行在内存中,如果不是则进行内存初始化 返回 (5)后面 跳过宏定义 从NandFlash 中拷贝bootloader到内存中 设置堆栈,为C语言做准备 清除BSS段 ub
[单片机]
S3C2440 跳到 SDRAM 中执行程序
从Nandflash启动CPU时,CPU会通过内部的硬件将Nandflash开始的4KB数据复制到为Steppingstone的4Kb的内部RAM中(起始地址为0) 然后跳到0地址开始执行. 我们这个例子是先使用汇编语言设置好存储控制器,使我们外接的SDRAM可用,然后把程序本身从Steppingstone复制到SDRAM处, 最后跳到SDRAM中执行. 程序的什么关看门狗,设置存储控制器,复制代码到SDRAM中都比较简单, 程序跳入到C程序之前要设置栈供C程序使用!!! ldr sp, =0x34000000 @ 设置堆栈 栈设置在顶部,自上而下. 写这篇记录博客的原因最重要的是:
[单片机]
<font color='red'>S3C2440</font> 跳到 SDRAM 中执行程序
S3C2440 Linux驱动移植——SPI
1. 配置内核 首先,修改arch/arm/plat-s3c24xx/Kconfig,这一步的目的是为了可以在内核中使能SPI0的配置函数。 修改后的内容如下: config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13 bool S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13 help SPI GPIO configuration code for BUS0 when connected to GPE11, GPE12 and GPE13. 接着配置内核,首先打开S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13选项,这样编译的时候会将 ar
[单片机]
<font color='red'>S3C2440</font> Linux驱动移植——SPI
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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