引言
芯片的烧写与自加载是一个DSP系统能够顺利运行的基本条件。在DSP加载技术方面已经有大量文献和工作成果,比较好地解决了DSP自加载方面的许多基本问题。而传统的烧写/加载方案在调试、更新程序时需要反复外接仿真器,配置跳线,并且只能加载运行指定地址空间上的工程。这些对处于安装调试阶段的系统影响不大,但在诸如航天设备、大型机械或其他恶劣环境中工作,难以直接进行仿真器连接的DSP系统中,无法采用普通的烧写/加载方案对其进行更新和调试。
通过分析DSP系统加载原理,提出了一种基于TI公司C6x芯片的远程多加载DSP系统设计。该系统由通信芯片、DSP、外部动态存储器、外部闪存(Flash)共同组成,具备远程烧写、程序选择加载功能。系统程序更新时也具备很高的安全性,即使烧写过程中断电,下次上电后仍然可以继续烧入、运行新的工程。
1 系统结构
为了满足功能设计需求,加载与烧写系统除了包括DSP系统运行必需的DSP芯片之外,还需要连接外部动态存储器(SDRAM)、可擦除存储器(Flash)、通信芯片等。系统结构如图1所示。其中,通信芯片负责与远程控制端进行数据交换,SDRAM中存放DSP工作用代码和数据,而负责引导实际工作工程的“引导工程”和负责实际信息处理任务的“工作工程”代码数据分别存放于不同的Flash空间。
2 实现方案
首先简要说明C6x系列DSP的普通二次加载工程的引导原理。自加载模式的DSP上电初始时,会从CE1空间起始地址(0x90000000)开始拷贝一定长度(C671x系列为1 KB)的数据到内部存储器0地址,并从0地址开始执行程序。由于拷贝数据长度有限,通常情况下一个长度大于1 KB的自加载工程需要进行二次加载操作,因此该工程必须包含一个长度小于1 KB的Bootloader模块,该模块由进行二次加载数据搬移操作的代码构成。工程编译完成后,Bootloader模块被烧写在Flash最开头的1 KB地址空间内,系统上电复位后由DSP自动搬运到0~1 KB地址空间内执行(第一次加载),并由该模块进行其他数据段的数据搬移(第二次加载)。在数据搬移结束后Bootloader模块将PC指针跳转到_c_int00地址段,并最终进入主函数,开始整个工程的运行。整个自加载过程如图2所示。
显然,只有存放在DSP CE1空间最前端的数据才能被自动加载和运行。为了使系统上电时刻就具备通信、烧写和多引导功能,需要将具备上述功能的引导工程存放在CE1基地址开始的空间。
DSP多引导技术正是在普通DSP系统的加载技术基础上发展而来的,将具备引导、通信、烧写、存储器检纠错功能的工程作为引导工程独立存储在DSP CE1空间,由DSP自动加载运行;而将具备不同功能的应用程序代码分别存储在其他存储器,等待引导工程根据功能需要去加载。
引导工程由DSP自动运行,随后根据远程指令或按预定程序流程的执行通信、更新工作工程代码,或搬运并运行存储在其他空间工作工程内的Bootloader段,从而引导不同功能的工作工程运行。借助这种工程分离运行技术,可以通过远程端或自动对空间电子设备存储器中的代码进行更新、检纠错和加载操作,甚至进行多个工作工程的切换以满足不同应用背景下的功能需求;即使在更新或切换过程中出现故障,系统复位后仍可回到正常工作的引导工程中进行系统维护或重新更新,具备防烧写功能。
2.1 引导工程设计
引导工程是负责与远程控制端通信,获取工作工程代码并完成烧写、引导工作工程加载运行的程序。引导工程需要具备自加载、上传校验数据、烧写引导等功能。
2.1.1 自加载功能
引导工程采用普通工程的加载/烧写方式,需要在产品生产完成后以仿真器模式进行烧写固化。由于引导工程具备需要通信、烧写等功能,其数据长度一般来说会超出1KB的DSP自动搬移长度限制,所以系统中的引导工程首先需要设计成一个具有二次加载能力的工程,并烧写在DSP存储器CE1空间的最前端,确保DSP在自动引导时首先加载和运行的是引导工程。
在设计引导工程自加载功能时,与普通二次加载工程相比有所不同:
①程序存储地址要加以限制,避免占用工作工程空间;
②引导工程的Bootloader必须放置在CE1空间的最开头1 KB内,使DSP能够在上电时自动加载运行。
2.1.2 通信功能
通信模块主要由通信芯片和通信控制逻辑组成,负责完成远程控制端与DSP之间的通信。根据不同应用场合,可以选择不同的通信芯片与链路协议。下面主要考虑应用层协议设计。
(1)数据上传与校验
按照参考文献中的方法,为了将工作工程在线烧写到Flash存储空间中,首先需要下载编译工程文件,并转换为可烧写的.hex文件。通过通信模块,远端设备可以将hex文件发送并存储在DSP外部存储器中。错误的hex文件数据可能导致在引导工作工程时DSP工作异常,甚至完全无法正常加载,因此远程端完成数据上传后应对保存的数据进行校验。比较直观的方法是通过通信接口将DSP收到的数据回传,远端设备将此数据与原始.hex文件进行比较,以确定数据是否正确。
(2)烧写指令
完成数据校验后,远程端向DSP发送烧写指令,开始烧写。
(3)引导指令
若需要根据功能运行相应的工作工程,则由远程端向DSP发出不同的引导指令,引导对应地址的工作工程运行。根据DSP自动加载原理,引导工程需按同样的步骤进行。
引导工程的通信功能可以以中断或查询的方式进行。如果以中断方式进行,需要妥善处理中断向量表和使能对应中断。在引导工程退出时,必须关闭所使用的通信端口和中断资源。
2.1.3 在线烧写功能
早期DSP系统为了使用非易失性存储芯片保存数据,必须使用专用烧录设备进行。随着存储技术与控制技术的进步,部分DSP芯片已经具备对直连Flash芯片进行擦除和写入的能力。
由于引导工程与工作工程共享一片Flash存储介质,在擦除工作工程的存储空间时,需要采用扇区擦除而不是整片擦除,以确保引导工程不会被改写。也可以通过对其所在扇区写保护的方法来实现对引导工程的保护。写保护操作可以确保无论对工作工程的烧写是否成功,引导工程在第一次成功烧录后将会一直驻留在Flash芯片中,每次上电时都可以进行通信、烧写和引导工作。
在某些对设备可靠性要求严格的场合,也可将引导工程单独存放在一片PROM中,在一次烧写固化完成后,引导工程所在空间将不可再修改。这样可以完全避免使用Flash芯片反复擦写引起的存储器性能下降,以及在烧写工作工程时误擦除引导工程的问题。
烧写流程与擦除流程类似,可以参照参考文献中的说明设计。
2.1.4 加载引导功能
当完成了对工作工程文件的烧写之后,需要根据远程控制端指令引导工作工程开始工作。根据DSP自加载的原理,引导工程必须首先将所有已使用的DSP资源关闭,并将Flash存储器其他空间内工作工程的Bootloader程序拷贝到DSP内部存储器0地址起始的空间内(这一过程模拟了图2所示DSP自动加载时的数据搬移),然后将程序指针跳转到工作工程的Bootloader起始地址,开始运行。由工作工程的Bootloader程序将整个工作工程剩余数据段依次加载到DSP的动态存储器中,最后跳转到工作工程的起始地址,开始执行工作工程的主程序段。
由引导工程进行引导的好处在于:DSP只能自动加载CE1空间起始段的数据,而用户设计的引导工程可以加载任意可读存储空间内的数据;DSP只能在上电时刻加载程序,而引导工程可以在任意时刻转换加载不同的应用工程程序。
2.2 工作工程设计
工作工程是用来完成DSP系统真正信息处理需求的工程,它的设计与普通的二次加载DSP工程基本原理一致,但需要针对双二次加载功能做几个方面调整:
①存储器设置。由于可以复用引导工程所使用的所有外部设备和RAM,在工作工程中配置存储器空间时只需要保留引导工程使用的Flash地址空间,其他所有引导工程使用的存储器在正常工作前都可以重置。
②ISTP(Interrupt Service Table Pointer,中断服务指针寄存器)设置。每一个工程都有独立的中断向量表,因而进行工程切换时需要重置中断向量服务指针,以确保新的工程能正确地响应中断。
③其他资源设置。为了简化操作、节省资源,引导工程中应尽可能少占用DSP资源。除上述存储器和中断资源外,引导功能可能会用到定时器、MCBSP、EDMA等其他资源。在引导工作工程之前,需要全部关闭这些设备;同时,进入工作工程后需要重新初始化这些外设资源,避免发生设备使用冲突。
结语
通过分析、利用DSP加载运行机制,本文设计了一种具备远程更新能力的多加载DSP系统。利用通信接口远程更新程序代码,并将不同功能的DSP工程烧录在同一Flash芯片中,并可以通过外部通信指令选择不同功能的程序运行,使得DSP系统能灵活、安全地更新和运行。
远程多引导DSP方案在不改变系统整体框架的前提下,以较少的系统资源占用完成了远程在线DSP代码烧录和引导操作的功能设计,同时由于采用了引导工程、工作工程分离的做法,具备较强的鲁棒性。该系统具有烧写免拆卸、防烧死等优良特性,在航天、机械、控制系统设计中可以广泛使用。
评论
查看更多