基于AT91RM9200的智能电力管理系统设计(转)
以往的电力系统保护设备的核心部分大多采用总线型X86结构,这种模式一直存在着可靠性差的问题,一是X86结构自身就存在着抗干扰能力差的问题,二是由于发热量过大,长时间运行后会可靠性会下降。所以许多电力用户都在寻找一种更可靠的解决方案。
采用以DSP为保护核心、以ARM为通信管理和人机界面组成电力保护系统的优点在于:一是DSP和ARM本身具有功耗低,高可靠性的特点;二是DSP数据处理能力强,而ARM在通信和人机界面方面集成了大量的资源;三是两个CPU结构使得保护和管理分开,各功能模块之间互不影响。在软件上由于采用了U-boot作为引导程序、Linux作为操作系统,有许多优秀的应用程序成果可以利用。正是由于这些优势,采用ARM和Linux设计管理系统已经成为一个热点。
下面对本管理系统的硬件设计、U-boot移植和Linux的移植进行详细的介绍。
硬件设计
电力管理系统的核心部分是AT91RM9200,为了完成系统的存储和通信功能,需要扩展大量的外围电路。根据AT91RM9200的特点,系统的硬件结构如图。主要配置是:4M字节DataFlash(SPI接口),用于存储应用程序;8M字节 DataFlash(SPI接口),非易失性数据存储器,用于存储电力保护设备中的录波数据;32K字节铁电存储器、外扩CF卡和512K-8M 兼容,用户选配的NVRAM,用于数据存储;系统具有5路串口用于和DSP系统通信,1路RS232串口作为DBGU调试口;2个10M/100M自适应以太网口、1个USB主机口、LCD液晶屏接口以及键盘和指示灯接口。
U-BOOT移植
1、U-Boot简介
Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,为最终调用操作系统内核建立环境。U-BOOT是当前比较流行、功能强大的Boot Loader,可以支持ARM、PowerPC等多种体系结构。
目前u-boot-1.1.3版本已经支持基于AT91RM9200的开发板,同时增加了以太网物理层芯片DM9161E的驱动程序。因此在移植时只需要根据硬件情况修改相关的配置参数即可。
U-Boot代码主要目录结构如下:
board: 一些已经支持的开发板相关文件,主要包含SDRAM、FLASH、网卡驱动;
common: 与处理器体系结构无关的通用代码,如内存大小探测与故障检测;
cpu: 与处理器相关的文件。每个子目录中都包括cpu.c和interrupt.c,start.S。其中cpu.c初始化CPU、设置指令Cache和数据Cache等;
interrupt.c设置系统的各种中断和异常;
start.S是U-BOOT启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为进入C程序奠定基础;
driver: 通用设备驱动,如CFI FLASH、串口、USB总线等;
doc: U-Boot的说明文档;
include: U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
lib_xxx: 处理器体系相关的文件,如lib_ppc,lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;
fs: 支持文件系统的文件,U-BOOT支持cramfs、fat、fdos、jffs2等文件系统;
net: 与网络功能相关的文件目录,如bootp、nfs、tftp;
tools: 用于创建U-Boot、S-RECORD和BIN镜像文件的工具。
2、U-Boot移植
在修改的过程中,把u-boot中的相关文件进行了复制再做修改,这样便于文件管理和修复,具体修改的步骤如下:
1)下载U-Boot源代码,到U-Boot官方网站http://u-boot.sourceforge.net下载u-boot-1.1.3压缩包并解压缩。
2)修改和开发板相关文件。进入/board目录,复制at91rm9200dk目录,重命名为csca9218(系统开发板的名字)。进入csca9218目录,修改其中的config.mk文件,使之和Loader、boot程序的地址一致,TEXT_BASE=0x21f00000。重命名/board/csca9218/目录下的at91rm9200dk.c为csca9218.c,并修改Makefile文件中的OBJS := at91rm9200dk.o at45.o dm9161.o flash.o,OBJS := csca9218.o at45.o dm9161.o flash.o。
3)修改Makefile文件。进入/board/include/configs目录,重命名at91rm9200dk.h为csca9218.h。在/Makefile文件中添加如下代码:
csca9218_config : unconfig
@./mkconfig $(@:_config=) arm arm920t csca9218
其中arm是CPU的种类,arm920t是指cpu相关的代码目录/cpu/arm920t/,csca9218是指板卡相关的代码目录/board/csca9218。
修改arm编译器所在目录:
ifeq ($(ARCH),arm)
CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-
Endif
其中/usr/local/arm/2.95.3/bin/为arm编译器所在目录。
4)和硬件相关的修改。经过上面的修改,开发板csca9218的U-Boot功能已经和at91rm9200dk功能完全一样了。接下来根据具体硬件的情况来修改相关的参数,主要修改的地方有:
include/configs/csca9218.h -- 目标系统配置文件
cpu/arm920t/at91rm9200/lowlevel_init.S -- 内存参数配置
cpu/arm920t/at91rm9200/serial.c -- 串口配置
cpu/arm920t/start.S -- 程序入口
board/csca9218/at45.c -- 对Data Flash的支持
board/csca9218/dm9161.c -- 对以太网的支持
在include/configs/csca9218.h文件中,需要修改硬件的配置,其中包括系统的时钟、flash、SDRAM、DBGU、Data flash等,其中Data flash的修改如下:
/*系统配置有Data flash*/
#define CONFIG_HAS_DATAFLASH 1
#define CFG_SPI_WRITE_TOUT (5*CFG_HZ)
#define CFG_MAX_DATAFLASH_BANKS 2
#define CFG_MAX_DATAFLASH_PAGES 16384
/*配置Data flash的逻辑地址*/
#define CFG_DATAFLASH_LOGIC_ADDR_CS0 0xC0000000
#define CFG_DATAFLASH_LOGIC_ADDR_CS3 0xD0000000
5)最后进行编译,生成ELF格式的文件和用于下载的二进制文件,u-boot.bin和u-boot。
make clean
make mrproper
make csca9218_config
make all
Linux操作系统移植
ARM Linux支持ARM720t cores、ARM920t cores、StrongARM 1100、XScale等系列的ARM处理器。将ARM Linux移植到特定的硬件平台上,大致分成4个步骤:开发环境的建立,包括下载源代码、交叉编译环境的建立等;配置和编译内核,并对源代码做一定的修改;制作RAM disk来挂接根文件系统;下载、调试内核并添加自己的应用程序。
1)建立交叉编译环境。主要用到的开发工具主要有binutils、gcc、glibc,其中binutils是二制的处理工具。gcc是编译工具,glibc是链接和运行库。这些工具可以分别下载安装,另外德国的denx软件中心提供了一套供ARM嵌入式linux移植的完整的开发编译环境套ELDK,即Embedded Linux Development Kit,它包含了上述的开发工具,可以到ftp://ftp.leo.org/pub/eldk 上免费下载。
2)编译内核。嵌入式Linux内核的编译与普通Linux内核的编译类似,具体步骤如下:
make mrproper 清除先前配置
make menuconfig 对内核进行裁减
make dep 生成依赖
make image 生成内核镜像文件
在执行make menuconfig命令时会出现内核的配置菜单选项,我们可以根据具体的情况对内核进行裁减。其中涉及到处理器的选择、板级支持、对RAM disk的支持、各种设备驱动的支持。
3)制作RAM disk。内核启动后,会从指定地址读取根文件系统,RAM disk是在内存中虚拟一个磁盘,生成一个支持ext2文件系统的RAM disk具体如下:
创建一个512K的虚拟磁盘,命名为initrd.img
dd if/dev/zero of=initrd.img bs=1k count=512
将虚拟磁盘格式化为ext2格式
Mkfs.ext2 ?Cc initrd.img
程序下载与调试
系统的U-Boot、应用程序和操作系统都是通过DBGU调试口下载到开发板的SDRAM中,然后再利用U-Boot提供的写flash功能写入flash。首先宿主机(PC机)的串口1和目标机(开发板)的DBGU串口连接起来,在PC机上启动超级终端并设置成波特率115200、8位数据位、1位停止位、无校验、无数据流控制。
1)U-Boot下载。 系统上电后超级终端不断出现CCCCC......,使用xModem协议下loader.bin程序,下载完成后会再出现CCCC,这时使用xModem协议下载u-boot.bin,出现命令提示符。打开flash的写保护,再使用kermit协议下载u-boot.bin,然后烧写到flash中。使用kermit下载tkarm_loader.bin,然后烧写到flash中, 最后设置开发板IP地址、网关等环境变量并保存。具体操作如下:
protect off c0000000 c001ffff (打开flash写保护)
load (kermit协议下载u-boot.bin)
cp.b 20000000 c0010000 16b24 (烧到flash中,16b24是文件大小)
load (kermit协议下载tkarm_loader.bin)
cp.b 20000000 c0000000 e74 (烧到flash中)
setenv serverip 192.168.0.206 (设置服务器IP地址)
setenv gatewayip 192.168.0.1 (设置开发板网关)
setenv ipaddr 192.168.0.12 (设置开发板IP地址)
setenv bootdelay 1
setenv bootcmd run MYSCRIPT
saveenv (保存环境变量)
2)Linux操作系统下载。使用tftp下载Liunux内核和ram disk。首先在PC机上运行tftpsrv.exe程序,内核uImage和ramdisk要和tftpsrv.exe在同一个目录下,然后再超级终端执行以下操作:
tftp 20000000 uImage (用tftp下载Linux内核)
cp.b 20000000 c0028000 15f1bc (烧到flash中)
tftp 20000000 ramdisk (用tftp下载ramdisk)
cp.b 20000000 c0200000 287fa4 (烧到flash中)
protect off c0000000 c001ffff
setenv MYSCRIPT cp.b c0028000 20007fc0 180000\;cp.b c0200000 21000000 300000\;bootm 20007fc0 21000000 (设置环境变量)
saveenv (保存环境变量)
本文小结
经过实际硬件测试,各功能模块工作正常,整个系统资源丰富、结构合理、性能稳定可靠,这套系统目前已经在电力系统保护设备中得到了良好应用。
作者:宋占杰,蒋健,北京理工大学;
关阿囡,王坚,魏德骄,北京康拓科技开发总公司