boot_bootstrap - CSDN
精华内容
参与话题
  • 启动模式,BOOT0和BOOT1详解

    万次阅读 2017-10-12 16:15:30
    在画STM32的电路图的时候,关于STM32的启动方式纠结了一下,现有的参考设计都是在STM32的启动选择引脚BOOT0和BOOT1上使用了跳帽,用以人工选择STM32的启动方式,但是在实际应用中这种设计就显得冗余,所以这里顺带...

    在画STM32的电路图的时候,关于STM32的启动方式纠结了一下,现有的参考设计都是在STM32的启动选择引脚BOOT0和BOOT1上使用了跳帽,用以人工选择STM32的启动方式,但是在实际应用中这种设计就显得冗余,所以这里顺带研究了一下STM32的启动方式。

     

    STM32一共有三种启动模式,在ST官网上下载的RM0008中,我找到了启动相关的配置说明:

     

     

     

     

             对应的中文翻译如下:

     

     

     

             所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。

     

     

     

     

    •   Main Flash memory

     

    STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。

     

     

     

     

    •   System memory

     

    从系统存储器启动,这种模式启动的程序功能是由厂家设置的。一般来说,这种启动方式用的比较少。

    系统存储器是芯片内部一块特定的区域,STM32在出厂时,由ST在这个区域内部预置了一段BootLoader,也就是我们常说的ISP程序,这是一块ROM,出厂后无法修改。

    一般来说,我们选用这种启动模式时,是为了从串口下载程序,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。但是这个下载方式需要以下步骤:

     

    Step1:将BOOT0设置为1,BOOT1设置为0,然后按下复位键,这样才能从系统存储器启动BootLoader

     

    Step2:最后在BootLoader的帮助下,通过串口下载程序到Flash中

     

    Step3:程序下载完成后,又有需要将BOOT0设置为GND,手动复位,这样,STM32才可以从Flash中启动

          可以看到,利用串口下载程序还是比较的麻烦,需要跳帽跳来跳去的,非常的不注重用户体验。



     

     

     

    •   Embedded Memory

     

    内置SRAM,既然是SRAM,自然也就没有程序存储的能力了,这个模式一般用于程序调试。

    假如我只修改了代码中一个小小的地方,然后就需要重新擦除整个Flash,比较的费时,可以考虑从这个模式启动代码(也就是STM32的内存中),用于快速的程序调试,等程序调试完成后,在将程序下载到SRAM中。

     

     

     

    综上所述,在我的设计中,我将BOOT0和BOOT1通过一个100k的下拉电阻,直接接地。

    展开全文
  • 常见bootloader介绍

    万次阅读 2018-09-15 19:09:55
    一、BootLoader简介  在专用的嵌入式板子运行操作系统已经变得越来越流行。一个嵌入式系统从软件的角度看通常可以分为三个层次:    1、 引导加载程序。包括固化在固件(firmware)中的Booter代码(可选),和...

    一、BootLoader简介

      在专用的嵌入式板子运行操作系统已经变得越来越流行。一个嵌入式系统从软件的角度看通常可以分为三个层次:

     

      1、 引导加载程序。包括固化在固件(firmware)中的Booter代码(可选),和Loader两大部分。

      2、 操作系统。特定于嵌入式板子的定制内核以及内核的启动参数;以及在内核和应用程序之间可能还会包括一个嵌入式图形用户界面,常用的嵌入式GUI有:MicroWindows和MiniGUI等。

      3、 用户应用程序。特定于用户的应用程序。

     

      引导加载程序是系统加电后运行的第一段软件代码,称之为Bootloader。BootLoader是Booter和Loader的合写:前者意味着要初始化嵌入式系统硬件使之运行起来,至少是部分运行起来,与PC机中的BIOS作用相似;后者意味着将嵌入式操作系统映像加载到内存中,并跳转过去运行。如PC机中MBR上的BootLoader(PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(比如,LILO和GRUB等)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的BootLoader读到系统的RAM中,然后将控制权交给OS BootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。)

      而在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

      简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

      通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。

            Bootloader并不是嵌入式系统必不可少的组成部分,但是在系统中有Bootloader可以给嵌入式产品的开发调试带来很多便利。

    二、常见bootloader介绍

    Redboot

      Redboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。

      当前Redboot的最新版本是Redboot-2.0.1,Redhat公司将会继续支持该项目。

      Redboot支持的处理器构架有ARM,MIPS,MN10300,PowerPC, Renesas SHx,v850,x86等,是一个完善的嵌入式系统Boot Loader。

      Redboot是在ECOS的基础上剥离出来的,继承了ECOS的简洁、轻巧、可灵活配置、稳定可靠等品质优点。它可以使用X-modem或Y-modem协议经由串口下载,也可以经由以太网口通过BOOTP/DHCP服务获得IP参数,使用TFTP方式下载程序映像文件,常用于调试支持和系统初始化(Flash下载更新和网络启动)。Redboot可以通过串口和以太网口与GDB进行通信,调试应用程序,甚至能中断被GDB运行的应用程序。Redboot为管理FLASH映像,映像下载,Redboot配置以及其他如串口、以太网口提供了一个交互式命令行接口,自动启动后,REDBOOT用来从TFTP服务器或者从Flash下载映像文件加载系统的引导脚本文件保存在Flash上。当前支持单板机的移植版特性有:

      - 支持ECOS,Linux操作系统引导

      - 在线读写Flash

      - 支持串行口kermit,S-record下载代码

      - 监控(minitor)命令集:读写I/O,内存,寄存器、 内存、外设测试功能等

      Redboot是标准的嵌入式调试和引导解决方案,支持几乎所有的处理器构架以及大量的外围硬件接口,并且还在不断地完善过程中。

    ARMboot

      ARMboot是一个ARM平台的开源固件项目,它特别基于PPCBoot,一个为PowerPC平台上的系统提供类似功能的姊妹项目。鉴于对PPCBoot的严重依赖性,已经与PPCBoot项目合并,新的项目为U-Boot。

      ARMboot发布的最后版本为ARMboot-1.1.0,2002年ARMboot终止了维护。

      ARMboot支持的处理器构架有StrongARM ,ARM720T ,PXA250 等,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的。

      ARMboot的目标是成为通用的、容易使用和移植的引导程序,非常轻便地运用于新的平台上。ARMboot是GPL下的ARM固件项目中唯一支持Flash闪存,BOOTP、DHCP、TFTP网络下载,PCMCLA寻线机等多种类型来引导系统的。特性为:

      -支持多种类型的FLASH

      -允许映像文件经由BOOTP、DHCP、TFTP从网络传输;

      -支持串行口下载S-record或者binary文件

      -允许内存的显示及修改

      -支持jffs2文件系统等

      Armboot对S3C44B0板的移植相对简单,在经过删减完整代码中的一部分后,仅仅需要完成初始化、串口收发数据、启动计数器和FLASH操作等步骤,就可以下载引导uClinux内核完成板上系统的加载。总得来说,ARMboot介于大、小型Boot Loader之间,相对轻便,基本功能完备,缺点是缺乏后续支持。

    U-Boot

      U-Boot是由开源项目PPCBoot发展起来的,ARMboot并入了PPCBoot,和其他一些arch的Loader合称U-Boot。2002年12月17日第一个版本U-Boot-0.2.0发布,同时PPCBoot和ARMboot停止维护。

      U-Boot自发布以后已更新6次,最新版本为U-Boot-1.1.1,U-Boot的支持是持续性的。

      U-Boot支持的处理器构架包括PowerPC (MPC5xx,MPC8xx,MPC82xx,MPC7xx,MPC74xx,4xx), ARM (ARM7,ARM9,StrongARM,Xscale),MIPS (4Kc,5Kc),x86等等, U-Boot(Universal Bootloader)从名字就可以看出,它是在GPL下资源代码最完整的一个通用Boot Loader。

      U-Boot提供两种操作模式:启动加载(Boot loading)模式和下载(Downloading)模式,并具有大型Boot Loader的全部功能。主要特性为:

      -SCC/FEC以太网支持

      -BOOTP/TFTP引导

      -IP,MAC预置功能

      -在线读写FLASH,DOC, IDE,IIC,EEROM,RTC

      -支持串行口kermit,S-record下载代码

      -识别二进制、ELF32、pImage格式的Image,对Linux引导有特别的支持

      -监控(minitor)命令集:读写I/O,内存,寄存器、内存、外设测试功能等

      -脚本语言支持(类似BASH脚本)

      -支持WatchDog,LCD logo,状态指示功能等

      U-Boot的功能是如此之强大,涵盖了绝大部分处理器构架,提供大量外设驱动,支持多个文件系统,附带调试、脚本、引导等工具,特别支持Linux,为板级移植做了大量的工作。U-Boot1.1.1版本特别包含了对SA1100和44B0芯片的移植,所以44B0移植主要是针对Board 的移植,包括FLASH、内存配置以及串口波特率等等。U-Boot的完整功能性和后续不断的支持,使系统的升级维护变得十分方便。

    Blob

      Blob(Boot Loader Object)是由Jan-Derk Bakker and Erik Mouw发布的,是专门为StrongARM 构架下的LART设计的Boot Loader。

      Blob的最后版本是blob-2.0.5。

      Blob支持SA1100的LART主板,但用户也可以自行修改移植。

      Blob也提供两种工作模式,在启动时处于正常的启动加载模式,但是它会延时 10 秒等待终端用户按下任意键而将 Blob 切换到下载模式。如果在 10 秒内没有用户按键,则 Blob 继续启动 Linux 内核。其基本功能为:

      初始化硬件(CPU速度,存储器,中断,RS232串口)

      -引导Linux内核并提供ramdisk

      - 给LART下载一个内核或者ramdisk

      -给FLASH片更新内核或者ramdisk

      -测定存储配置并通知内核

      -给内核提供一个命令行

      Blob功能比较齐全,代码较少,比较适合做修改移植,用来引导Liunx,目前大部分S3C44B0板都用Blob修改移植后来加载uClinux。

    Bios-lt

      Bios-lt是专门支持三星(Samsung)公司ARM构架处理器S3C4510B的Loader,可以设置CPU/ROM/SDRAM/EXTIO,管理并烧写FLASH,装载引导uClinux内核。这是国内工程师申请GNU通用公共许可发布的。

      Bios-lt的最新版本是Bios-lt-0.74,另外还提供了S3C4510B的一些外围驱动。

    Bootldr

      Bootldr是康柏(Compaq)公司发布的,类似于compaq iPAQ Pocket PC,支持SA1100芯片。它被推荐用来引导Llinux,支持串口Y-modem协议以及jffs文件系统。

      Bootldr的最后版本为Bootldr-2.19。

    展开全文
  • (一) u-boot 基本介绍

    万次阅读 2017-07-28 12:51:27
    U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。 U-Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot...

    ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
    分享一个大神朋友的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程。写得特别用心喔~
    →→→→→→大神朋友简介:从事十几年人工智能研究,麻省理工博士学位,目前在百度继续进行着人工智能的研究。。。

    ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

    U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。

    U-Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。

    一、uboot的最终目的

    在说uboot之前,先看一下PC机是怎么启动的?

    • pc上电,bios(引导操作系统)、识别C盘、运行应用程序。
    • 同样的在嵌入系统里面,启动过程:一上电的时候,uboot(引导Linux内核)、挂接根文件系统、运行应用程序。
      这里写图片描述

    小结:uboot的最终的目的->启动内核

    二、怎么让嵌入式系统使用uboot

    ① 先来介绍一下补丁:

    • 什么是补丁?
    所谓的补丁就是我们在原码包上做了什么修改,我们将这些修改单独列出来放到一个文件,然后发布的时候,把补丁文件给别人家即可。
    • 怎么打补丁?
     tar xjf u-boot-1.1.6.tar.bz2
     cd u-boot-1.1.6/
     patch -p1 < ../u-boot-1.1.6_jz2440.patch
    

    -p1 是忽略配置文件中的第一个参数,即,u-boot-1.1.6/和u-boot-1.1.6_jz2440/

    这里写图片描述

    这里写图片描述

    • 补丁文件中的 ---表示原来的代码,+++表示修改后的代码;比如:
      这里写图片描述

    ② 打完补丁之后,要想uboot支持哪些单板,需要配置。通过make 100ask24x0_config 来配置我们此款JZ2440V3单板,然后再make编译uboot。

    总结一下:

    tar xjf u-boot-1.1.6.tar.bz2 //解压缩
    patch -p1 < ../u-boot-1.1.6_jz2440.patch //打补丁
    make 100ask24x0_config //配置
    make //编译
    

    ③ 编译完成以后,会生成一个u-boot.bin的文件,如图:

    这里写图片描述

    然后通过dnw或者eop将这个bin文件烧写到开发板上面,烧写完成以后在串口上可以看到它的启动信息;

    这里写图片描述

    三、uboot命令使用

    在嵌入式操作系统中,bootloader有很多种,我们这里使用的是uboot;

    ① 输入help或?可以查看uboot有哪些命令;

    • 如果想查看具体哪个命令的用法,可以输入“? 命令名”即可。
      这里写图片描述
    • 如何查看uboot有哪些环境变量?

    使用print 命令

    这里写图片描述

    ② 怎么设置环境变量?

    使用set 命令

    这里写图片描述

    总结一下:

    ?/help + 命令 //查询命令的用法
    print		 //查看当前环境变量
    set 		 //修改环境变量
    save		 //保存环境变量
    reset        //重启uboot
    boot		 //引导内核
    

    四、uboot功能介绍

    ① 对于PC机来说windows操作系统存在于硬盘上面,BIOS从硬盘上读出windows操作系统,然后放到DDR(SDRAM的一种 DDR SDRAM);

    ② 而对于嵌入linux来说,一般从flash中读取出内核,然后放到SDRAM中去。

    可以看出,uboot要具备的基本功能:能够读取flash、写入SDRAM之前要初始化SDRAM、启动内核。

    在开发阶段,我们想让它增加更多的功能,比如说加入写flash的功能,因为在开发中(为了开发方便),内核也是通过uboot利用网络或USB下载把内核烧写到开发板中去的。

    这里写图片描述

    总结一下uboot的功能:

    这里写图片描述

    五、uboot的源码结构:

    目录 特性 解释说明
    board 开发板相关 对应不同配置的(即使CPU相同),smdk2410、sbc2410x
    cpu 平台相关 对应不同的CPU,arm920t、arm925t、i386等;在它们的子目录下仍可以细分,比如arm920t就有at91rm9200、s3c24x0
    lib_i386 类似 平台相关 某一架构下通用的文件
    include 通用的函数 头文件和开发板配置文件,开发板的配置文件都放在include/configs目录下,U-boot没有make menuconfig类似的菜单来进行可视化配置,需要手动地修改配置文件中的宏定义
    lib_generic 通用的函数 通用的库函数,比如printf等
    common 通用的函数 通用的函数,多是对下一层驱动程序的进一步封装
    disk 通用的设备驱动程序 硬盘接口程序
    drivers 通用的设备驱动程序 各类具体设备的驱动程序,基本上可以通用,它们通过宏从外面引入平台/开发板相关的函数
    dtt 通用的设备驱动程序 数字温度测量器或者传感器的驱动
    fs 通用的设备驱动程序 文件系统
    nand_spl 通用的设备驱动程序 U-Boot一半从ROM、NOR Flash等设备启动,现在开始支持从NAND Flash启动,但是支持的CPU种类还不多
    net 通用的设备驱动程序 各种网络协议
    post 通用的设备驱动程序 上电自检程序
    rtc 通用的设备驱动程序 实时时钟的驱动
    doc 文档 开发、使用文档
    examples 示例程序 一些测试程序,可以使用U-Boot下载后运行
    tools 工具 制作S-Record、U-Boot格式映象的工具,比如mkimage

    U-boot中各目录间也是有层次结构的,虽然这种分法不是绝对的,但是在移植过程中可以提供一些指导意义

    这里写图片描述

    这些源码是怎么组织起来构成一个uboot的,最简单的方法就是分析它的makefile文件

    展开全文
  •  在上一篇文章 Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXRT1xxx Boot方式简介。今天痞子衡就来重点聊一聊i.MXRT1xxx Boot方式具体由哪些配置决定的。  无论是什么芯片里的BootROM,其最核心的功能无非两...

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Boot配置

      在上一篇文章 Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXRT1xxx Boot方式简介。今天痞子衡就来重点聊一聊i.MXRT1xxx Boot方式具体由哪些配置决定的。

      无论是什么芯片里的BootROM,其最核心的功能无非两个:一、从存放Application的存储器中加载执行;二、通过支持的通信接口接收来自Host的Application数据完成更新,所以Boot配置也主要围绕这两个核心功能。

    一、Boot行为模式选择

      BOOT_MODE[1:0] pin是决定i.MXRT1xxx Boot行为的最顶层配置,但是与上一篇文章里介绍的Kinetis/LPC/STM32 Boot Mode配置不同的是,i.MXRT1xxx上电永远是从ROM里开始启动,此处的BOOT_MODE[1:0]决定的仅是BootROM程序的不同行为模式(执行代码分支),而Kinetis/LPC/STM32 Boot Mode侧重的是决定CPU从ROM还是FLASH里启动。

    1.1 BOOT_MODE[1:0] Pinout

      下表是BOOT_MODE相关pinout信息,可在参考手册的External Signals and Pin Multiplexing章节中找到。
      i.MXRT117x pinout:
    i.MXRT_Boot_PinMuxIndex.PNG
    i.MXRT_Boot_PinMuxSRC_1170.PNG
    i.MXRT_Boot_PinMuxSRC_1170_2.PNG

      i.MXRT105x / i.MXRT106x / i.MXRT1064 pinout:
    i.MXRT_Boot_PinMuxIndex.PNG
    i.MXRT_Boot_PinMuxSRC_1050.PNG

      i.MXRT102x / i.MXRT1015 pinout:
    i.MXRT_Boot_PinMuxIndex.PNG
    i.MXRT_Boot_PinMuxSRC_1020.PNG
    i.MXRT_Boot_PinMuxSRC_1020_2.PNG

      i.MXRT1011 pinout:
    i.MXRT_Boot_PinMuxIndex.PNG
    i.MXRT_Boot_PinMuxSRC_1010.PNG
    i.MXRT_Boot_PinMuxSRC_1010_2.PNG

    1.2 BMOD[1:0]三种模式

      BOOT_MODE[1:0] pin状态是在POR_B pin上沿时被自动采样存储在芯片内部的寄存器SRC->SBMR2[25:24]中的,这两个bit也叫BMOD[1:0],BootROM其实是根据BMOD[1:0]的值来决定Boot行为的。(注意:如果改变了BOOT_MODE[1:0] pins的输入状态而使用ONOFF pin(RESET_B)去软复位,Boot行为并不会改变,因为BMOD[1:0]值并未改变)。
    i.MXRT_Boot_BOOT_MODE_pins_setting.PNG
      从上述Boot MODE pin settings表中我们可以知道,除了BMOD[1:0]=2'b11这种情况是reserved之外,其余三种情况对应三种Boot行为,痞子衡为大家逐一分析,先从最简单的行为模式(Serial Downloader)说起。

    1.2.1 Serial Downloader模式(UART/USB-HID)

      Serial Downloader模式顾名思义即串行下载模式,在这种模式下,BootROM通过指定的USB或者UART口来接收来自Host(恩智浦提供了上位机工具sdphost.exe或者mfgtool或者MCUBootUtility)的Application数据,并将数据存储在SRAM中执行,这种模式其实就是从SRAM启动,但是如果用这种模式去Boot Application缺点很明显,每次上电都需要将Application重新下载进SRAM,无法做到脱机自动Boot,所以显然这种模式的主要目的并不是从SRAM启动Application,那它到底有什么用?
      其实Serial Downloader模式主要是用来从SRAM中启动Flashloader,恩智浦官方提供了Flashloader程序,Flashloader程序可以用来将你的Application下载进i.MXRT1xxx支持的所有外部非易失性存储器中,为后续从外部存储器启动做准备。除此以外Serial Downloader模式还可以用来查看Fuse值。
      关于Serial Downloader模式以及Flashloader具体如何应用,痞子衡会在下一篇文章里进一步介绍。

    1.2.2 Boot From Fuses模式

      Boot From Fuses模式从名字来看其实会让人误解,这个模式并不是从Fuse里加载Application启动的意思,而是根据Fuse里的一些Boot配置值来决定从哪个外部存储器Boot。Fuse是i.MXRT1xxx里一块特殊的存储区域,用于存放全部芯片配置信息,其中有一部分配置信息和Boot相关。
      在参考手册Fusemap这一章节,可以看到完整的Fuse Map表,其中偏移0x460处的32bit配置数据的bit4是BT_FUSE_SEL,这个bit至关重要,决定了Boot From Fuses模式的主要行为,具体表现如下:

    • BT_FUSE_SEL=0:表明所有外部存储器中均没有Application,此时Boot From Fuses模式等同于Serial Downloader模式。
    • BT_FUSE_SEL=1:表明有外部存储器中存在有效Application,此时BootROM会根据Fuse中其他Boot配置信息进一步选择指定的外部存储器(Boot Device)去Boot。

      关于Fuse中其他Boot配置信息,文章后面痞子衡会继续讲。

    1.2.3 Internal Boot模式(Serial NOR/NAND、Parallel NOR/NAND、SD/eMMC、1bit Recovery SPI NOR)

      Internal Boot模式其实跟Boot From Fuses模式(BT_FUSE_SEL=1时)很类似,只是这个模式下BT_FUSE_SEL的意义有点不同,具体表现如下:

    • BT_FUSE_SEL=0:BootROM根据BOOT_CFG[x:0] pins和Fuse中Boot配置综合决定Boot Device,其中BOOT_CFG[x:0] pins的配置会覆盖Fuse中意义相同的Boot配置信息。
    • BT_FUSE_SEL=1:BootROM完全根据Fuse中Boot配置信息选择指定的Boot Device去Boot。

      我们可以通过更改BOOT_CFG[x:0] pins输入状态来切换Boot配置,这部分Boot配置在Fuse里也同样存在,但是使用BOOT_CFG[x:0]来更改Boot配置显然比烧写Fuse更方便快捷(也可以认为BOOT_CFG[x:0]主要用于产品开发过程中,待产品开发结束后,应直接用Fuse来锁定Boot配置)。关于BOOT_CFG[x:0] pin具体提供哪些Boot配置,文章后面痞子衡会继续讲。

    二、Boot Device类型选择

      前面痞子衡讲了,无论是Boot From Fuses模式还是Internal Boot模式,最终目的都是为了选择合适的Boot Device加载启动,那么Boot Device到底如何确定?主要取决于BOOT_CFG[x:0] pin以及Fuse里的BOOT_CFG1位。
      BOOT_CFG[x:0] pin(在RT105x/RT106x上是12bit,在RT102x上是10bit)跟Boot Device选择相关的是BOOT_CFG[7:4]这4个bit,对应Fuse里是偏移0x450处32bit配置数据里的bit4-7(也叫BOOT_CFG1[7:4]),本小节主要介绍的是BOOT_CFG1[7:4]。

    2.1 BOOT_CFG[x:0] Pinout

      下表是BOOT_CFG相关pinout信息,可在参考手册的External Signals and Pin Multiplexing章节中找到。
      i.MXRT117x pinout:
    i.MXRT_Boot_PinMuxIndex.PNG
    i.MXRT_Boot_PinMuxSRC_1170_3.PNG

      i.MXRT105x / i.MXRT106x / i.MXRT1064 pinout:
    i.MXRT_Boot_PinMuxIndex.PNG
    i.MXRT_Boot_PinMuxSRC_1050_2.PNG

      i.MXRT102x / i.MXRT1015 pinout:
    i.MXRT_Boot_PinMuxIndex.PNG
    i.MXRT_Boot_PinMuxSRC_1020_3.PNG
    i.MXRT_Boot_PinMuxSRC_1020_4.PNG

      i.MXRT1011 pinout:
    i.MXRT_Boot_PinMuxSRC_1010_3.PNG

    2.2 BOOT_CFG1[7:4]六种Device

      BOOT_CFG1[7:4]用于选择具体Boot Device,无论是RT105x/RT106x还是RT102x,它们支持的外部存储器种类是一样的,但是这里的具体配置值两个芯片上稍稍有些区别(主要是SD和SEMC NAND不一样)。
      下表是BOOT_CFG1[7:4]具体配置值信息,可在参考手册的Fusemap章节中找到。
      i.MXRT117x device selection:
    i.MXRT_Boot_BOOTCFG1_1170.PNG

      i.MXRT1064 device selection:
    i.MXRT_Boot_BOOTCFG1_1064.PNG

      i.MXRT105x / i.MXRT106x device selection:
    i.MXRT_Boot_BOOTCFG1_1050.PNG

      i.MXRT102x device selection:
    i.MXRT_Boot_BOOTCFG1_1020.PNG

      i.MXRT1015 device selection:
    i.MXRT_Boot_BOOTCFG1_1015.PNG

    三、Boot Device具体配置

      当Boot Device已经确定之后,底下就是配置该Device具体属性了。假设我们选择了Serial NOR FLASH,但是Serial NOR只是一类FLASH的统称,市面上有非常多的Serial NOR芯片,每个芯片特性可能不完全一样,那么BootROM怎么知道这些不同的Serial NOR芯片的特性呢?还是通过BOOT_CFG[x:0] pin和Fuse来指定。

    3.1 BOOT_CFG[x:0]

      BOOT_CFG[x:0] pin其实是跟Fuse里是偏移0x450处32bit配置数据里的bit0-x是对应的。

    • BOOT_CFG[7:0] pin对应的是Fuse BOOT_CFG1[7:0]
    • BOOT_CFG[x:8] pin对应的是Fuse BOOT_CFG2[x-8:0]

      前面讲过BOOT_CFG1[7:4]是用来确定Boot Device类型的,其余bit就是用来配置当前选择的Boot Device的具体信息,因此不同的Boot Device,这些bit的意义是不一样的。具体在Fuse里统一介绍。

    3.2 eFUSE map

      前面讲过,Fuse是i.MXRT1xxx里一块特殊的存储区域,用于存放全部芯片配置信息,其中有一部分区域分配给Boot。参考手册的Fusemap章节中可见所有bit具体定义,这里痞子衡仅贴出一部分用于示例:
    i.MXRT_Boot_Fusemap_1050.PNG
      从上表中我们可以看到i.MXRT105x上BOOT_CFG1,BOOT_CFG2共16bit的完整定义,除了BOOT_CFG1[7:4]前面已经介绍过之外,从其余bit的定义来看,确实是与具体Boot Device属性相关的。
      这些Boot相关的Fuse定义,在这里逐一解释意义不大,需要结合具体Boot Device一起来看,痞子衡后续会在介绍每个Boot Device启动的文章里再进一步分析。

      至此,恩智浦i.MX RT1xxx系列MCU的Boot配置痞子衡便介绍完毕了,掌声在哪里~~~

    欢迎订阅

    文章会同时发布到我的 博客园主页CSDN主页微信公众号 平台上。

    微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

    pzhMcu_qrcode_258x258.jpg

    展开全文
  • STM32三种BOOT模式介绍

    千次阅读 2018-07-22 09:17:25
    一、三种BOOT模式介绍 所谓启动,一般来说就是指我们下好程序后,重启芯片时,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。 Main Flash ...
  • CentOS7扩容/boot空间

    千次阅读 2019-10-16 16:22:35
    由于服务器的CentOS是别人装的其中/boot挂载在了nvme0n1p2上,大小只有200M,几个内核文件就把磁盘占满了,达到了91%,这样是非常不好的。 在打包安装系统一些基本环境时,就遇到了boot空间不足的问题,以下为解决...
  • 从零开始学SpringBoot-如何开始使用

    万次阅读 多人点赞 2018-06-08 23:08:48
    目的: 《从零开始学SpringBoot》,是小编打算通过写一系列的文章,让大家能够认识SpringBoot,通过对SpringBoot的入门学习后,小编会在通过一个示例Demo来让大家能够真正上手SpringBoot。适合人群: 1、有一定...
  • Spring Boot -01- 快速入门篇(图文教程)

    万次阅读 多人点赞 2018-11-28 13:31:59
    Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心...
  • 超详细的springBoot学习笔记

    万次阅读 多人点赞 2018-02-27 13:27:14
    Spring Boot 1.Spring Boot简介 Spring诞生时是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的 轻量级代替品。无需开发重量级的Enterprise JavaBean(EJB),Spring为企业级 Java...
  • 关于STM32的BOOT0和BOOT1

    万次阅读 多人点赞 2016-10-13 20:03:56
    STM32一共有三种启动模式,在ST官网上下载的RM0008中,可找到启动相关的配置说明: 翻译为中文: ...STM32三种启动模式对应的存储介质均是芯片内置的,它们是: ...3)系统存储器 = 芯片内部一块特定的区域,芯片...
  • 我的电脑是window+ubuntu系统。 1.制作一个U盘启动盘。下载对应的ubuntu系统,用UltraISO制作Ubuntu U盘启动。 2.打开电脑后选择u盘启动盘,然后选择try ubuntu without install。试用不安装。 ...
  • welcome to my blog 问题描述: 使用spring initializr创建maven程序, 在intellij idea中打开时报错: Failure to transfer org.springframework.boot:spring-boot-starter-parent:pom:2.2.4.RELEASE from ...
  • ubuntu修复启动引导

    万次阅读 2019-07-23 10:02:24
    解决步骤: 1:准备一个安装U盘,插入电脑->开机->选择试用Try ubuntu without install 2:打开终端(Open ... # sudo add-apt-repository ppa:yannubuntu/boot-repair # apt-get update #...
  • Spring Boot面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 17:48:42
    文章目录概述什么是 Spring Boot?Spring Boot 有哪些优点?Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?配置什么是 JavaConfig?Spring Boot 自动配置原理是什么?你如何理解 Spring Boot 配置加载...
  • 一、Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过...
  • Vue + Spring Boot 项目实战(一):项目简介

    万次阅读 多人点赞 2019-03-31 11:19:37
    白卷是一款使用 Vue+Spring Boot 开发的前后端分离项目。除用于入门练手之外,亦可作为搭建小型 Web 项目的脚手架。
  • 一、Spring Boot概述 1.回顾使用Spring开发WEB应用程序过程 2.新一代开发框架的诞生Spring Boot 编码方面 配置方面 部署方面 监控方面 3.SpringBoot核心功能 4.SpringBoot优缺点 优点: 缺点: 5....
  • Spring boot(4)-应用打包部署

    万次阅读 多人点赞 2016-08-18 15:35:40
    1、Spring Boot内置web Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,...
  • spring boot应用启动原理分析

    万次阅读 多人点赞 2015-11-30 22:36:38
    spring boot quick start在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server。如果之前没有使用过spring boot可以通过下面...
  • 15 个优秀开源的 Spring Boot 学习项目,一网打尽!

    万次阅读 多人点赞 2019-12-12 11:44:43
    Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 《Spring Boot + Vue 全栈开发实战》迄今为止已经加印了 8 次,Spring Boot 的受欢迎程度可见一斑。经常有人问松哥有没有推荐的 Spring Boot 学习...
1 2 3 4 5 ... 20
收藏数 903,597
精华内容 361,438
关键字:

boot