Chinaunix首页 | 论坛 | 博客
  • 博客访问: 137263
  • 博文数量: 35
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 380
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-09 12:22
个人简介

http://www.76ku.cn

文章分类

全部博文(35)

文章存档

2011年(1)

2010年(17)

2007年(17)

我的朋友

分类: LINUX

2007-06-15 02:12:56

 

AT91RM9200启动机制简析

 

 

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

 

H9200M开发板简介

1.ATMELAT91RM9200微处理器

  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:用于与PCModem通讯

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代码主要包含两部分:bootloaderUploader

  BMS=1,ROM地址被重映射为0x00000000,内部固化的启动代码开始运行,首先

激活bootloader对设备进行初始化,接下来从片外"非挥发"的存储器中寻找有效的

可执行代码.首先要分析该存储器的前32字节(ARM异常向量入口代码,当ARM发生

异常时转向不同的处理程序进行处理),若是执行跳转或载入与PC 寻址相关的PC

ARM 指令,则认为是有效代码,分析计算要下载代码的长度,然后将确定大小的代码

载入到片内SRAM的起始地址(0x00200000),随后该地址被映射为0x00000000并开

始执行下载的代码(相当于bootloaderstage1阶段,启动过程详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.

 

 

 

阅读(1150) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~