新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 应用于DM648的FLASH自动加载实现方法

应用于DM648的FLASH自动加载实现方法

作者:时间:2016-09-12来源:网络收藏

摘要:为实现DSP嵌入式系统的应用程序自动加载功能,提出了基于TI公司的的NOR Flash自动加载实现方法。首先对启动过程进行了分析,给出了用户加载程序的编写方法。在此基础上,根据两种文件格式的说明,设计出转换程序,生成可用于FLASH烧写的文件。最后在核心板上实现了在CCS环境下对Flah编程和程序自动加载,证明该方法有效可行。

本文引用地址:http://www.eepw.com.cn/article/201609/305059.htm

(以下简称DM648)属于TI公司的DaVinci系列DSP芯片,主要应用于智能视频监控、网络视频服务器、机器视觉等领域。DM648采用C64x+内核,主频最高可达1.1GHz,并且代码与C64x完全兼容。DM648从FLASH中加载引导程序的方法和之前C6x和C5000系列DSP芯片有很大的不同。第一,之前C6x和C5000系列DSP都是在上电后直接将FLASH的前1K空间的复制到片内内存运行,程序代码量不能超过1KB,程序功能有限,并且只能用汇编语言实现,编写难度大且可读性较差,而针对DM648,可以直接使用C语言实现,代码量不受1KB限制。第二,C6x和C5000系列DSP的应用程序使用CCS环境编译,生成的.out格式可执行文件需要使用TI提供的转换程序将格式转换成后缀为.hex的二进制文件才可以实现烧写。而DM648需要将.out格式可执行文件转换为.ais格式后才可以烧写到FLASH中,使用者编写程序实现文件格式的转换。

1 FLASH启动流程分析

DM648有多种启动方式,本次设计采用从外部存储器接门(EMIF)上的NOR FLASH启动。硬件电路需要在芯片复位前将DM648引脚BOOTMODE[0:3]的电平状态配置为0100,FASTBOOT引脚配置为高电平,由引脚外接1K电阻上拉到3.3 V来实现。DM648的其他启动方式及配置方法,可以参考文献。

复位之后,DM648从内部的ROM空间开始运行程序,地址为0x00800000。这部分程序称为ROM Boot Loader(简称RBL),是TI公司直接烧写到内部ROM的,用户无法更改。RBL首先修改DSP内部锁相环电路倍频系数为20,即CPU的工作时钟为外部输入时钟频率的20倍。这样可以缩短程序运行的时间;RBL读取EMIFA接口中地址为0xA0000000的代码和数据,该地址为NOR FLASH的第一扇区起始地址,存放在这个地址空间的代码称为用户复制程序UBL,并且UBL程序必须以AIS格式来存放。RBL会执行AIS命令字,将UBL程序各个数据段都复制到RAM中的运行空间,并将控制权转到UBL。UBL首先完成DM648的初始化工作,配置EMIF接口、DDR2控制器和UART接口,并搜索应用程序的AIS镜像文件,UBL解析AIS镜像文件,按照镜像文件的地址将程序复制到运行地址空间中。之后,UBL完成硬件环境的初步配置,跳转到应用程序开始运行。使用UBL进行二次引导可以将引导程序与应用程序功能相脱离,应用程序可以专注于功能的实现,并且同一个UBL程序可以适用于不同的应用程序。实现DM648芯片自启动的操作步骤如图1所示,以下将分别介绍用户程序和格式转换程序的编写方法,最后介绍一个完整的自动加载实现过程。

应用于DM648的FLASH自动加载实现方法

2 设计

用户引导程序UBL完成的主要工作是解析应用程序AIS镜像,并将各段数据复制到RAM中对应的运行地址。使用C语言在CCS环境下编写。内存分配方面本次设计的UBL程序运行空间在16K字节之内,因此可以独立定义其运行空间为片内的RAM空间的最初16K字节,即在UBL工程的CMD文件中增加如下代码,程序分配到RAMUBL空间中运行。

MEMORY

{

RAMUBL org=0x00A00000 len=0x00004000

}

需要注意的是应用程序中需要进行初始化的段不可以分配到上述空间运行,否则UBL在复制应用程序的过程中就会覆盖UBL运行中的程序或者数据,从而造成UBL运行崩溃。

UBL程序的工作流程为:

1)DEVICE_UARTOInit()初始化串行接口,配置串口通讯的速率、数据位、校验位等内容,在执行下述每个步骤中通过串行接口将调试信息发送给PC机,便于观察启动过程和确定故障原因。

2)DEVICE_EMIFInit()配置EMIF寄存器,使DSP可以访问EMIF接口外接的FLASH芯片。本次设计采用16bit异步模式来访问外部NOR FLASH芯片。

3)DEVICE_DDR2Init()配置DDR2控制器寄存器,使得DSP可以访问DDR2寄存器,实际工程中数据需要复制到DDR2 RAM存储器中。此时需要配置DDR2的总线宽度和读写时间参数等寄存器。

4)从FLASH芯片中保存的UBL镜像文件结束的下一个扇区开始查找应用程序的AIS镜像文件魔幻数。当一个有效的魔幻数被找到后,UBL会顺序读取之后的32位AIS命令并执行,将所有数据段复制到目的地址中。之后,UBL程序将Jump_Close指令的数据部分,即应用程序入口地址保存到变量gEntryPoint中。

5)UBL程序会完成硬件环境的初步配置,包括配置锁相环电路的倍频系数从而修改DM648的工作频率,配置DM648的PSC寄存器关闭不使用的片上外设降低芯片功率,配置引脚复用功能满足应用程序要求等。之后跳转到应用程序的入门地址gEntryPoint运行程序。

3 烧写文件格式转换程序设计

本次设计采用FLASH快速启动方式时,RBL只能解析AIS格式的镜像文件,而UBL和应用程序都在CCS环境中使用C语言实现,二者独立编译链接后会生成格式为COFF()的.out文件。因此需要编写程序实现COFF文件到AIS文件的转换,本次设计中整个转换过程使用C语言在VC6.0环境实现。

3.1 COFF文件格式分析

COFF文件以段的形式将程序中的代码和数据进行组织,默认情况下COFF文件包含3个段:.text为可执行代码段;.data为初始化数据段;.bss为未初始化数据段。一个完整的COFF文件如图2所示,包括以下几部分,依次为文件头、可选文件头、段信息表、段数据、重定位信息、行号入口表、符号表和字符串表。

应用于DM648的FLASH自动加载实现方法
上一页 1 2 3 下一页

评论


技术专区

关闭