1.3.1不同位宽设备的连接

S3C2440是32位机,即操作一次内存设备的单位为4字节(32条数据线)。S3C2440共有8个内存块,每个块128MB(0~26共27条地址线),共1GB,存储器映射图如下。
1.3.1不同位宽设备的连接_第1张图片
使用S3C2440存储器操作时,由CPU给内存控制器发出读写信号,内存控制器再通过地址线发送地址信号给外设,通过信号线进行读写操作。由于S3C2440对存储器的读写操作是以4字节为单位,而存储器分为8位,16位,32位,所以不同位宽的设备,读取操作是不同的,这就导致了连接上的不同。

假设CPU执行:
    mov R0, #3
    LDRB R1, [R0]

LDRB中的B为Byte,命令为读地址3的一个字节,本意是读出第3个字节。此时在8位,16位,32位位宽的设备上,地址线的连接是不同。

  • 当连接8位存储器时,2440的地址线A0接存储器的A0,A1接A1,此时R0 = 3,所以A0 = A1 = 1,去取第3个8bit数据。
  • 当连接16位存储器时,2440的地址线A1接存储器的A0,A2接A1,此时A0 = A1 = 1,A2 = 0,所以存储器的A0 = 1,A1 = 0,去取第1个16bit数据,内存控制器再根据A0 = 1,取出这16bit数据的后八位回给CPU。
  • 当连接32位存储器时,2440的地址线A2接存储器A0,依次下接,此时存储器的A0 = 0,去取第0个32位数据,然后内存控制器根据A0 = A1 = 1,取出这32位数据的第三组8位数据,也就是最后8位数据回给CPU。
    1.3.1不同位宽设备的连接_第2张图片
    所以,过程就是CPU发出地址–>ROM收到地址–>ROM返回数据–>内存控制器跳出数据给CPU。

还有一个问题,2440内部有八个块,要怎么确定各个芯片的访问地址

可以从以下两点确定:

  1. 根据片选信号确定基地址。
  2. 根据芯片所连地址线确定范围。

S3C2440中,外接了Nor,net,SDRAM,接线如下所示:
1.3.1不同位宽设备的连接_第3张图片
1.3.1不同位宽设备的连接_第4张图片
1.3.1不同位宽设备的连接_第5张图片
其中,Nor Flash用到A20,A19…A1,A0共21条线(2^21 = 2M),基地址为0,所以范围是0~0x1FFFFF;

net用到A2,A0,所以范围 = Base + 0b000 ~ Base + 0b101 = 0x2000,0000 ~ 0x2000,0005;

S3C2440外接了一块64MB的SDRAM,基地址为0x3000,0000,使用17条地址线(2^17 = 128K),SDRAM分为行地址和列地址,128K * 128K = 64MB。

基地址是由连接的片选和存储器映射决定的。

你可能感兴趣的:(1.3.1不同位宽设备的连接)