应用于DM648的FLASH自动加载实现方法
摘要:为实现DSP嵌入式系统的应用程序自动加载功能,提出了基于TI公司的TMS320DM648的NOR Flash自动加载实现方法。首先对启动过程进行了分析,给出了用户加载程序的编写方法。在此基础上,根据公共目标文件格式和应用镜像脚本两种文件格式的说明,设计出公共目标文件格式到应用镜像脚本转换程序,生成可用于FLASH烧写的文件。最后在TMS320DM648核心板上实现了在CCS环境下对Flah编程和程序自动加载,证明该方法有效可行。
TMS320DM648(以下简称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所示,以下将分别介绍用户程序和格式转换程序的编写方法,最后介绍一个完整的自动加载实现过程。
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指令的数据部分,即应用程序入口地址
用户引导程序 公共目标文件格式 应用镜像脚本 TMS320DM648 自举加载 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)