finewei 发表于 2005-6-10 10:05:49

李明老师,有问题请教

看了《ARM应用系统开发详解——基于S3C4510B的系统设计》前面几章,有好多问题不懂,先请教几个硬件相关的问题:
1.s3c4510b有22根地址线,按照地址线来算应该是寻址16M字节;
后面又说采用统一编址的方式把系统的所有存储器映射到64M字节的地址空间,
每个存储器组织在组内通过基指针寻址,寻址范围为64k(16位),同时该指针为10位,能寻址64M字节;cpu究竟是如何寻址的?地址线和基指针又有什么关系呢?如果我们做超过64M的优盘又如何寻址?
我们平时使用的PC机为什么能寻址100多G的硬盘?
2.HDLC通道是做什么用的?
3.试验板上为什么要用2片FLASH?NOR FLASH和NAND FLASH有什么区别,各自的作用?

limingth 发表于 2005-6-10 10:45:17

我对硬件设计方面不是很熟悉,不过可以大概讲一下我的理解。 s3c4510 的 memory 空间是分为若干个 bank ,每个 bank 大小一样是 64M bytes,这方面的情况可以查看 s3c4510 的手册中有关 System Memory Map 的介绍。每一个 bank 都在 System Manager Registers 里面对应一个配置寄存器,用来根据访问的地址片选出对应的存储器,这要求存储器是挂在地址总线上的,而不是像硬盘这样的块设备。
HDLC我也没怎么用过,谁知道的可以跟贴说一下。
至于 2 片 Flash (Nor Flash & Nand Flash),前者是用来放 bootloader 和系统的,后者是用来当做 U 盘放数据或者文件系统的,它们的区别网上有很多很详细的说明,搜一下吧   :lol:

finewei 发表于 2005-6-10 14:48:02

对于System Memory Map 好象不是象你所说的吧?应该是把所有的存储器空间都影射到1个64M的地址空间包括DRAM的BANK0-BANK4,SRAM/ROM/FLASH的BANK0-BANK6,External I/O的BANK0-4,Internal SRAM,Special regesiters。System Manager Registers 里也只有对应DRAM等各个相应BANK的控制寄存器!
不太清楚块设备的数据存取,不管怎么样每一个数据都应该有一个唯一的地址CPU才能访问到的,这方面的东西一直搞不懂。

limingth 发表于 2005-6-10 15:56:54

我刚才又看了一下 s3c4510 的手册,我说的意思是指 CPU 在 remap 设置之后,系统访问存储器 (Flash & SDRAM) 的寻址方式,也是你问的 “每个存储器组织在组内通过基指针寻址,寻址范围为64k(16位),同时该指针为10位,能寻址64M字节;cpu究竟是如何寻址的?地址线和基指针又有什么关系呢?”
cpu 发出的 32 位地址,在内部经过 System Manager Registers 的辨别分析后对应到某一个 bank 的片选,这个 bank 支持的最大存储空间是 64Mbytes。目前 lumit4510 接的两类存储器是 4M*32 共 16Mbytes 的 SDRAM和 1M*16 共 2Mbytes 的 Nor Flash。而 Nand Flash 不是挂在地址总线上的,属于类似硬盘的 I/O 设备。

你所说的“应该是把所有的存储器空间都影射到1个64M的地址空间包括DRAM的BANK0-BANK4,SRAM/ROM/FLASH的BANK0-BANK6,External I/O的BANK0-4,Internal SRAM,Special regesiters” ,是指加电后系统的默认设置的 System Manager Registers 值,不过一般都会通过 remap 重新设置的。具体可看数据手册中这段:

After a power-on or system reset, all bank address pointer registers are initialized to their default values. In this
case, all bank pointers except for the next pointer of ROM bank 0 are set to zero. This means that, except for
ROM bank 0, all banks are undefined following a system start-up.
The reset values for the next pointer and base pointer of ROM bank 0 are 0x200 and 0x000, respectively. This
means that a system reset automatically defines ROM bank 0 as a 32-Mbyte space with a start address of zero.
This initial definition of ROM bank 0 lets the system power-on or reset operation pass control to the user-supplied
boot code that is stored in external ROM. (This code is located at address 0 in the system memory map.) When
the boot code (i.e. ROM program) executes, it performs various system initialization tasks and reconfigures the
system memory map according to the application's actual external memory and device configuration.

