一篇文章讲解清楚ARM9芯片启动流程

打印 上一主题 下一主题

主题 1003|帖子 1003|积分 3009

SAM9X60 ARM9 boot启动流程关键词先容:


  • 第一级bootloader - 也叫boot ROM,是集成在MPU内部的ROM里面
   它的主要功能是执行对MPU的基本初始化和设置,查找并将第二级bootloader从外部NVM中读取出来并放到MPU内部的SRAM.
可以让MPU强制停顿在第一级bootloader(boot ROM)阶段,然后配合Microchip提供的SAM-BA在体系编程工具去完成NVM(NOR、NAND、eMMC/SD卡)的擦写、编程写入等操作,或者设置MPU启动设置字,让MPU工作在所必要设定的模式(好比默认从QSPI0或者QSPI1启动,更改管脚默认映射关系等)。
  

  • NVM - Non-Volatile Memory 非易失存储器,指MPU外部用来存储用户代码的各种闪存装备,可以是SPI/QSPI/并行 Nor Flash、Nand Flash或者eMMC/SD卡等。
  • 第二级bootloader - 也是常提到的at91bootstrap,是Microchip原厂提供的,用于在MPU上电后运行的第一级bootloader(boot ROM)后去加载并继承运行的一小段代码,完成MPU的进一步初始化和设置,然后去外部NVM中寻找并加载第三级的用户代码(可以是RTOS代码或者U-boot、或Linux内核)到外部DRAM中。
  • 第三级bootloader - 也是各人熟悉的U-Boot,它是一个开源的bootloader,通常用来设置和初始化外设,加载和运行Linux OS,Microchip有专门维护针对其处置惩罚器MPU的U-Boot代码并放在github上供下载 - https://github.com/linux4microchip/。
SAM9X60 MPU boot启动流程详解:

1. 处置惩罚器(MPU)复位
   体系上电后,SAM9X60 MPU开始执行boot启动流程,由RSTC(Reset Controller)负责处置惩罚MPU所有的复位干系事情。 包罗下图所示的各种机制产生的复位事件输入
  

  • VDDBU POR - VDD Backup备份电源POR(Power On Reset上电复位)
  • VDDIN33 POR - VDD 3.3V输入电源POR(Power On Reset上电复位)
  • VDDCORE POR - VDD CORE内核电源POR(Power On Reset上电复位)
  • NRST - 外部复位管脚低电平输入

    并根据设定的机制来决定是否输出以下事件
  • RSTC Interrupt - 复位事件输出停止(可以在低功耗模式下作为MPU唤醒源)
  • Processor and Peripheral Reset - 执行处置惩罚器和外设的复位操作
  

   复位状态控制器(Reset State Manager)开始根据优先级处置惩罚各种复位事件源。复位事件源和其对应的优先级如下图:
  优先级复位状态复位在什么环境下产生时1通用状态检测到VDDBU POR2退出Backup模式当装备从Backup模式退出332.768KHz时钟出错PMC电路监测到32.768K输入失效4看门狗超时看门狗超时错误发生5软复位往RSTC_CR(复位控制寄存器)写软复位操作6用户NRST复位管脚检测到低电平NRST管脚检测到低电平输入且此时RSTC_MR(复位控制管理寄存器)的URSTEN=1(用户复位输入管脚使能)

   RSTC状态寄存器会记录前次的复位源,复位后MPU的程序计数器PC会被复位成0x0000 0000并开始执行集成在芯片内部的第一级bootloader(boot ROM):
  

