微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于AT91RM9200的嵌入式ARM开发平台的实现

基于AT91RM9200的嵌入式ARM开发平台的实现

时间:11-05 来源:作者:中南大学 陈明义 王纬 点击:
嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可以裁剪来适应系统对功能、可靠性、成本、体积、功耗要求严格的专用计算机体系。随着各种微处理器功能的完善以及软件上操作系统的支持,使得嵌入式系统有了完整的体系架构。

  在专用的嵌入式板上运行操作系统需要利用Bootloader来引导加载内核和系统程序。Bootloader主要实现初始化硬件设备、建立内存空间的映射图,从而把嵌入式硬件和嵌入式操作系统很好地衔接起来。

  U-Boot是当前比较流行、功能强大、比较有代表性的Bootloader,支持的处理器包括PowerARM(ARM7,ARM9,Srongarm,Xscale)、MIPS、X86、Motorola等系列。

  与目前常见的嵌入式操作系统如Vxworks,QNx,Windows CE,Palm Os等相比,嵌入式Linux操作系统以价格低廉、功能强大而且易于移植被广泛地使用到各种嵌入式设备当中。文中主要介绍了基于at91 rm9200的ARM硬件开发平台,以及U-Boot和Linux-2.6.20内核在此平台上的移植。

  AT91RM9200处理器,是由Atmel公司开发的基于ARM920T内核的微处理器,带有MMU,CPU时钟最高可达240 MHz,有着丰富的标准接口、EBI接口,内部集成了静态存储控制器、SDRAM控制器、Burst Flash控制器等。SDRAM采用两片hy57v651620b芯片,组成32 bit通道,大小一共16 MB,Flash采用Intel Js28f128芯片,容量为16 MB。网络芯片采用dm9161a。系统硬件平台的原理,如图1所示。

  1 U-Boot移植

  对于AT91RM9200,系统上电时,通过检测BMS来选择系统的启动方式,如果BMS为高电平,则系统从片内ROM启动,如果BMS为低电平,则从片外的Flash启动。在没有移植U-Boot到Flash之前,只能选择片内ROM启动。片内启动时,AT91RM9200的ROM上电之后被映射到了0x0和0x100000处,在这两个地址处都可以访问ROM。AT91RM9200的ROM固化了一个Bootloarder程序,这个Bootloader主要完成一些相应的初始化工作,并且运行Xmodem协议等待接收Loader.bin映像。Loader.bin代码可以到Atmel官方网站下载,Loader.bin主要完成的任务是通过Xmodem协议将U-Boot.bin下载到内存中直接运行。U-Boot.bin在内存中跑起来之后就可以利用U-Boot的功能把Boot.bin和U-Boot.bin写到Flash中,从而实现片外Flash启动。其中Boot.bin主要实现的任务是把Flash中的U-Boot拷贝到内存中执行。

  U-Boot的源代码可以到官方网站下载。文中所用的版本是U-Boot-1.1.1,对AT91RM9200的芯片完全支持,由于具体硬件的不同,需要做一定的修改。支持AT91RM9200代码在BOARD/AT91RM9200 目录下面,主要有AT91RM9200DK.c,Flash.c,U-Boot.lds,Con-fig.mk几个文件。主要做的修改如下:

  (1)修改Config.mk中的Tex_base为0x20f00000,和前面的boot地址保持一致;

  (2)修改Flash.c文件,使其支持Intel JS28F128芯片。由于官方使用支持的是AMD Flash,需要在代码里添加对本系统芯片的支持。在U-Boot的代码中Strong ARM架构里的xm250,它的代码是支持Intel Flash的,可以参考相应代码实现移植;

  (3)修改头文件 include/Configs/AT91RM9200dk.H,主要修改的是针对SDRAM以及Flash的参数配置:将phys_sdram设置成0x20000000,这个是SDRAM的起始地址,phys_flash_sdram_size设置为0x1000000,SDRAM容量为16 MB。对于Flash,需要修改的是:Flash起始地址设置为0x10000000(Flash挂在bank0上),phys_flash_size设置为0x1000000。扇区的总数cfg_max_flash_sect相应设置为128。

  最后在Linux里安装交叉编译器,笔者用的交叉编译器的版本是2.95.3,编译代码,生成U-Boot.bin文件。U-Boot启动后显示,如图2所示。

  2 Linux2.6.20内核移植

  2.1 Linux内核版本选择


  Linux内核版本更新速度非常块,现在最新的版本已发展到了2.6.26.3。与2.4内核相比,2.6内核稳定性更好、对于总线、文件系统、块设备支持、多媒体、网络安全性等方面都有了更好的支持,因此笔者选择移植功能和可靠性都比较欧成熟的Linux2.6.20版本到本系统中。Linux内核的源代码可在www.kernel.org网站上下载,Atmel官方网站上可以获取针对AT91RM9200的补丁2.6.20-AT91.patch.gz和Linux-2.6.20-exp.diff.Bz2。对Linux2.6.20源代码打上支持AT91RM9200处理器的补丁之后,内核就可以支持AT91RM9200处理器了。

  2.2 交叉编译环境的建立

  采用的交叉编译工具为ARM-Linux-Gcc3.4.1,这是目前比较通用支持编译2.6内核的交叉编译器,完全支持编译2.6内核,在开发平台上将交叉编译器安装好,并配置好环境变量Path=$Path:/Usr/Local/Arm/3.4.1/Bin。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top