S3C2410外围存储系统的研究与设计
发布时间:2008/8/30 0:00:00 访问次数:562
0 引言
samsung公司推出的基于arm920t内核的16/32位risc微处理器s3c2410,为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。为了降低整个系统的成本,s3c2410提供了丰富的内部设备。其中加强的arm体系结构mmu用于支持wince,epoc32和linux。随着技术的进步和发展,电子产品的功能日益强大,而嵌入式操作系统可以有效地管理各项功能,并且能够缩短产品开发周期,因此将微处理器与嵌入式操作系统进行联合开发成为一种趋势,然而微处理器的片内存储资源有限,若要进行嵌入式系统的移植,必须扩展其存储系统。对于嵌入式系统的开发人员来说,深入理解其存储系统原理和有效地管理存储系统对正确高效地设计嵌入式系统的硬件和底层软件编程具有重要的意义[1]。
1 s3c2410的寻址原理
arm920t内核提供了32位的地址总线,可以访问4g(232)的线性地址空间,而s3c2410的内部地址总线是30bit(haddr[29:0]),能够访问的最大外部地址空间是230,即1g的地址空间0x00000000~0x3ffffffff,可见s3c2410仅利用了arm920t的32位地址总线的低30位,并且是一一对应相连的[1]。由表1可知s3c2410将1g的外部地址空间分成了8个存储器组,每个组的大小为128m,其中6个用于rom、sram等存储器,2个用于rom、sram、sdram等存储器。基于芯片体积及成本的考虑,当s3c2410对外寻址时,采用了部分译码的方式,即低位地址线用于外围存储器的片内寻址,而高位地址线用于外围存储器的片外寻址。如表1所示,由于每个存储器组的起始地址及空间大小固定,对于系统要访问的任意外部地址,s3c2410可以方便地利用内部地址总线的高3位haddr[29:27]来选择该地址属于哪一个存储器组(bank),从而激活相应的bank选择信号,并且使用外部地址总线a[26:0]来实现相应bank的内部寻址,寻址范围为128m(227),从而使得其外围地址访问空间为1gb(128mb×8)。s3c2410正是通过这种机制来完成外部地址空间的寻址全过程。
s3c2410访问sdram地址空间的过程比较难理解,这主要和sdram的存储结构有关。为了更深入地理解其寻址机制,笔者以sdram芯片hy57v561620b(32mb)为例进行详细地说明。该芯片的内部存储结构是4banks×4m×16bit,即共有4个bank,每个bank中有4m个半字(16bit)。bank地址可以通过ba[1:0]与地址总线的高位相连来确定,具体ba[1:0]与哪个地址位相连,不同的sdram存储系统有不同的方案,详见参考文献[3]。而每个bank中的存储单元由行地址和列地址来唯一标识[1],该芯片通过行地址锁存引脚nras和列地址锁存引脚ncas分别与s3c2410的引脚nsras(sdram行地址选通信号)和nscas(sdram列地址选通信号)连接,从地址总线获得行地址和列地址。而且列地址的位数可以在bankconn(n=6,7)的中的scan——bankconn [1:0]来配置,00=8-bit,01=9-bit,10=10-bit,其复位值为00,即8bit。
在实际工作中,如图1所示,在第3个总线时钟,nscs为低电平,表示sdram被选中,并且地址线的bank地址与相应的行地址同时发出,这个命令称之为“行有效”或“行激活”(row active)。此时sdram将行地址锁存(nsras有效),但还没有执行写命令(nwe为高电平),因为没有列地址(nscas为高电平),存储单元无法确定。经过trcd(ras至cas延迟)后,sdram再次被选中(nscs为低电平),此时nscas为低电平,指示sdram此时地址线上的地址为列地址,同时nwe有效,写操作被执行。可见发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读/写命令”来表示列寻址,相关的列地址被选中之后,将会触发数据传输。至此,s3c2410对sdram的寻址就完成了。可见,s3c2410将地址总线上的地址分成行地址和列地址并分开传输给sdram。基于上述的寻址机制,由ba[1:0]和12根地址线就可以寻址32m或更大的地址空间了。
图 1 s3c2410 sdram时序图
2 存储器控制器和相关引脚介绍
2.1寄存器介绍
s3c2410存储器控制器主要有:总线带宽和等待控制寄存器
0 引言
samsung公司推出的基于arm920t内核的16/32位risc微处理器s3c2410,为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。为了降低整个系统的成本,s3c2410提供了丰富的内部设备。其中加强的arm体系结构mmu用于支持wince,epoc32和linux。随着技术的进步和发展,电子产品的功能日益强大,而嵌入式操作系统可以有效地管理各项功能,并且能够缩短产品开发周期,因此将微处理器与嵌入式操作系统进行联合开发成为一种趋势,然而微处理器的片内存储资源有限,若要进行嵌入式系统的移植,必须扩展其存储系统。对于嵌入式系统的开发人员来说,深入理解其存储系统原理和有效地管理存储系统对正确高效地设计嵌入式系统的硬件和底层软件编程具有重要的意义[1]。
1 s3c2410的寻址原理
arm920t内核提供了32位的地址总线,可以访问4g(232)的线性地址空间,而s3c2410的内部地址总线是30bit(haddr[29:0]),能够访问的最大外部地址空间是230,即1g的地址空间0x00000000~0x3ffffffff,可见s3c2410仅利用了arm920t的32位地址总线的低30位,并且是一一对应相连的[1]。由表1可知s3c2410将1g的外部地址空间分成了8个存储器组,每个组的大小为128m,其中6个用于rom、sram等存储器,2个用于rom、sram、sdram等存储器。基于芯片体积及成本的考虑,当s3c2410对外寻址时,采用了部分译码的方式,即低位地址线用于外围存储器的片内寻址,而高位地址线用于外围存储器的片外寻址。如表1所示,由于每个存储器组的起始地址及空间大小固定,对于系统要访问的任意外部地址,s3c2410可以方便地利用内部地址总线的高3位haddr[29:27]来选择该地址属于哪一个存储器组(bank),从而激活相应的bank选择信号,并且使用外部地址总线a[26:0]来实现相应bank的内部寻址,寻址范围为128m(227),从而使得其外围地址访问空间为1gb(128mb×8)。s3c2410正是通过这种机制来完成外部地址空间的寻址全过程。
s3c2410访问sdram地址空间的过程比较难理解,这主要和sdram的存储结构有关。为了更深入地理解其寻址机制,笔者以sdram芯片hy57v561620b(32mb)为例进行详细地说明。该芯片的内部存储结构是4banks×4m×16bit,即共有4个bank,每个bank中有4m个半字(16bit)。bank地址可以通过ba[1:0]与地址总线的高位相连来确定,具体ba[1:0]与哪个地址位相连,不同的sdram存储系统有不同的方案,详见参考文献[3]。而每个bank中的存储单元由行地址和列地址来唯一标识[1],该芯片通过行地址锁存引脚nras和列地址锁存引脚ncas分别与s3c2410的引脚nsras(sdram行地址选通信号)和nscas(sdram列地址选通信号)连接,从地址总线获得行地址和列地址。而且列地址的位数可以在bankconn(n=6,7)的中的scan——bankconn [1:0]来配置,00=8-bit,01=9-bit,10=10-bit,其复位值为00,即8bit。
在实际工作中,如图1所示,在第3个总线时钟,nscs为低电平,表示sdram被选中,并且地址线的bank地址与相应的行地址同时发出,这个命令称之为“行有效”或“行激活”(row active)。此时sdram将行地址锁存(nsras有效),但还没有执行写命令(nwe为高电平),因为没有列地址(nscas为高电平),存储单元无法确定。经过trcd(ras至cas延迟)后,sdram再次被选中(nscs为低电平),此时nscas为低电平,指示sdram此时地址线上的地址为列地址,同时nwe有效,写操作被执行。可见发送列地址寻址命令与具体的操作命令(是读还是写),这两个命令也是同时发出的,所以一般都会以“读/写命令”来表示列寻址,相关的列地址被选中之后,将会触发数据传输。至此,s3c2410对sdram的寻址就完成了。可见,s3c2410将地址总线上的地址分成行地址和列地址并分开传输给sdram。基于上述的寻址机制,由ba[1:0]和12根地址线就可以寻址32m或更大的地址空间了。
图 1 s3c2410 sdram时序图
2 存储器控制器和相关引脚介绍
2.1寄存器介绍
s3c2410存储器控制器主要有:总线带宽和等待控制寄存器