《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 数字多媒体处理器TMS320DM355启动分析
数字多媒体处理器TMS320DM355启动分析
来源:电子技术应用2012年第3期
苑玮琦,黄 旭
沈阳工业大学 视觉检测技术研究所,辽宁 沈阳110870
摘要: 分析了TI公司的TMS320DM355的启动方式和NAND启动流程,使开发者能够根据实际需求改动DVSDK中的UBL与编译U-Boot,并排除开发过程中出现的错误。使开发者通过各种方式下载操作系统内核映像至DM355的Flsah,并建立NFS文件系统,从而建立一个完整的开发环境。
中图分类号: TP37
文献标识码: A
文章编号: 0258-7998(2012)03-0027-03
The booting analysis of digital media processor TMS320DM355
Yuan Weiqi,Huang Xu
Shenyang University of Technology Computer Vision Group,Shenyang 110870,China
Abstract: This article analyses the boot mode of TMS320DM355,describes loading U-Boot from NAND, makes the developers be able to modify UBL and complie U-Boot,even debug.Next the developers need to download the OS image to the Flash of DM355 and establish NFS file system,thus bulids a complete development environment.
Key words : DM355;boot mode;NAND Flash;video monitor

    TMS320DM355(以下简称DM355)处理器是TI公司推出的面向便携高清视频应用的基于ARM9+协处理器架构的新型低成本DaVinci平台[1-2],主要应用于媒体播放器、数码相机、数码相框、IP网络摄像机、视频婴儿监视器等[3]。该处理器具有独特的启动方式,其启动方式的选择和硬件设置是开发的关键问题之一[4]。本文基于DM355的嵌入式目标板和TI公司的DVSDK,介绍了DM355的启动方式设置、启动并引导U-Boot的过程。

1 总体启动流程
1.1 启动方式设置

    DM355的ARM可以从异步外部存储器接口(AEMIF)上的OneNAND或者从ARM的内部ROM启动,这是由管脚BTSEL[1:0]的配置决定的[5]。BTSEL[1:0]也可以进一步设置ROM启动方式,即在芯片重置之后,除了当BTSEL[1:0]=01表明AEMIF已启动外,ARM一定从内部ROM的0x00008000处开始启动,ARM内部ROM中的这部分程序称作ROM Boot Loader(简称RBL)。因是TI公司嵌在DM355的内部ROM里面的,用户不能更改。
    BTSEL[1:0]共有如下4种设置[6]:
    (1)BTSEL[1:0]=01时,为AEMIF启动方式,这种模式由硬件控制,启动不包含ARM内部ROM(即RBL不运行)。在由OneNAND启动的情况下,用户必须自己在OneNAND的启动页中放入必要的启动代码,这些代码必须为OneNAND设备设置AEMIF模块。在AEMIF被设置之后,启动会紧跟OneNAND启动页中的AEMIF管理页而继续。
    (2)BTSEL[1:0]=00时,RBL运行,NAND启动。
    (3)BTSEL[1:0]=10时,RBL运行,MMC/SD启动。
    (4)BTSEL[1:0]=11时,RBL运行,UART启动。
    由此可见,不经由RBL的启动方式只有BTSEL[1:0]=01一种,而经由RBL的启动方式有3种(此时BTSEL[1:0]≠01)。
    当芯片被设置成NAND启动模式时,如果启动失败,则DM355会尝试MMC/SD 启动;如果MMC/SD 启动失败,则DM355会再次尝试这种启动方式;如果UART启动失败,DM355会再次尝试这种启动方式。
    DM355的总体启动流程如图1所示。

    NAND启动与OneNAND启动适用于系统参数和功能固定的应用场合,二者在价格和读写速度上的差异也使得设计者可以根据需求做出权衡。而MMC/SD启动适用于系统参数和功能经常需要改变的场合。UART启动一般应用于调试阶段而非实际应用。
    在设计系统选择启动方式时,可以根据各种方式的特点,选择合适的方式启动系统。
