TMS320C6713的软件自动更新方案设计
发布时间:2007/8/30 0:00:00 访问次数:522
电子技科大学 符鸿亮 解梅
引 言
目前市面上存在大量基于DSP的嵌入式系统,随着系统的完善和功能的增强,几乎所有的DSP系统都面临着软件更新的问题,这时,更新方法的简易和高效就显得特别重要。在基于DSP(数字信号处理器)的嵌入式系统中,软件更新通常需要借助仿真器将最新的程序下载到目标板上,然后将程序写入非易失型存储器中。同时,由于新程序编泽、链接后生成的各段的大小和运行空间会发生变化,系统引导程序也需要作相应的改动。例如:上一个版本的程序对应的.text段的运行空间位于0x80000000~0x80000l00,而新程序对应的.text段的运行空间则位于0x80001000~0x80001110,.text段的运行空间和长度都发生了变化。另外,引导程序的任务之一是将.texl,段的数据从Flash中复制到其运行空间,因此就必须重新修改引导程序,将.text段复制的起始地址由0.x80000000改为0x80001000,并将复制长度改为0xll0,每一次软件更新都会重复上面的步骤。在远程系统控制应用中,这种更新方法就显得非常不便;在需要同时对大量的DSP系统进行软件更新或经常需要软件更新的情况下,这种方法的效率也非常低下。
笔者通过对TMS320C6713[1]DSP系统引导过程的分析和COFF[2](公共目标文件格式)文件格式的分析,提出了一个软件自动更新的方案,并在基于TI公司的TMS320C6713芯片与SST公司的SST39VFl601并行Flash芯片组成的硬件平台上实现;最后还简单介绍了本方案在TMS320VC5409系统上的实现。实现本方案的一个前提是DSP硬件系统上具有某种接口,可以从计算机中下载COFF文件到本地系统上,笔者使用的平台是通过UART接口连接计算机,使用Windows自带的超级终端工具,通过Xmodem协议将COFF文件下载到目标系统上,当下载完成后更新就会自动完成。DSP重新上电或复位后运行的就是最新的程序。本方案主要包括两个过程:一是通过解析COFF文件得到所需的数据并烧入Flash;二是系统上电后自动根据Flash中最新的数据引导、运行。下面详细描述两个过程的实现方法。
1 COFF文件解析
C或汇编程序在编译后会生成很多段(如.text、.bss、.switch、.cinit、.data等),这些段又可以分为需要初始化的段和不需要初始化的段。这里,需要初始化和不需要初始化是针对系统引导来说的。例如:.text为程序代码数据,系统上电后需要引导程序从Flash中复制到其运行空间中,称为“需要初始化的段”;.bss为初始化为0的数据空间,这个初始化为0的动作在C语言环境建立时进行,属于系统程序的一部分,与引导程序无关,称为“不需要初始化的段”。这样,只需要保存初始化的段到Flash中,而并不需要通过段的名称来识别哪些段是需要初始化的段,哪些是不需要初始化的段,两种类型可以通过COFF文件中的段信息表部分来区分。
1.1 COFF文件简介
COFF文件是DSP汇编器和链接器创建的目标文件,通常为项目目录下的Debug目录里后缀为.0ut的文件。在COFF文件中包含文件头、可选择的头信息、段信息表、每个初始化段的数据和重定位信息、符号表、字符串表。从中可以看出,COFF文件中包含了很多冗余的信息成分。为了节省空间、提高效率,在这里不直接将COFF文件烧进Flash,而只保存所需的信息,即每个初始化段的数据和程序的人口地址。下面详细描述如何从COFF文件中得到这些信息。
1.2 COFF文件格式
在COFF文件中,文件头部分提供了该文件中包含的段的个数,解析程序会根据段的个数扫描每个段的信息并保存初始化段的数据;可选择的头信息包含了程序的入口地址,在系统引导结束后会直接跳转到这个地址,系统就开始正常工作。段信息表的格式说明如表1所列。其中,段物理地址是该段的执行地址,也就是程序运行时该段所在的空间;原始数据文件指针指向段数据在COFF文件中的位置,如果该段为初始化段,那么从这里就可以得到需要写入Flash的数据的位置。计算如下:
段数据地址=COFF文件起始地址+原始数据文件指针
电子技科大学 符鸿亮 解梅 引 言 目前市面上存在大量基于DSP的嵌入式系统,随着系统的完善和功能的增强,几乎所有的DSP系统都面临着软件更新的问题,这时,更新方法的简易和高效就显得特别重要。在基于DSP(数字信号处理器)的嵌入式系统中,软件更新通常需要借助仿真器将最新的程序下载到目标板上,然后将程序写入非易失型存储器中。同时,由于新程序编泽、链接后生成的各段的大小和运行空间会发生变化,系统引导程序也需要作相应的改动。例如:上一个版本的程序对应的.text段的运行空间位于0x80000000~0x80000l00,而新程序对应的.text段的运行空间则位于0x80001000~0x80001110,.text段的运行空间和长度都发生了变化。另外,引导程序的任务之一是将.texl,段的数据从Flash中复制到其运行空间,因此就必须重新修改引导程序,将.text段复制的起始地址由0.x80000000改为0x80001000,并将复制长度改为0xll0,每一次软件更新都会重复上面的步骤。在远程系统控制应用中,这种更新方法就显得非常不便;在需要同时对大量的DSP系统进行软件更新或经常需要软件更新的情况下,这种方法的效率也非常低下。 笔者通过对TMS320C6713[1]DSP系统引导过程的分析和COFF[2](公共目标文件格式)文件格式的分析,提出了一个软件自动更新的方案,并在基于TI公司的TMS320C6713芯片与SST公司的SST39VFl601并行Flash芯片组成的硬件平台上实现;最后还简单介绍了本方案在TMS320VC5409系统上的实现。实现本方案的一个前提是DSP硬件系统上具有某种接口,可以从计算机中下载COFF文件到本地系统上,笔者使用的平台是通过UART接口连接计算机,使用Windows自带的超级终端工具,通过Xmodem协议将COFF文件下载到目标系统上,当下载完成后更新就会自动完成。DSP重新上电或复位后运行的就是最新的程序。本方案主要包括两个过程:一是通过解析COFF文件得到所需的数据并烧入Flash;二是系统上电后自动根据Flash中最新的数据引导、运行。下面详细描述两个过程的实现方法。 1 COFF文件解析 C或汇编程序在编译后会生成很多段(如.text、.bss、.switch、.cinit、.data等),这些段又可以分为需要初始化的段和不需要初始化的段。这里,需要初始化和不需要初始化是针对系统引导来说的。例如:.text为程序代码数据,系统上电后需要引导程序从Flash中复制到其运行空间中,称为“需要初始化的段”;.bss为初始化为0的数据空间,这个初始化为0的动作在C语言环境建立时进行,属于系统程序的一部分,与引导程序无关,称为“不需要初始化的段”。这样,只需要保存初始化的段到Flash中,而并不需要通过段的名称来识别哪些段是需要初始化的段,哪些是不需要初始化的段,两种类型可以通过COFF文件中的段信息表部分来区分。 1.1 COFF文件简介 COFF文件是DSP汇编器和链接器创建的目标文件,通常为项目目录下的Debug目录里后缀为.0ut的文件。在COFF文件中包含文件头、可选择的头信息、段信息表、每个初始化段的数据和重定位信息、符号表、字符串表。从中可以看出,COFF文件中包含了很多冗余的信息成分。为了节省空间、提高效率,在这里不直接将COFF文件烧进Flash,而只保存所需的信息,即每个初始化段的数据和程序的人口地址。下面详细描述如何从COFF文件中得到这些信息。 1.2 COFF文件格式 在COFF文件中,文件头部分提供了该文件中包含的段的个数,解析程序会根据段的个数扫描每个段的信息并保存初始化段的数据;可选择的头信息包含了程序的入口地址,在系统引导结束后会直接跳转到这个地址,系统就开始正常工作。段信息表的格式说明如表1所列。其中,段物理地址是该段的执行地址,也就是程序运行时该段所在的空间;原始数据文件指针指向段数据在COFF文件中的位置,如果该段为初始化段,那么从这里就可以得到需要写入Flash的数据的位置。计算如下: 段数据地址=COFF文件起始地址+原始数据文件指针
深圳服务热线:13692101218 13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)

深圳市碧威特网络技术有限公司
付款方式