S3C2410外围存储系统的研究与设计

上传人:M****1 文档编号:564682118 上传时间:2022-10-23 格式:DOC 页数:5 大小:118.50KB
返回 下载 相关 举报
S3C2410外围存储系统的研究与设计_第1页
第1页 / 共5页
S3C2410外围存储系统的研究与设计_第2页
第2页 / 共5页
S3C2410外围存储系统的研究与设计_第3页
第3页 / 共5页
S3C2410外围存储系统的研究与设计_第4页
第4页 / 共5页
S3C2410外围存储系统的研究与设计_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《S3C2410外围存储系统的研究与设计》由会员分享,可在线阅读,更多相关《S3C2410外围存储系统的研究与设计(5页珍藏版)》请在金锄头文库上搜索。

1、摘要:针对Linux移植S3C2410微处理器系统开发的需要,设计了S3C2410外围存储系统。本文研究了S3C2410的寻址原理,并结合该芯片SDRAM时序图详细分析了其对SDRAM寻址的全过程。介绍了与存储系统设计相关的控制寄存器和引脚,给出了与Flash和SDRAM的硬件电路连接图。最后在启动代码U-Boot下实现了存储系统的初始化。嵌入式开发人员可以根据开发需要借鉴本文的设计思路扩展其它ARM核芯片的存储系统。 关键词:S3C2410;寻址原理;SDRAM寻址机制;U-Boot 0 引言Samsung公司推出的基于ARM920T内核的16/32位RISC微处理器S3C2410,为手持设

2、备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。为了降低整个系统的成本,S3C2410提供了丰富的内部设备。其中加强的ARM体系结构MMU用于支持WinCE,EPOC32和Linux。随着技术的进步和发展,电子产品的功能日益强大,而嵌入式操作系统可以有效地管理各项功能,并且能够缩短产品开发周期,因此将微处理器与嵌入式操作系统进行联合开发成为一种趋势,然而微处理器的片内存储资源有限,若要进行嵌入式系统的移植,必须扩展其存储系统。对于嵌入式系统的开发人员来说,深入理解其存储系统原理和有效地管理存储系统对正确高效地设计嵌入式系统的硬件和底层软件编程具有重要的意义1。1 S3C24

3、10的寻址原理ARM920T内核提供了32位的地址总线,可以访问4G(232)的线性地址空间,而S3C2410的内部地址总线是30bit(HADDR29:0),能够访问的最大外部地址空间是230,即1G的地址空间0x000000000x3FFFFFFFF,可见S3C2410仅利用了ARM920T的32位地址总线的低30位,并且是一一对应相连的1。由表1可知S3C2410将1G的外部地址空间分成了8个存储器组,每个组的大小为128M,其中6个用于ROM、SRAM等存储器,2个用于ROM、SRAM、SDRAM等存储器。基于芯片体积及成本的考虑,当S3C2410对外寻址时,采用了部分译码的方式,即低

4、位地址线用于外围存储器的片内寻址,而高位地址线用于外围存储器的片外寻址。如表1所示,由于每个存储器组的起始地址及空间大小固定,对于系统要访问的任意外部地址,S3C2410可以方便地利用内部地址总线的高3位HADDR29:27来选择该地址属于哪一个存储器组(Bank),从而激活相应的Bank选择信号,并且使用外部地址总线A26:0来实现相应Bank的内部寻址,寻址范围为128M(227),从而使得其外围地址访问空间为1GB(128MB8)。S3C2410正是通过这种机制来完成外部地址空间的寻址全过程。表 1 S3C2410存储器组片选激活及地址空间分配HADDR29HADDR28HADDR27片

5、选信号片选控制寄存器地址空间000nGCS0BANKCON00x000000000x07FFFFFF001nGCS1BANKCON10x080000000x0FFFFFFF010nGCS2BANKCON20x100000000x17FFFFFF011nGCS3BANKCON30x180000000x1FFFFFFF100nGCS4BANKCON40x200000000x27FFFFFF101nGCS5BANKCON50x280000000x2FFFFFFF110nGCS6BANKCON60x300000000x37FFFFFF111nGCS7BANKCON70x380000000x3FFFFF

6、FFS3C2410访问SDRAM地址空间的过程比较难理解,这主要和SDRAM的存储结构有关。为了更深入地理解其寻址机制,笔者以SDRAM芯片HY57V561620B(32MB)为例进行详细地说明。该芯片的内部存储结构是4Banks4M16Bit,即共有4个Bank,每个Bank中有4M个半字(16Bit)。Bank地址可以通过BA1:0与地址总线的高位相连来确定,具体BA1:0与哪个地址位相连,不同的SDRAM存储系统有不同的方案,详见参考文献3。而每个Bank中的存储单元由行地址和列地址来唯一标识1,该芯片通过行地址锁存引脚nRAS和列地址锁存引脚nCAS分别与S3C2410的引脚nSRAS

7、(SDRAM行地址选通信号)和nSCAS(SDRAM列地址选通信号)连接,从地址总线获得行地址和列地址。而且列地址的位数可以在BANKCONn(n6,7)的中的SCANBANKCONn 1:0来配置,008-bit,019-bit,1010-bit,其复位值为00,即8bit。在实际工作中,如图1所示,在第3个总线时钟,nSCS为低电平,表示SDRAM被选中,并且地址线的Bank地址与相应的行地址同时发出,这个命令称之为“行有效”或“行激活”(Row Active)。此时SDRAM将行地址锁存(nSRAS有效),但还没有执行写命令(nWE为高电平),因为没有列地址(nSCAS为高电平),存储单