2. 复位后运行MPU内部集成的ROM CODE
   体系复位后,SAM9X60 MPU首先运行内部的第一级bootloader - ROM CODE
  ROM CODE将完成下述初始化操作:


  • 初始化处置惩罚器CPU Clock和Master Clock.
   第一级bootloader首先会初始化处置惩罚器时钟(Processor Clock - CPU_CLK)和主时钟(Master Clock - MCK),主RC Oscillator(时钟发生器模块)会通过快速启动来唤醒整个体系,这时主时钟MAINCK这块也是使用RC Oscillator,由PMC(Power Management Controller)负责将MAINCK作为CPU Clock(CPU_CLK)和Master Clock(MCK).
  

   紧接着第一级bootloader会初始化PLLA锁相环,将体系频率倍频到396MHz并等待PLLA倍频后的频率可以或许稳定工作,此时PMC里的处置惩罚器时钟控制器(Processor Clock Controller)会选择PLLA的输出作为CPU Clock(CPU_CLK)和Master Clock(MCK)的输入时钟源.
  

   末了第一级bootloader会读取启动设置字(Boot Configuration Packet),它是存储在MPU内部的一块OTP(One Time Programmable)区域,这块区域的设置可以用于控制以下内容:
  

  • 克制或者使能串口UART或者DBGU端口(看设置字的设定)
  • 克制或者使能JTAG口(看设置字的设定)
  • 设定毗连外部NVM的IO采取哪组设置组合
  • 克制或者使能化外部NVM(Non-Volatile Memory)控制器接口.
  • 克制或者使能SAM-BA Monitor(在体系编程应用)
  如果在OTP区域没有写入设置字,则第一级bootloader会使用默认设置:
   

  • 设置DBGU(115200波特率)端口用于串口调试和SAM-BA通信
  • 使能JTAG口用于调试
  • 初始化NVM接口并按照先后顺序从以下NVM启动:

    • SDMMC0(IOSET0).
    • SDMMC1(IOSET0).
    • QSPI0(IOSET0).
    • SPI0(IOSET0).
    • NAND0(IOSET0).
    • 使能SAM-BA Monitor(运行在体系编程应用)

      • 例如第一级bootloader首先会根据IOSET0的设置尝试初始化SDMMC0接口,如果没有通过SDMMC0接口读取到有用的第二级bootloader,则会将SDMMC0接口的设置还原成原来的设置,接下来尝试从SDMMC1寻找有用的第二级bootloader,后面以此类推。


  3. 从外部存储NVM中寻找到第二级bootloader - at91bootstrap:


  • 加载at91bootstrap到芯片内部SRAM中运行.
  • 将芯片内部SRAM映射到地址0x0.
  • 复位PC的值到0x0并执行跳转

前面提到的寻找有用的第二级bootloader,包罗以下的操作:
   

  • ARM停止向量表的检测 - 得当于Nand、SPI/QSPI Flash启动
  • boot.bin文件的检测 - 得当eMMC/SD卡启动,寻找FAT分区里的boot.bin文件
  

   ARM停止向量表的检测是指将测停止向量表第6个位置,在ARM体系里面默认第6个停止向量表为预留且默以为0,在Microchip MPU中则利用这个位置来存储第二级bootloader文件巨细信息。也就是生成的第二级bootloader烧录.bin文件,从地址0开始存放的都是ARM停止向量表入口地址,第6个停止向量表在at91bootstrap编译时就插入.bin文件巨细信息。
  


   第一级的bootloader(boot ROM)在依次扫描外部NVM的时间,会在读取存储在NVM里面停止向量表内容时查抄存储第6个停止向量表的内容,如果该位置含有有用内容(非0xFF且值小于内部SRAM的巨细),则以为找到了有用的第二级bootloader。

  

   同样查找到FAT分区里的boot.bin文件,也必要判定.bin文件应小于内部SRAM的巨细。
  

4. 如果没找到at91bootstrap则转为SAM-BA Monitor模式等待sam-ba命令毗连
   JTAG接口在执行第一级ROM BOOT的时间是克制掉的,在以下条件下重新被使能:
  

  • 如果在外部NVM中找到at91bootstrap,在完成at91bootstrap加载、SRAM的重映射、PC重新复位并设置为0且开始跳转执行。
  • 如果在外部NVM中没有找到at91bootstrap,则转为SAM-BA Monitor模式,克制访问内部ROM
  

其他注意事项:
   

  • SAM-BA Monitor模式默认是启用的,除非在OTP设置区域中克制它
  • 如果SAM-BA Monitor只使用串口,则不必要用到外部的晶振
  • 如果SAM-BA Monitor还必要使用USB口,则必要接上外部的晶振
  5. 第二级bootloader - at91bootstrap


  • at91bootstrap是一个开放的用户程序,支持功能订制,具备高度的灵活性
  • at91bootstrap存储在外部的NVM中,必要被加载到MPU内部SRAM运行
  • 加载后SRAM地址会重映射到0、PC重新复位并设置为0且开始跳转执行。
6. 第三级bootloader - U-Boot


  • 关于U-Boot的作用就不在这里多做先容

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表