• uboot原理



     

          cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行

    SDRAM挂接在S3C2440的BANK6 (nGCS6),即地址从0x30000000开始

     

     片选信号

    对于一块集成电路,想让它开始工作,得给一个信号它(高电平或低电平),接收这一信号的引脚就叫片选端,
    这一信号就叫片选信号,一般为cs,片选端收到合法的片选信号便进入工作状态,我们就可以对它进行写入或读出了。 bank和片选主要用于地址译码
    1. bank可以理解为一片容量为X的存储芯片
    2. 片选是芯片的使能芯片,0表示芯片不被选中,1表示选中
    存储器往往要是由一定数量的芯片构成的。
    CPU 要实现对存储单元的访问,首先要选择存储芯片,即进行片选;然后再从选中的芯片中依地址码选择出相应的存储单元,以进行数据的存取,这称为字选。片内的字选是由CPU送出的N条低位地址线完成的,地址线直接接到所有存储芯片的地址输入端,而存储芯片的片选信号则大多是通过高位地址译码后产生的。

        

     

     arm中最大可以有1G的存储器空间,它们是映射在最低的1G空间中。就是:0x00000000 - 0x3fffffff ,而arm又把这一快空间分成了8个bank,每bank是128M,所以它们的起始地址分别是:0x00000000, 0x08000000,0x10000000,0x18000000,0x20000000,0x28000000,0x30000000,0x3xxxxxxx,最后一个bank有些特殊,它的起始地址是可变的,由倒数第二个决定。从0x40000000 - 0x40000fff 这4KB空间就是arm自带的4KB内存,它是静态的,SRAM。它的的用处就是启动系统。在启动时由arm的内部电路把nand的前4KB空间的内容拷贝到开始说的那个静态的SRAM中。就可以执行了。注意,它只有4KB,所以在我们在nand中的uboot是分为两部分的,第一部分只有4KB,它主要完成的工作是硬件初始化,以及拷贝到第二部分并执行。在第二部分才是更为详细的工作。0x40001000 - 0x47ffffff是没有用到的。从0x48000000 - 0x60000000 就是IO的映射空间。剩下的都没有用到。

    你应该知道arm都是从0x00000000启动的,这时你可能会有一个疑问。arm既可以从Nor中启动,也可以从自带的静态SRAM中启动,它们的地址不可能都是0x00000000吧?但是,确实是。这里是通过跳线来设置的。当我们选择从Nor中启动时,就会把Nor映射到0x00000000处,当我们选择从nand中启动时,就会把上面说的4K的SRAM映射到0x00000000处。它们是由硬件在程序运行前设置的,所以不会发生混乱。
            如果我们是直接在arm上裸跑程序的话,我们操作的就是这些地址,你可以认为是物理地址。但是在我们移植了操作系统后,比如说Linux,这时我们就可以启动arm的MMU,就是内存管理单元,它是由arm的一个协处理器实现的。

     

  • 相关阅读:
    C#文件IO操作
    Microsoft Visual Studio Learning Pack 自动生成流程图插件(转)
    CSS之看穿绝对定位 absolute(转)
    Flex 图片缩放、托拽效果 Zoom版
    图标制作软件 Axialis IconWorkshop 6.50 汉化版
    Flex鼠标右键事件及菜单
    static 静态方法
    计算sql语句的执行时间
    正则表达式示例及总结
    结构/表现/行为完全分离的tab选项卡JS版(转)
  • 原文地址:https://www.cnblogs.com/liuchengchuxiao/p/4216515.html
Copyright © 2020-2023  润新知