zoukankan      html  css  js  c++  java
  • s3c2440裸机-内存控制器(一、内存控制器的原理)

    1.内存接口概念

    S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚(GPA-GPH)),有串口控制器 (接有TXD RXD引脚),有memory controller内存控制器,有Nand控制器等...

    1.不同类型的控制器:

    (1)GPIO控制器属于门电路,不涉及到时序,相对简单。
    (2)串口控制器属于协议类接口,类似的协议类接口还有iic、iis、spi等。 
    (3)前面的GPIO/门电路接口、协议类接口,都不会把地址输出到外部设备,仅仅只是将地址写入到相应的控制器。
    接下来的内存类接口,会把地址输出到外部,cpu将地址写入内存控制器,内存控制器还需访问外部设备,比如NorFlash、网卡、SDRAM。
    

    2.CPU是如何访问各个不同的寄存器的呢?

    GPIO/门电路接口、协议类接口、内存类接口都属于CPU的统一编址。但对于Nand Flash,它没有独立的地址线和cpu的地址总线相连接,因此它不参与CPU的统一编址。

    (1)对于门电路接口、协议类接口,直接访问寄存器即可。

    (2)对于内存类接口,交给内存控制器去处理。下面详细分析:
    CPU只管发出一个地址,内存控制器根据该地址范围选择不同的模块,然后从模块中得到数据或者发送数据到模块中。

    如下图,SDRAM、DM9000网卡、Nor Flash都接在JZ2440的数据总线和地址总线上,CPU把数据和地址发送出去,然后内存控制器根据地址范围确定要拉低选中哪个片选信号(nCS),再根据片选信号(nCS)选择相应的设备,进行收发地址和数据,互不干扰。


    (1)当CPU发出的指令的地址范围处于0x00000000 - 0x08000000,
    内存控制器就会使nGCS0处于低电平(片选引脚被选中),NorFlash被选中。(NorFlash启动时才行,nand启动时nGCS0这块对应SRAM)
    
    (2)当CPU发出的指令的地址范围处于0x20000000 - 0x28000000,
    内存控制器就会使nGCS4处于低电平(片选引脚被选中),网卡DM9000被选中。
    
    (3)当CPU发出的指令的地址范围处于0x30000000 - 0x38000000,
    内存控制器就会使nGCS6处于低电平(片选引脚被选中),SDRAM被选中。
    

    内存控制器根据不同的地址地址范围,发出不同的片选引脚,只有被片选引脚选中的芯片才能正常工作,不被选中的芯片就像不存在一样,不工作。

    从2440 datasheet中我们得知内存控制器可访问的地址范围有1G(0x0000,0000-0x4000,0000),8个bank,每个bank_size为128M。理论上需要2^30(30条地址线)来确定是哪个bank,哪个地址。但是实际上只用到了27条,那么是怎么确定是哪个bank被选中了呢?

    cpu每次发给内存控制器的地址都是Addr[31:0],但是内存控制器发给外设(sdram,nor,dm9000)却只用到了A[26:0]。第[29:27]被用来确定要拉低哪个nGCS,即要选中哪个bank。

    bit[29:27]		bit[26:0]
    0b000		->    0x000,0000-0x7ff,ffff  (bank0被选中 (128M))
    0b001		->    0x800,0000-0xfff,ffff  (bank1被选中 (128M))
    ...				...
    0b110		->    0x000,0000-0x7ff,ffff  (bank6被选中 (128M))
    0b111		->    0x800,0000-0xfff,ffff  (bank7被选中 (128M))
    

    那么对于大容量的nandflash,理论上需要更多的地址线来确认访问地址,那既然没有地址线,cpu是如何访问nand的呢?当然是通过nand控制器,nand是地址、命令、数据都共用数据总线。这里只是引入一个话题,具体内容后面讲。

  • 相关阅读:
    php7下安装event扩展
    ReactPHP── PHP版的Node.js(转)
    如何将python中的List转化成dictionary
    python3中的zip函数(转)
    python requests的content和text方法的区别(转)
    解决python3 UnicodeEncodeError: 'gbk' codec can't encode character 'xXX' in position XX(转)
    Python语言特性之3:@staticmethod和@classmethod
    Linux 按时间批量删除文件(删除N天前文件)
    简述 OAuth 2.0 的运作流程(转)
    基于jQuery8款超赞的评分插件
  • 原文地址:https://www.cnblogs.com/fuzidage/p/12010420.html
Copyright © 2011-2022 走看看