8、元无法确定。经过Trcd(RAS至CAS延迟)后,SDRAM再次被选中(nSCS为低电平),此时nSCAS为低电平,指示SDRAM此时地址线上的地址为列地址,同时nWE有效,写操作被执行。可见发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读/写命令”来表示列寻址,相关的列地址被选中之后,将会触发数据传输。至此,S3C2410对SDRAM的寻址就完成了。可见,S3C2410将地址总线上的地址分成行地址和列地址并分开传输给SDRAM。基于上述的寻址机制,由BA1:0和12根地址线就可以寻址32M或更大的地址空间了。图 1 S3C2410 SDRAM时序

9、图2 存储器控制器和相关引脚介绍2.1寄存器介绍S3C2410存储器控制器主要有:总线带宽和等待控制寄存器(BWSCON);总线控制寄存器(BANKCONN:nGCS0-nGCS5);BANK控制寄存器(BANKCONn:nGCS6-nGCS7);刷新控制寄存器(REFRESH);BANKSIZE寄存器;SDRAM模式寄存器集寄存器(MRSR)等,详情请见参考文献3。2.2相关引脚S3C2410提供了相关的引脚来控制存储器访问:组选择信号:nGCS0-nGCS5,nGCS6(nSCS0),nGCS7(nSCS1)引脚用来选择相应的存储器组。访问控制信号:为了实现ARM存储器访问指令LDR/ST

10、R字节、半字和字访问的三种方式,在S3C2410的存储器组中,除了Bank0以外的所有地址空间都可以通过编程设置为8位、16位或32位对准访问,Bank0可以设置为16位或32位。引脚nWBE3:0(写字节使能)实现8bit ROM芯片组的三种访问方式,或者SRAM不使用UB/LB(在BWSCON中设置)的情况下,与UB/LB连接。引脚nBE3:0(在使用SRAM情况下的字节允许信号)在SRAM使用UB/LB(是否使用可在BWSCON中设置)的情况下与UB/LB连接。DQM3:0(SDRAM数据屏蔽信号)引脚实现对SDRAM的三种访问。还有nWAIT、nXBREQ/nXBACK引脚。3 硬件电

11、路设计在本嵌入式系统开发实验中,S3C2410扩展的存储系统采用了英国Intel公司的16M E28F128J3A-150 NOR Flash芯片,以及Hynix公司的32M HY57V561620B SDRAM芯片。地址空间分配如下:Flash为Bank0中的0x000000000x07FFFFFF地址段,而SDRAM为Bank6中的0x300000000x37FFFFFF地址段,具体的电路连接如图2。图 2 S3C2410 与Flash、SDRAM的电路连接图4 存储系统初始化U-Boot是德国DENX小组的开发用于多种嵌入式CPU的开放源代码bootloader程序,目前最新版本是1.1

12、.6,本实验使用的是U-Boot-1.1.4。U-Boot是在ppcboot以及armboot的基础上发展而来,现已非常成熟和稳定,已经在许多嵌入式系统开发过程中被采用。其支持多种目标操作系统,其中对Linux的支持最完善,是嵌入式Linux Bootloader的最佳选择。由于本实验Linux要移植的开发板是基于s3c2410的开发板,在U-Boot中已有移植成功的smdk2410开发板,故以smdk2410开发板上运行的U-Boot为模板设计适合本实验的U-Boot。有关存储系统的初始化修改如下:(1)Flash驱动程序采用了board/Cmi/Flash.c,由于cmi中的flash.c

13、在写入时要交换字节,因而删除了它的write_short()和write_buff()函数,利用board/ep7312/Flash.c中的write_word()和write_buff()函数,并且把flash.c中的FLASH_BASE0_PRELIM改为CFG_FLASH_BASE。把FLASH_BLOCK_SIZE改为0x20000,(E28F128J3Aflash中块的大小是128K)。(2)Board/ smdk2410/smdk2410.c中函数dram_init()定义了SDRAM的真实地址和实际大小。由于本实验中,SDRAM的大小为32M,所以修改Include/config

14、s/Smdk2410.h中的PHYS_SDRAM_1_SIZE,改为0x02000000。(3)将如下代码替代原来在Include/configs/Smdk2410.h的/*FLASH and environment organization*/一栏中的内容。#definePHYS_FLASH_10x00000000 /*FlashBank#1*/ #definePHYS_FLASH_SIZE0x01000000 /*16MB*/ #defineCFG_FLASH_PROTECTION #defineCFG_FLASH_BASEPHYS_FLASH_1 #defineCFG_MONITOR_B

15、ASEPHYS_FLASH_1 #defineCFG_MAX_FLASH_BANKS1 /*maxnumberofmemorybanks*/ #defineCFG_MAX_FLASH_SECT128 /*maxnumberofsectorsononechip*/ #defineCFG_FLASH_ERASE_TOUT(2*CFG_HZ) /*TimeoutforFlashErase*/ #defineCFG_FLASH_WRITE_TOUT(2*CFG_HZ) /*TimeoutforFlashWrite*/ #defineCFG_ENV_IS_IN_FLASH1 #defineCFG_ENV_ADDR(PHYS_FLASH_1+0x60000) #defineCFG_ENV_SIZE0x20000 /*TotalSizeofEnvironmentSector*/如上分析,SDRAM和Flash的初始化信息分别在smdk2410.c

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号