其实关于这个我也没很深入地去读数据手册,每种 cpu 对于存储器管理的寄存器设置都不太一样,这方面我一直是不求甚解的。:roll:

jackaly 发表于 2005-7-4 09:52:23

s3c4510b有22根地址线,32 根数据线; 按照地址线来算应该是寻址4M的字,即16M字节,这是没有错的啊!
但这是在某一片选线(CS)被选中的前题下的! 也即是说每一根片选就会对应16M字节的地址空间. 所以你还要看下它有多少根片选线(CS)啊! 如果单纯按这个计算, S3C4510B 的寻址已是远远超过了64M字节了!

不知这样分析对不对呢?

limingth 发表于 2005-7-4 18:01:43

每个 bank 最大应该是支持 64 M 字节吧

jackaly 发表于 2005-7-5 23:25:15

在S3C4510中,实际上是最大只支持64M字节的寻址的! 因为它的基地址指针是10位,偏移值是16位的,所以最多是64MB啦!
而外部ROM/FLASH/SDRAM可以通过片选分成多个BANK, 每个BANK 可以分配超过16MB的地址, 但实际上只16MB有可以访问的, 这是因为由22条外部地址线决定的.
此外还要为特殊功能寄存器、内部SRAM、I/O口保留地址空间;
所以在S3C4510中每个BANK 达不到64MB的;

limingth 发表于 2005-7-6 13:15:52

受益匪浅,要是大家没有疑议,这个问题应该就是这个答案了。   :-)

jackaly 发表于 2005-7-6 21:18:57

我只是个ARM方面的菜鸟! 以后还望版主多多指我啊!

jackaly 发表于 2005-7-6 21:29:00

我只是个ARM方面的菜鸟! 以后还望版主多多指我啊!

bkstar 发表于 2005-7-6 22:29:00

请教李明老师和jackaly

实际上是这个问题(内存map)的延续,我还有几个问题:
1:在lumit的开发板上,nor flash的地址是映射到0x0,DRAM的硬件逻辑地址是映射到什么地方?我从手册上无法确定。从上面那段英文看它的地址是由自己往寄存器DRAMCON中写入一个值来确定,这就引出两个问题:
a:   在s3c4510中(也许并不一定需要加这个定语)的地址解码器是否提供这种方式来映射memory,它提供几个寄存器,你往寄存器中写一个地址,它就将硬件逻辑地址映射到该地址。
b: 我看见ROMCON和DRAMCON几个寄存器的初始值,只有ROMCON0有初始值,它定义nor flash芯片的地址为0x0,但DRAMCON0的初始值是0,它将DRAM芯片的地址也定义为0x0,这样问题就来了,系统重新reset后,cpu是从nor flash芯片中获得指令还是从DRAM芯片中获得指令?这时候DRAM芯片中是没有内容的啊,
c: 我在测试lumit的板子时看见tftp的bootloader起来后,加载测试程序时有这样一个地址0x8000,照道理,这个地址是在nor flash范围内,那加载的测试程序都写到nor flash里面了吗?如果这样,reset后,我输入命令应该 go 0x8000应该可以重新执行测试程序的,但不行,很显然,0x8000这个地址是在DRAM的范围内,这和前面又是矛盾的,我不明白。
这三个问题我估计都是一个问题引起的,并且这个问题和硬件联系得很紧密,希望李明老师能够和项目组搞硬件的同事能够一起来解答这个问题:在lumit的板子上,DRAM的地址映射到什么地方了???


期盼着。。。。。。

limingth 发表于 2005-7-7 01:37:06