1.2 启动中的状态标志
    DM355的RBL会用GIO61来指示启动状态(可以用来驱动LED),这可以帮助开发者更直观地观察系统的状态。重启之后,GIO61被初始化为低电平。
    (1)如系统上电时通过NAND启动,未成功后会尝试通过MMC/SD启动,在此期间GIO61以4 Hz的频率切换高低电平。
    (2)如系统被上电时通过MMC/SD启动,在尝试启动期间GIO61以4 Hz的频率切换高低电平。
    (3)如系统上电时通过UART启动,在尝试启动期间GIO61以2 Hz的频率切换高低电平。
    当启动成功之后,在程序被移交给UBL之前,GIO61被设置为高电平。其过程如图2所示。

 

 

    总之,RBL在BTSEL[1:0] ≠01时运行的情况下,控制权被交给RBL,待读取BTSEL[1:0]的状态之后,RBL才执行合适的代码。
2 NAND启动流程
    NAND Flash存储器具有容量较大、擦写速度快等优点,适用于大量数据的存储,但不支持片内执行(XIP)。NOR Flash支持片内执行,读速度稍快于NAND Flash,但写入速度远落后于NAND Flash,且二者接口不同,这就决定了NAND Flash适用于大规模数据存储而NOR Flash适用于小量代码存储的特点。另外,接口的特点也决定了NAND Flash的读写更复杂,必需要驱动。
    当BTSEL[1:0]被设置为00时,NAND模式将启动,NAND启动模式默认NAND位于EM_CE0接口,这个接口的总线设置由管脚AECFG[3:0]确定。AECFG[3:0]必须被正确地设置, EMIF的信号才能被NAND器件采用。
    NAND启动流程如下:
    (1)RBL执行,初始化0x4000~0x7FFF(2 KB)的空间作为堆栈,最后32 bit(0x7FFC~0x8000)闲置,因为这里会被写入找到的UBL的块号。此时会禁止所有中断、中断请求和快速中断请求。
    (2)NAND器件的设备ID被从NAND读出来,然后从RBL的信息表中读取出一些必要的信息(如页大小和块大小)。信息表是DM355所支持的NAND设备的列表;然后,RBL在NAND的block 1中的page 0寻找UBL的描述符。
    (3)如果有效的UBL没有被找到(这取决于是否读到了正确的魔幻数),下一个块会继续被寻找,最多连续搜寻24个块,这是为了防止NAND中的坏块,搜寻24个块足够应付绝大部分NAND中的错误。
    魔幻数是基于在一个块的第0页的前32 bit读取0xA1ACEDxx而探测到的,只有块1~块24的page 0将会被读取和寻找魔幻数。
    (4)当一个有效的UBL标识符被找到之后,这个块的号码被写在ARM内部RAM的最后32 bit,即0x7ffc~0x8000。这种特性是为了调试方便,通过读这32 bit(例如通过JATG),可以知道UBL在哪一个NAND块读到了有效的UBL标识符,如果在搜寻完24个块之后还没有找到有用的标识符,则DM355将会尝试通过MMC/SD启动。
    (5)当有效的UBL被找到之后,RBL会处理UBL描述符,描述符给出了装载UBL和移交UBL控制权所需要的信息。接下来UBL被读取和处理,RBL首先可能会根据魔幻数所提供的信息启用一些与快速EMIF和高速缓存相关的操作。此外,描述符提供了在UBL的拷贝期间是否应用DMA的信息。一但启动条件确立了,RBL拷贝UBL到DM355的内部RAM,起始地址为0x00000020,开始的32 B是ARM的系统中断向量表(8个向量,每个4 B)。UBL的拷贝始于这32 B的中断向量表之后,提供了用户装载程序的必要的细节。表1为UBL描述符的格式。
      魔幻数的最后两位决定了NAND的启动模式,如表2所示。

      NAND RBL应用4 bit ECC校验来确定在将UBL读取到内部RAM时是否有错误发生。假如4 bit ECC校验探测到了错误,则UBL会通过ECC修正算法来修正错误。如果由于其他原因读取UBL失败,则拷贝过程会因为需要魔幻数而立即暂停,然后RBL会从找到魔幻数的那一块继续寻找相邻的块,以找寻另一魔幻数。当找到下一魔幻数时,将重复这一过程。利用这种机制,魔幻数和UBL可以被复制达24次,给予NAND读取错误以足够的冗余和错误恢复能力。
    如果在搜索了24个块之后没有找到有效的UBL描述符,则RBL会转向去通过MMC/SD启动。
    (6)将UBL读取到内部RAM之后,RBL将控制权交给UBL。
    (7)UBL开始扫描NAND以寻找ABL(Application Boot Loader)描述符的魔幻数,如果找到了描述符,则UBL将ABL装载进DDR,并跳转到ABL的入口地址。TI公司的UBL在8和9两个NAND块中找寻ABL的描述符,如果找不到,则屏幕会显示以下信息:
    UBL: Failed to read app descriptor
    UBL: NANDBoot() failed
    类似于UBL的描述符和魔幻数,ABL的描述符和魔幻数分别如表3、表4所示。
    NAND启动的总体流程如图3所示。

