• ARM裸机


    ARM体系结构与汇编指令
    可编程器件的特点
      CPU在固定频率的时钟控制下节奏运行
      CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行
      这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者ARM定义的,本质上是一串01组成的数字,这就是CPU的汇编指令集。
    从源代码到CPU执行过程
      .C等高级语言源代码---编译器--->.S汇编源代码---汇编器--->Elf格式二进制可执行程序---Objcopy工具--->Bin格式烧录文件---总线--->CPU读入后先解码---CPU内部指令流水线--->CPU执行指令

    汇编语言与C等高级语言的差异
      汇编无可移植性,C语言有一定可移植性,JAVA等更高级语言移植性更强
      汇编语言效率最高,C语言次之,JAVA等更高级语言效率更低
      汇编不适合完成大型复杂的项目,更高级语言更适合完成更大、更复杂的项目
    汇编语言的本质
      汇编的实质是机器指令的助记符,是一种低级符号语言
      机器指令集是一款CPU的编程特征,是这款CPU的设计者指定的。CPU的内部电路设计就是为了实现这些指令集的功能。机器指令集就好像CPU的API接口一样。
    编程语言的发展过程
      纯机器码编程
      汇编语言编程
      C语言编程
      C++语言编程
      JAVA C#等语言编程
      脚本语言编程

    RISC和CISC
      complex instruction set computer CISC设计理念是用最少的指令完成任务,因此CISC的CPU设计复杂、工艺复杂,但编译器好设计。CISC指令多,实现指令的电路多,功耗高。
      reduced instruction set computer RISC设计理念是让软件来完成具体的任务,CPU本身仅提供基本功能指令集。RISC指令少,CPU设计和工艺简单,功耗低,但编译器设计困难。

    IO?内存?
      内存是程序的运行场所,内存和CPU之间通过总线连接,CPU通过一定的地址来访问具体内存单元
      IO是输入输出接口,是CPU和其他外部设备之间通信的道路。一般的,IO就是指CPU的各种内部或外部外设
      内存通过CPU的地址总线来寻址定位,然后通过CPU数据总线来读写
      CPU的地址总线的位数是CPU设计时确定的,因此一款CPU所能寻址的范围是一定的,而内存是需要占用CPU的寻址空间的
      内存与CPU的这种总线式连接方式是一种直接连接,优点是效率高访问快,缺点是资源有限,扩展性差
      IO指的是与CPU连接的各种外设
      CPU访问各种外设有两种方式:一种是类似于访问内存的方式,即把外设的寄存器当作一个内存地址来读写,从而以访问内存相同的方式来操作外设,叫IO与内存统一编址方式
                    一种是使用专用的CPU指令来访问某种特定外设,叫IO于内存独立编址
      由于内存访问频率高,因此采用总线式连接,直接地址访问,效率最高
      IO与内存统一编制方式,优势是IO当作内存来访问,编程简单;缺点是IO也需要占用一定的CPU地址空间,而CPU的地址空间是有限资源
      IO与内存独立编址方式,优势是不占用CPU地址空间,缺点是CPU设计变复杂了
      程序运行时两大核心元素:程序+数据
      程序是我们写好的源代码经过编译、汇编之后得到的机器码,这些机器码可以拿给CPU去解码执行
      数据是程序运行过程中定义和产生的变量的值
    冯诺依曼结构与哈佛结构
      程序和数据都放在内存中,且不彼此分离的结构称为冯诺依曼结构。
      哈佛结构中程序(ROM FLASH)和数据(RAM)独立分开存放因此好处是安全和稳定性高,缺点是软件处理复杂一些

    软件编程控制硬件的关键--寄存器
      寄存器属于CPU外设的硬件组成部分
      CPU可以像访问内存一样访问寄存器
      寄存器是CPU的硬件设计者指定的,目的是留作外设被编程控制的“活动开关”
      正如汇编指令集是CPU的编程接口API一样,寄存器是外设硬件的软件编程接口API。使用软件编程控制某一硬件,其实就是编程读写该硬件的寄存器
      编程操作寄存器就类似于访问内存
      寄存器中每个BIT位都有特定含义,因此变成操作时需要位操作
      单个寄存器的位宽一般和CPU的位宽一样,以实现最佳访问效率
      SOC中有两类寄存器:通用寄存器和SFR
      通用寄存器(ARM中有37个)是CPU的组成部分,CPU的很多活动都需要通用寄存器的支持和参与
      special function register不在CPU中,而存在于CPU的外设中,我们通过访问外设的SFR来编程操控这个外设,这就是硬件编程控制的方法

    S5PV210属于ARM CORTEX-A8架构,32位地址线和数据线
      read only memory
      ramdom access memory
      internal rom
      internal ram
      dynamic ram
      static ram
      SROM
      ONENAND/NAND
      SFR

    内存 内部存储器 用来运行程序的 RAM(例如DRAM SRAM DDR)
    外存 外部存储器 用来存储东西的 ROM(例如硬盘 FLASH(NAND INAND U盘 SSD)光盘)
      CPU连接内存需要直接地址访问,通过地址总线和数据总线的总线式访问方式连接的(好处是直接访问,随机访问;坏处是占用CPU地址空间,大小受限)
          外存是通过CPU的外存接口来连接的好处是不占用CPU的地址空间,坏处是访问速度没有总线式快,访问时序较复杂
    SOC常用外部存储器
      NORFLASH 总线式访问,接到SROM BANK,优点是可以直接总线访问,一般用来启动。容量小,可靠性高。

      NANDFLASH 工艺分为SLC和MLC(大、便宜、要做ECC校验)
      eMMC/iNAND/moviNAND embedded MMC
      oneNAND oneNAND是三星出的一种NAND
      SD卡/TF卡/MMC卡 标准不同
      eSSD

      SATA硬盘:机械式访问、磁存储原理、SATA是接口

    S5PV210启动过程
    内存:
      SRAM 静态内存 特点是容量小、价格高,基本小于1m;优点是不需要软件初始化直接商店就能使用
      DRAM 动态内存 特点就是容量大、价格低;缺点是需要软件初始化后才能使用
      单片机中内存需求小,而且希望开发尽量简单,适合全部使用SRAM
      嵌入式系统内存需求大,而且没有NORFLASH等可启动介质
      PC内存需求量大,而且软件复杂,不在乎DRAM的初始化开销,适合全部用DRAM
    外存:
      NORFLASH:特点是容量小,价格高,优点是可以和CPU直接总线式相连,CPU上电后可以直接读取,所以一般用作启动介质
      NANDFLASH(跟硬盘一样):特点是容量大,价格低,缺点是不能总线式访问,不能上电CPU直接读取,需要CPU先运行一些初始化软件,然后通过时序接口读写

    所以一般PC机都是: 很小容量的BIOS(NORFLASH),很大容量的硬盘(类似NANDFLASH),大容量的DRAM
    一般单片机: 很小容量的NORFLASH,很小容量的SRAM
    嵌入式系统: 因为NORFLASH很贵,所以现在很多嵌入式系统倾向于不用NORFLASH,直接用:NAND+DRAM+SOC内置的SRAM(通过CPU设计在开机时把一部分NAND中的代码读取到SRAM中,作为启动代码,然后初始化NAND和DRAM)

    S5PV210使用的启动方式是:210内置了一块96KB大小的SRAM(叫iRAM),同时还有一块内置的64KB大小的NORFLASH(叫iROM)
    大致启动过程:
    1、(BOOTLOADER)CPU上电后先从内部iROM中读取预先设置的代码(BL0),执行。这一段iROM代码做了一些基本的初始化(CPU时钟、关看门狗等等)这一段iROM代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的DRAM,所以不能初始化外接DRAM,只能初始化SOC内部的东西;然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取第一部分启动代码(BL1,16K)到内部SRAM
    2、 从SRAM去运行刚上一步读取来的启动代码BL1,然后执行。BL1负责初始化NANDFLASH,然后将BL2读取到iRAM(剩余80KB)然后运行
    3、 从iRAM运行BL2,BL2初始化DRAM,然后将OS读取到DRAM中,然后启动OS

    思路:因为启动代码的大小是不定的,有些公司可能96KB就够了,有些公司可能1MB都不够,所以刚才说的2步的启动方式不合适。
    三星的解决方案是:把启动代码分为两半(BL1和BL2),这两部分协同工作来完成启动。

    BL0
    iROM START
      关看门狗
      初始化指令cache
        wakeup status 唤醒状态(复位状态)根据休眠程度不同跳转至不同的地方执行
      初始化栈
      初始化堆
      初始化块设备复制功能
      设置SOC时钟系统
      复制BL1到内部iRAM(16KB)
        OM PIN 启动方式
      检查BL1的校验和
      检查是否安全启动
      跳转到BL1去执行
    1st启动,通过OM PIN选择启动介质
    2st启动,从SD2
    UART启动
    USB启动

  • 相关阅读:
    闭包(closure)与协程共用时要注意的事情
    mysql---视图
    职责链模式
    JavaScript DOM(一)
    9.7 迭代
    [BLE--Link Layer]设备蓝牙地址
    Loopback測试软件AX1用户手冊 V3.1
    操作系统
    OpenCV特征点检測------Surf(特征点篇)
    linux 命令 xxd
  • 原文地址:https://www.cnblogs.com/thorzhou/p/5747261.html
Copyright © 2020-2023  润新知