AT91RM9200启动机制简析

本文以H9200M开发板为例,简单分析一下AT91RM9200处理器的启动机制

一 H9200M开发板简介
1.ATMEL的AT91RM9200微处理器     AT91RM9200微处理器是一款由ATMEL设计生产的嵌入式ARM微处理器,内含一个ARM920T核和以下主要片内外围:
1) ARM920T ARM-Thumb 微处理器核
2) 片内存储器     128K ROM: 地址 0x00100000 内有厂家固化的启动代码16K SRAM: 地址 0x00200000 通常在此配置堆栈区
3) 外部总线接口 EBI 支持SDRAM,Static Memory,Burst Flash,和nand Flash等
4) 片内外围电路

5) 网卡接口      

6) 双USB2.0主口
7) USB从口        

8) 多媒体卡接口  

9) IEEE 1149.1JTAG边界扫描接口 MCI
10)三个异步串行控制器 SSC           

11)四个同步/异步收发器 USART
12)主/从串行外围接口 SPI            

13)两个三通道16位的定时/计数器 TC
14)两线接口 TWI


2.NOR Flash存储器 
  4M 数据宽度16位存放启动代码,Linux内核,用户程序等 通过J201跳线选择 Chip Select 0(0x10000000) 或 Chip Select 7(0x80000000)
3.NOR Flash存储器
  64M 16位 映射到Chip Select 3 (0x40000000)
4.SDRAM 存储器
  32M 由两块16位的SDRAM并联成32位的存储系统 作为程序的运行空间(内存)
  映射到Chip Select 1 (0x20000000)
5.异步串行通讯口
  Debug UART:用于软件调试与开发
  UART0:用于与PC及Modem通讯
6.UD485接口
7.以太网MAC
8.USB接口
9.IIC存储器
  用于存储IP地址、MAC地址及系统加密等
10.系统总线驱动
11.跳线及LED显示
12.JTAG接口
13.复位电路
14.电源电路

 

二 启动模式选择(BMS)

AT91RM9200芯片的PA31/BMS引脚的电平高低来决定选择哪种启动模式:当J100跳线1-2短接时,BMS为低电平(BMS=0),复位后从片外Flash启动;当J100跳线2-3短接时,BMS为高电平(BMS=1),复位后从片内ROM启动。启动(复位)时首先执行的是位于0x00000000处的指令
1.片内启动(BMS=1)
      片内ROM代码主要包含两部分:bootloader和Uploader
      当BMS=1时,ROM地址被重映射为0x00000000,内部固化的启动代码开始运行,首先激活bootloader对设备进行初始化,接下来从片外"非挥发"的存储器中寻找有效的可执行代码.首先要分析该存储器的前32字节(即ARM异常向量入口代码,当ARM发生异常时转向不同的处理程序进行处理),若是执行跳转或载入与PC 寻址相关的PC ARM 指令,则认为是有效代码,分析计算要下载代码的长度,然后将确定大小的代码载入到片内SRAM的起始地址(0x00200000)处,随后该地址被映射为0x00000000并开始执行下载的代码(相当于bootloader的stage1阶段,启动过程详见uboot的启动流程).
 

     若没有找到有效的代码,Boot Uploader被激活,建立外部通讯通道(调试串口Debug UART 或USB),启动xmodem协议,等待用户上传代码(loader.bin),载入片内SRAM并执行(进行必要的初始化),进入uboot启动流程.  Uboot启动后,即可将起动程序(boot.bin ramdisk uboot.bin),Linux内核及应用程序烧到Flash中固化,复位后即可从片外Flash启动.

 

2.片外启动(BMS=0)
     当BMS=0时,片外含有启动代码的Flash被映射到0x00000000,并由此处开始执行.

 

注:引导程序为变量与堆栈在内部SRAM 开辟一片存储区域。为防止上载错误,载入的应用程序至少要小于SRAM 3K.

你可能感兴趣的:(AT91RM9200启动机制简析)