3 嵌入式目标板
    基于DM355处理器的目标板原理框图如图4所示。
    目标板上主要资源包括:(1)TMS320DM355处理器,可工作在216/270 MHz;(2)512 MB的NAND Flash,型号为Sumsang K9F4G08U0A,包含4 096个块,每块含64个页,页大小为2 048 B。芯片ID为0xDC[7];(3)128 MB DDR2,主频为533 MHz。
4 通过CCS烧写UBL及ABL
    (1)CCS的配置
    安装TDS510驱动,连接TDS510仿真器、DM355及PC机,打开CCS的配置程序,配置好DM355的JATG仿真环境[8],使CCS可以识别目标板。
    (2)烧写UBL及ABL(U-Boot)
    在CCS下打开TI公司的DVSDK中的NAND_progra-mmer.pjt,这是一个向NAND中写入UBL及ABL的CCS工程。打开nandProg.c可以看到下面定义好的UBL及ABL魔幻数:
unsigned int ubldesc [] = {
0xA1ACED00,    //Magic number
0x00000020,    //Entry point for the UBL
0x00000007,    //No. of pages for the UBL code
0x1,         //Starting block of UBL in NAND
0x1             //Starting page of UBL in NAND
};
unsigned int appdesc [] = {
    0xB1ACED22,    //Magic number
    0x0000000A,    //Start block in NAND
    0x81080000,    //Start address in DDR
    0x81080000,    //Entry point
    0x00000200,    //No. of pages for the complete Application
    0x00000000    //compression flag
    };
    在开发时可以根据开发需要对其进行改动,但要注意UBL及ABL的大小对其中一些参数的影响。
    (3)编译NAND_programmer.pjt并运行,根据提示输入编译好的UBL与U-Boot二进制文件。DVSDK开发包中有利用CCS编译UBL的工程,可以根据需求对其进行改动,但要注意其生成.BIN文件的大小,因为U-Boot在Lunix环境下进行编译也生成一个.BIN格式的文件。
    (4)用串口线连接DM355与PC机,启动DM355目标板,登录到U-Boot。此时可以通过U-Boot的指令来查看位于NAND中的UBL与RBL描述符[9],并证实修改的有关UBL和UBL的参数。
    实验表明,系统能依照设定的方式从NAND启动,并成功登陆U-Boot命令行,而且可以通过指令来查看魔幻数与描述符。下一步的工作是建立操作系统内核,并下载到存储器,建立文件系统,从而建立完整的开发环境。
参考文献
[1] TI公司.面向便携高清视频应用的DaVinci DM355处理器[J].世界电子元器件,2008(4):54-58.
[2] Texas Instruments.DM355 Linux PSP 1.20 release notes[M]. 2009.
[3] 刘继超.基于DM355的嵌入式网络视频监控系统设计[D]. 青岛:青岛科技大学,2009.
[4] 王薇薇.基于DM355的视频监控系统的设计与实现[D]. 武汉:武汉理工大学,2010
[5] Texas Instruments.TMS320DM355 digital media system-on-Chip(DMSoC)-SPRS463G[M].2007.
[6] Texas Instruments.TMS320DM355 DMSoC ARM subsystem reference guide.2007.
[7] Samsung Group.K9F4G08U0A datasheet.2005.
[8] Texas Instruments.Code composer studio development tools v3.3 getting started guide.2006.
[9] DENXU-BOOT及Linux使用手册.2005.

此内容为AET网站原创,未经授权禁止转载。