APP下载

嵌入式处理器基于SPI引导的RAM自检探讨

2015-10-19高传发孙振华任华锋许继电气有限公司技术中心河南许昌461000

网络安全与数据管理 2015年22期
关键词:数据格式内存嵌入式

高传发,孙振华,任华锋(许继电气有限公司 技术中心,河南 许昌 461000)

嵌入式处理器基于SPI引导的RAM自检探讨

高传发,孙振华,任华锋
(许继电气有限公司 技术中心,河南 许昌 461000)

介绍了嵌入式处理器在使用基于SPI引导方式时,如何检查DDR内存,以提高系统的可靠性。对系统的引导过程,包括片内ROM运行、片内RAM运行、DDR内存运行,进行了详细的介绍。对各阶段引导程序数据格式的处理进行细致的分析,并对生产实用化进行了实例验证。

SPI引导;内存自检;系统可靠性;引导过程

0 引言

随着全球网络进一步扩展到新终端设备和以前未连接的行业中,网络安全对消费者、企业和其他机构变得越来越重要。人们越来越需要性能安全、价格便宜的装置设备。为了降低成本,往往需要简化电路设计。例如,采用SPI方式引导硬件,使用 SPI Flash作为存储媒介,减少总线的布线,是简化硬件电路的较好的方法[1]。但采用SPI方式引导硬件,需要将程序引导到DDR内存中,同时又需要对DDR内存进行检查,这就出现了矛盾[2]。

1 基于SPI的硬件引导

本文以一个实例,对嵌入式处理器基于SPI引导硬件时如何进行RAM检查进行详细的介绍。图1是嵌入式处理器使用SPI引导的硬件框图。在图1中,硬件引导程序和系统程序放在 SPI Flash中,在上电引导后,系统程序会被搬移到DDR空间,在DDR空间运行起来。

图1 使用SPI引导的硬件框图

现在以U-Boot硬件引导程序为例,介绍以SPI引导模式引导系统硬件的情况。U-Boot是德国DENX小组的开发用于多种嵌入式CPU的 Bootloader程序,可以支持多种嵌入操作系统和多种处理器[3]。

编译的U-Boot程序,往往是运行在NOR Flash或DDR中的。但在基于SPI引导时,需要先从SPI Flash往片内RAM里运行一段程序,将DDR内存检查一遍,然后再将U-Boot引导到DDR内存中去运行,如图2所示。

2 SPI引导采用的数据格式

在TI公司的DSP及ARM处理器,飞思卡尔公司POWERPC及 ARM处理器,都支持基于 SPI的引导模式。在这些处理器的片内ROM都包含基本的SPI引导驱动程序。本文以飞思卡尔公司的QorIQ P1010处理器为例介绍其引导过程。P1010片内的SPI驱动程序能够把SPI接口Flash中的程序拷贝到DDR内存或片内RAM中。不过,在拷贝之前,需要先对DDR控制器或片内RAM进行配置。这就需要定义一个特定的数据结构,完成引导程序所需要的环境配置。对于不同的处理器,生产厂家定义的引导数据结构是不同的。

图2 SPI引导硬件程序框图

在P1010处理器完成复位序列后,通过选择使用处理器片内ROM的SPI引导配置程序,而后处理器内核开始运行该片内ROM程序,配置SPI控制器,并与外部的SPI Flash通信,将程序拷贝出来并跳到指定的位置运行[4]。SPI引导采用的数据格式如表 1所示。

表1 SPI引导模式的数据结构

在表 1中,配置字(Control Words)由配置 32 bit地址/数据对组成,主要用在配置就地访问窗口(LAW)和目标内存控制器的寄存器。配置地址域有两种模式,当最低位为0时,配置地址域高30 bit代表的是地址,此时配置数据写入此地址。当最低位为1时,配置地址域高30 bit代表的是指令,此时配置数据写入此地址。这样的结构让用户可以方便地配置4 B对齐的内存,完成控制指令操作,或定义程序配置阶段的结束[5]。配置地址域的数据格式如表2所示。

表2 配置地址域的数据格式

在表 2中,当 CNT(最低位)=0时,则高 30 bit用作要写入数据的地址,配置数据包含要写入的数据。

当CNT=1时,则高30 bit用作控制指令。

当EC=1时,代表配置阶段结束指令。

当DLY=1时,代表延时一定时间指令。

当CF=1时,代表更改SPI频率的指令。

CNT表示地址模式与指令模式的切换。

当处理器内核开始拷贝程序时,先判断0X40位置的标志是否正确,如果正确,先根据配置的地址/数据对的个数N来配置一些外围寄存器,然后从0X50处指示的Flash地址搬移用户代码数据到0X58指示的地址。搬移完成后,从0X60指示的地址开始运行。将片内运行的这一段程序叫TPL程序。

3 片内RAM运行的TPL程序

P1010包含 256 KB的 L2CACHE,也可以当片内RAM使用。要检查DDR内存,要先在片内RAM里运行一小段TPL程序。这一段程序是对基于DDR引导程序U-Boot的一个裁剪,主要完成内核的配置,初始化串口终端,初始化 DDR内存控制器,然后检查 DDR内存[6]。在这里不需要设置U-Boot的环境变量,不需要配置以太网等其他的外围器件。编译后的TPL目标文件为uboot-tpl.bin。