1、系统加电时,Flash 在 0 地址。
2、系统启动后,初始化 SDRAM,此时 RAM 空间开始可以读写。
3、系统接着执行 Copy ROM to RAM的操作,此时 Flash 还在 0 地址。
4、系统执行 Merory Remap ,具体表现为设置相关内存配置寄存器,此时 RAM 映射到 0 地址,Flash 映射到高端的地址。
5、系统进入 Shell ,等待用户输入命令,Bootloader 启动完毕。
------------------------------------
此前都是 lumit4510 加电后到输出进入 Shell 前系统的内部操作;
下面是用户输入命令后的操作:
6、用户通过 download 下载程序,bootloader 从串口接收 uue ,内部转换成 bin 格式,将其放在 0x8000 地址处。
7、用户通过执行 go 命令,即开始从 0x8000 处执行指令。

不知道这样说清楚没有?8)

bkstar 发表于 2005-7-7 16:11:10

谢谢李明老师:
后两个问题搞清楚了,第一个问题还是没有搞清楚,前段时间我看了一下计算机接口方面的东西,这个问题就和硬件联系的比较紧了,这是在s3c4510b的芯片内部的接口逻辑方面的东西。   
在我的印象中,rom/ram应该通过硬件译码到一个确定的地址,但现在看来,在s3c4510b上通过修改寄存器就可以更改rom/ram的硬件地址。
象PAL,FPGA这种可编程器件做成的地址解码器是否提供这种方式来映射memory,它提供几个寄存器,你往寄存器中写一个地址,它就将硬件逻辑地址映射到该地址。

jackaly 发表于 2005-7-7 22:21:26

S3C4510B采用统一编址的方式,将系统的片外存储器、片内存储器、特殊功能寄存器和
外部的I/O 设备,都映射到64MB 的地址空间;而在硬件设计时,这些片外存储器、片内存储器和外部的I/O 设备都是通过芯片上的片选线来选中的,根据片选线的不同,又可以将64MB分为若干个BANK,每个BANK都有一个特殊功能寄存器来指定该BANK映射到64MB空间中的那个位置。而这些都是可以由用户在初始化(BOOTLOADER)时设置好的!
在上电时,ROMCON0(ROM/SRAM/FLASH 组0 )控制寄存器的初值是0X20000060,那么基指针(Base Pointer)为0X000和尾指针(End Pointer)的为(0X200-1),即被映射到地址从0到32MB的空间中;而在其它的BANK的特列功能寄存器器中基指针(Base Pointer)为0X000,尾指针(End Pointer)的为(0X000-1),空间是无效的吧。所以复位后一定是从ROM/SRAM/FLASH 组0 开始执行的,而不会是从DRAM中开始的!
至于第三个问题吧,我没有lumit的板子,也没有看过它的BOOTLOADER源码,具体就不能说清楚了!应该是版主说的那样子!


呵呵... ... 我也是新手!不知上面说得对不对,以后还望各位多指教啊!

bkstar 发表于 2005-7-8 10:10:35

谢谢jackaly:
    后两个问题我已经搞明白了,因为我没有搞过硬件和电路设计,所以有这个问题出现,可能对于搞硬件设计的同行们来说这根本就不是一个问题,我把我的问题再用另外一个方式来表达一下吧:
我们知道,最初一块存储芯片在连接到cpu总线上时,通过译码器电路它是有一个固定的硬件地址的,后来出现了什么GAL和PAL芯片,可以编程,这样通过修改程序,就可以改变那个硬件地址,但这种方法是静态的,即你的程序烧到GAL/PAL芯片后,这个地址就固定了。   我想问的是:是否有这样一种译码器,它提供几个寄存器,这样你就可以在机器运行的时候来随时修改该寄存器来达到修改存储芯片的硬件地址的目的,这是动态修改硬件地址的方式,我不知道这种动态修改的方式是否有并存在于s3c4510b中。
    或者说,S3C4510B实现memory map的电路原理是什么?
页: [1] 2
查看完整版本: 李明老师,有问题请教