发明内容
本发明的目的是提供的一种基于DSP嵌入式系统的升级系统以及方法,以解决现有系统升级的人工服务问题。
为达到上述目的,本发明提供一种基于DSP的升级系统,用于对基于DSP的嵌入式系统进行升级,所述嵌入式系统从外部接收一信号传输流,所述升级系统包括:一解复用模块,用于从传输流中提取升级数据;一闪存,其中储存有启动加载的程序以及DSP主程序;一启动加载模块,用于执行系统硬件设备的初始化,并对闪存进行分配;以及一交互模块,用于提供使用者实时了解所述嵌入式系统升级进行的状况。
本发明所述的解复用模块更进一步包括:一判断单元,用于判断当前传输流中是否存在一升级数据,并获取所述升级数据的具体参数;以及一解析单元,用于根据所述升级数据的具体参数进一步解析所述传输流,并整合所述升级数据以形成对应的升级文件。其中,所述升级数据的具体参数包括升级数据的特定传输包序号PID、升级包的总数、包序号以及升级数据的版本号。
本发明所述的启动加载模块更进一步包括:一初始化单元,用于执行系统硬件设备的初始化,同时屏蔽所有的中断,设置CPU的速度以及时钟频率,并对内存进行分配;以及一预备单元,用于调用所述解析单元的对应信息,完成后准备加载所述DSP主程序。
本发明所述的闪存更进一步分为三个分区,分别用于储存初始化程序、预备程序以及DSP主程序。此外,所述闪存还包括一参数分区,用于储存记录升级执行过程中的相关参数。
本发明所述的交互模块为图形化界面。
本发明还提供一种升级方法,用于对基于DSP嵌入式系统进行升级,其包括下列步骤:设定启动加载相关功能;解析传输流中的升级数据,并生成对应的升级映像文件;确定闪存的物理划分,并调整修改各分区的尾地址;设定使用者交互界面,以图形化的方式显示升级过程中的各种状况。
本发明所述的解析传输流中的升级数据的步骤更详细地包括:初始化部分启动调谐器和调制芯片的驱动,将传输流存储在DSP系统中的直接内存存取DMA中;读取DMA以获取实时的传输流;解析传输流,以取得打包的原始流PES分组;解析PES分组,判断当前传输流中是否存在升级数据,若当前传输流中没有升级数据,则重置SP指针,DSP系统将DSP主程序加载进入内存并执行所述DSP主程序,若当前传输流中包含了升级数据,则根据PES分组中的参数,对传输流进一步解析;其中,根据PES分组中的参数对传输流进一步解析的步骤更详细地包括:版本控制,将闪存读出的当前版本和从PES分组中取得的版本信息进行对比,以确定是否要进行升级;若系统版本一致,则不需要升级,若版本不一致,将进一步解析传输流,通过PES分组中取得的PID来确定升级数据分组,最后对升级分组进行整合,形成完整的升级映像文件;形成完整的映像文件之后,将DSP主程序擦除后,将得到的最新版本的升级映像文件写入闪存;最后,将闪存最后一个分区中的主程序版本信息进行修改。
本发明所述设定启动加载相关功能的步骤更详细地包括:结合所述闪存的分区划分以及分配,将启动加载相关功能划分为至少两个独立的部分;其中,第一部分功能包括,硬件设备的初始化,屏蔽所有的中断,设置CPU的速度和时钟频率,内存的分配,并在程序初始化成功后进行SP指针的重置;第二部分的功能包括,系统初始化准备,调用接口,版本控制,闪存升级,并提供SP指针的重置。
本发明所述升级方法还包括制作多DEX系统的步骤,包括:将启动加载的第二部分功能集成在一个独立的项目文件中,并生成DEX文件,将DSP系统的主程序也生成独立的DEX文件;将启动加载的第一部分功能集成在一个项目文件中,并在生成LDR文件时将之前生成的两个DEX文件加载进去。
本发明的升级系统以及升级方法结合了多种应用技术以实现基于DSP的嵌入式系统的空中升级,解决了以往软件系统升级的人工服务问题,节省了后期的人工成本,为项目的实施和后期增值模块的升级提供了便捷、可靠并且低廉的实施方案。
具体实施方式
以下将结合一个较佳的实施例对本发明的升级系统以及升级方法作进一步的详细描述。
请参阅图1,其中显示了本发明的升级系统的结构框图,该升级系统用于对基于DSP的嵌入式系统进行空中升级,可应用于基于DSP系统的各类移动终端,较典型地,可应用于数字电视机顶盒。如图所示,本发明的升级系统包括解复用模块1、启动加载模块2、闪存(Flash)3以及交互模块4。
其中,所述升级系统从外部接收一传输流(TS码流),对于数字电视机顶盒而言,该TS码流是包含数字电视信号数据的封装数据包,所述升级数据以私有数据的方式封装在TS码流中。
所述的解复用模块1用于从TS码流中得到升级数据,其更进一步包括:一判断单元10,用于判断当前TS码流中是否存在一升级数据,并获取所述升级数据的具体参数;以及一解析单元12,用于根据所述升级数据的具体参数进一步解析所述TS码流,并整合所述升级数据以形成对应的升级文件。其中,所述升级数据的具体参数包括升级数据的特定传输包序号(PID)、升级包的总数、包序号以及升级数据的版本号。
所述的启动加载模块2用于执行硬件设备的初始化,并对Flash 3进行分配,其更进一步包括:一初始化单元20,用于执行硬件设备的初始化,同时屏蔽所有的中断,设置CPU的速度以及时钟频率,并对内存进行分配;以及一预备单元22,用于调用所述解析单元12的对应信息,完成后准备加载所述DSP主程序。
请结合图2,其中进一步显示本实施例中的Flash 3划分的示意图,其中所述Flash被划分为至少三个分区(Bank)30、32以及34,分别用于储存初始化程序、预备程序以及DSP主程序。此外,所述Flash 3还包括一个扩展的参数Bank 36,用于储存记录升级执行过程中的相关参数。在本实施例中,每一个Bank 30、32、34以及36均包括头信息段、引导段以及代码段,且各个代码段又可以进一步划分为区块以及各个区块对应的头信息。
在本实施例中,所述的交互模块4为图形化界面,更详而言之,可以是显示在屏幕上的可视化的窗口,使用者透过观察窗口便可以及时了解升级程序进行的情况,随时获知是否有错误产生。
接着,请参阅图3,其中显示了本发明的升级方法的简单流程图。
首先执行步骤S1,即设定启动记载相关的功能,即设定BootLoader程序的框架,更详细地说明如下:
第一部分的BootLoader负责硬件设备的初始化,屏蔽所有的中断,设置CPU的速度和时钟频率,内存的分配,最后进行SP指针的重置。本部分功能是为加载第二部分BootLoader程序做初始化准备;本方法中此部分对应的物理地址为0x00000000到0x00000F58。在本实施例中,具体的地址的确定是在最后LDR文件制作完成之后,才可以准确确定的。
第二部分的BootLoader主要功能则是判断是否需要升级并为DSP主程序做系统启动前的准备。本部分的初始化阶段也会进行CPU速度和时钟频率的设置和内存的分配相关操作,并提供升级功能,解复用功能的调用接口,待调用的模块功能完成之后重置系统SP指针,准备加载存储在第三部分的DSP主程序。在本实施例中,此部分对应加载Flash的物理地址0x00000F58到0x00030000段的代码。
至此,BootLoader的程序框架完成。
接着,执行步骤S2,即在BootLoader的框架完成之后,在BootLoader的第二部分添加自定义的功能,函数实现更详细的说明如下:
解复用:初始化部分启动了Tuner和调制芯片的驱动,TS流将存储在DSP系统中的直接内存存取(DMA)中,DSP系统中的DMA存储使用乒乓式缓存的方式。对DMA的读取,可以取得实时的TS码流。其中,升级数据是以私有数据的方式封装在TS流中,通过对TS码流的解析,可以取得打包的原始流(PES)分组,再进一步解析PES分组,即可以知道在当前的TS流中是否存在升级数据,并取得升级数据的具体参数,例如:确定升级数据的特定PID,升级包的总数和包序号。
需要说明的是,在解析TS码流中的升级数据时将会遇到两种情况:
如果当前TS码流中没有升级数据,那么可以重置SP指针,DSP系统将会从Flash第三部分的起始地址开始,将DSP主程序加载进入内存,之后执行主系统中的程序功能。
另一种情况是码流中包含了升级数据,解复用部分将按照从PES中取得的参数,对TS流进行进一步的分析:首先是版本控制,版本信息是存放在Flash中的最后一个Bank中,这个Bank中存放了DSP系统中数字电视的频道信息和当前DSP系统的版本信息。在本实施例中,将Flash读出的当前版本信息和从PES分组中取得的版本信息进行对比,从而获知是否要进行升级;若版本一致,就不需要升级,系统可以重置SP指针,DSP系统将会从Flash第三部分的起始地址开始,若版本不一致,将进行升级,解复用程序将进一步解析TS码流,通过PES分组中取得的PID来确定升级数据分组,最后对升级分组进行整合,形成完整的升级映像文件;在形成完整的映像文件之后,首先将DSP主程序擦除掉,在本实施例中是从0x00030000开始,一直擦除到Flash的倒数第二个Bank,最后一个Bank在本实施例中放置频道信息和版本信息,为不可以擦除的信息,擦除之后,将得到的最新版本的升级映像文件写入Flash;最后,写入Flash之后,将Flash最后一个Bank中的主程序版本信息进行修改。
接着,执行步骤S3,即设定使用者交互界面,以图形化的方式显示升级过程中的各种状况。更详细地说,在本实施例中,使用者可以透过显示在屏幕上的窗口了解升级的进度以及相关步骤的信息。
另外,本发明的升级方法还包括执行步骤S4,即制作多DEX系统。
更详细地说,首先,将BootLoader中第二部分的全部功能代码集成在一个项目文件中,生成独立的DEX文件,DSP系统的主程序也生成独立的DEX文件。其中,这两个DEX文件的生成,在Project Option中的设置没有要求。
其次,将BootLoader中第一部分的全部功能代码集成在一个项目文件中,生成LDR文件,特别的在Project Option中要加入特定的参数:Post-Build参数中分别加入生成的BootLoader第二部分DEX文件路径和DSP主程序路径,并指定输出LDR文件的路径和名称。自此,生成了完整的LDR文件。
本发明的升级方法还包括执行步骤S5,即确定Flash的物理划分,调整位置并修改尾地址,在实际使用中可以通过LdrViewer.exe查看生成的LDR文件,从而了解Flash各个部分代码的分布。
结合图2可以看到在本实施例中,Flash物理地址划分为至少3个部分,第一部分物理地址0x00000000到0x00000F57段,存储了BootLoader的第一部分代码;第二部分物理地址0x00000F58到0x00030000段,存储了BootLoader的第二部分代码;第三部分为主程序段,物理地址为0x00030000段以后的空间。
在本实施例中,为使启动程序可以正确的进行引导,需要查看LDR文件。在查看LDR文件时,要确定两个问题,第一个要确定的是主程序的起始地址是不是第N个Bank的首地址,如果不是起始地址,则要调整第二部分的程序代码,在其中加入冗余数据,重新生成DEX文件,并链接成新的LDR文件,不断试验,一直到主程序的起始地址是第N个Bank的起始地址为止;第二个要确定的问题是修改第二个BootLoader在Flash中的尾地址,这个尾地址是指针重置的标志,修改之后,在SP指针进行重置之后,系统才会正确的加载主程序。在本实施例中要修改尾地址,使用工具打开之后,编辑第二部分DEX1最后一个Block的Flags,修改值为000A。
完成以上步骤,即生成了完整的升级映像文件,最后使用Flash工具将映像文件烧入Flash中。
需要特别说明的是,本发明的升级系统以及升级方法不局限于上述实施例中所限定的模块以及步骤执行顺序,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围,其均应涵盖在本发明的权利要求范围当中。