TPL程序的编译按RAM引导的方式处理。程序的开始地址设为:0xc0030000~0xc0038800。现在需要对编译后的uboot-tpl.bin进行格式处理,在其前面加上 SPI引导的可以识别的数据表头,如表3所示。

表3是按照表1(SPI引导模式的数据结构)和表 2(配置地址域的数据格式)完成的一个SPI引导配置实例。在这个实例中,将L2CACHE设为片内RAM,开始地址设为0xc0000000。这一部分空间在处理器内核引导时已经通过TLB映射,可以直接使用。

对TPL进行数据格式化存放,要用到一个工具,即boot_format,它可以将基于HEX的文件和基于 BIN格式的文件合并到一起。这是一个飞思卡尔BSP里带的数据格式化工具。采用以下命令:

合并后的文件为uboot_tpl_spi.bin。

表3 cfg_sram_p1010.dat数据格式

在 cfg_sram_p1010.dat文件里,TPL程序存放在 SPI Flash的0X400开始的地址。处理器先对片内RAM进行配置初始化,然后将TPL程序从0X400引导到0xc0030000开始的地址,并从0xc0030000开始运行。这时,处理器对DDR控制器进行配置,并对DDR空间进行自检。

4 DDR的自检及U-BOOT的运行

DDR RAM的自检可以采用写入特定数据(例如0x55,0xAA),然后回读比较来检查的方式;也可以通过检查行列地址数据线来检查。相关文档很多,这里就不介绍了。

当检查完DDR内存后,就可以引导并运行U-Boot程序了。U-Boot程序按RAM引导的方式编译。程序起始地址设为0X11000000。编译后的文件为uboot.bin。但在实际中需要将两个单独的BIN文件合并成一个文件,以方便生产和产品实用化。当uboot.bin与uboot_tpl_spi.bin合为的一个文件 uboot_spi.bin时,uboot_tpl_spi.bin放在前面,uboot.bin程序放在后面,如表4所示。

表4 产品实用化的文件数据格式

在表 4中,处理器在运行 TPL时,将 U-Boot从 SPI Flash的 0X10000地址引导到 DDR3的 0X11000000开始的地址(代码数据总长度0x40000),而后跳运行入口地址(0X1103f000),运行 U-Boot程序。这时,整个硬件系统引导起来了。操作系统可以通过U-Boot运行起来。

5 结论

嵌入式处理器在使用SPI引导硬件时,先通过片内RAM运行一段程序,对DDR内存进行自检,而后再将U-Boot程序及环境变量引导到 DDR空间[7],把硬件系统引导起来。通过实例化的应用,证明这在高性价比的嵌入式应用中是一个不错的选择,不仅能提高系统的可靠性,而且简单易行。

[1]张伟栋,赵红.基于 PowerPC8640处理器的通用处理模块设计[J].微型机与应用,2015,34(6):32-34.

[2]李相国,杨树元.基于PowerPC处理器SMP系统的UBoot移植[J].微计算机应用,2008,29(9):95-99.

[3]王齐.Linux PowerPC详解:核心篇[M].北京:机械工业出版社,2007.

[4]李宗海,陈蜀宇,李海伟.嵌入式 Linux系统在 ARM平台上的构建[J].计算机系统应用,2010,19(10):153-157.

[5]Freescale Semiconductor,Inc.Booting from On-Chip ROM(eSDHC or eSPI)[EB/OL].(2012-6-1)[2014-4-18].http://cache.freescale.com/files/32bit/doc/app_note/AN3659.pdf.

[6]邓国荣,刘厚钦.基于 NOR Flash的 OMAPL138双核系统自举引导启动实现[J].电子技术应用,2014,40(2):19-26.

[7]邹洋,李琳皓,梁峰.Nucleus操作系统在 ARM11上的移植研究与实现[J].电子技术应用,2014,40(9):10-13.

RAM selfcheck about embedded processor based on SPI Boot

Gao Chuanfa,Sun Zhenhua,Ren Huafeng
(Tec.Center,XJEC,Xuchang 461000,China)

This paper introduces the embedded processor based on SPI Boot how to complete the RAM selfcheck,to improve the system reliability.All the system Boot process stages,including ROM-onchip running,RAM-onchip running and DDR memory running,are introduced im detail.The data format processing of all the Boot stages is analyzed in detail,and the practical utility of production is verified by instances.

SPI Boot;RAM selfcheck;system reliability;Boot process

TP307

A

1674-7720(2015)22-0083-03

高传发,孙振华,任华锋.嵌入式处理器基于SPI引导的RAM自检探讨[J].微型机与应用,2015,34(22):83-85.

2015-06-23)

高传发(1972-),男,本科,高级工程师,主要研究方向:继电保护及自动装置产品研发。

孙振华(1983-),男,硕士,工程师,主要研究方向:变电站自动化研发。

任华锋(1976-),男,本科,高级工程师,主要研究方向:变电站自动化研发。

猜你喜欢

数据格式内存嵌入式
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
TS系列红外传感器在嵌入式控制系统中的应用
搭建基于Qt的嵌入式开发平台
基于RFID的户外广告监管系统的设计与实现
一种融合多业务的信息化系统框架研究
内存搭配DDR4、DDR3L还是DDR3?
倍福 CX8091嵌入式控制器
基于ArcGIS的规划数据格式转换研究