对嵌入式系统进行程序更新的方法
技术领域
本发明涉及嵌入式硬件领域,具体地涉及对包括ARM芯片、DSP芯片和FPGA芯片的嵌入式系统进行程序更新的方法。
背景技术
在嵌入式硬件领域,基于ARM(低成本RISC微处理器)、DSP(数字信号处理器)、FPGA(现场可编程逻辑阵列)的硬件结构有着广泛的应用。在一些复杂的应用场合中,三种硬件能够优势互补,共同完成特定的复杂功能。举例来讲,在一些组合导航控制系统中,可以用ARM实现惯性测量单元的数据采集、标定、补偿,用DSP实现组合导航和控制算法,以及用FPGA实现各种外部接口。通常情况下,通过这三者各自的JTAG接口将它们的程序数据下载到FLASH芯片中。但在有些场合,当产品封装并交付使用后,通过JTAG接口更新程序数据就变的比较困难,尤其是ARM/DSP/FPGA联合使用的场合,可能会同时需要三个JTAG接口,这是不期望的。此外,在产品调试过程中,JTAG接口可能并不方便使用。因此,期待一种能够对三者的程序数据方便地进行更新升级的方法。
发明内容
为了解决现有技术中存在的上述问题,本发明提出了一种对包括ARM芯片、DSP芯片和FPGA芯片的嵌入式系统进行程序更新的方法。
根据本发明的一个方面,提出了一种对包括ARM芯片、DSP芯片和FPGA芯片的嵌入式系统进行程序更新的方法。在所述嵌入式系统中,FPGA芯片分别与ARM芯片和DSP芯片相连,FPGA芯片和DSP芯片之一连接到第一存储单元,该第一存储单元存储有FPGA芯片和DSP芯片的程序,所述ARM芯片连接到第二存储单元,该第二存储单元存储有ARM芯片的程序。所述方法包括通过串行数据接口执行以下步骤:向FPGA芯片发送针对ARM芯片、DSP芯片和/或FPGA芯片的升级指令;从FPGA芯片接收针对所述升级指令的响应;向FPGA芯片发送针对ARM芯片、DSP芯片和/或FPGA芯片的更新数据,其中,对FPGA芯片和DSP芯片的程序更新与对ARM芯片的程序更新是并行的。
在一个实施例中,如果所述第一存储单元连接FPGA芯片,则所述方法包括:通过串行数据接口向FPGA芯片发送升级指令,并使得所述FPGA芯片将所述升级指令转发到ARM芯片;通过串行数据接口从FPGA芯片接收分别来自FPGA芯片和ARM芯片的升级响应;通过串行数据接口向FPGA发送针对FPGA芯片、DSP芯片和ARM芯片中的至少一种芯片的更新数据,以及如果所述更新数据中包括针对FPGA芯片和/或DSP芯片的更新数据,则使FPGA芯片使用所接收到的针对FPGA芯片和/或DSP芯片的更新数据对第一存储单元中存储的程序进行更新,如果所述更新数据中包括针对ARM芯片的更新数据,则使FPGA芯片将针对ARM芯片的更新数据转发到ARM芯片,以便由ARM芯片使用所述针对ARM芯片的更新数据对第二存储单元中存储的程序进行更新。
在一个实施例中,如果所述第一存储单元连接DSP芯片,则所述方法包括:通过串行数据接口向FPGA芯片发送升级指令,并使得所述FPGA芯片将所述升级指令转发到DSP芯片和ARM芯片;通过串行数据接口从FPGA芯片接收分别来自DSP芯片和ARM芯片的升级响应;通过串行数据接口向FPGA发送针对FPGA芯片、DSP芯片和ARM芯片中的至少一种芯片的更新数据,以及如果所述更新数据中包括针对FPGA芯片和/或DSP芯片的更新数据,则使FPGA芯片将所述针对FPGA芯片和/或DSP芯片的更新数据转发到DSP芯片,以便由DSP芯片使用所述针对FPGA芯片和/或DSP芯片的更新数据对第一存储单元中存储的程序进行更新,如果所述更新数据中包括针对ARM芯片的更新数据,则使FPGA芯片将针对ARM芯片的更新数据转发到ARM芯片,以便由ARM芯片使用所述针对ARM芯片的更新数据对第二存储单元中存储的程序进行更新。
在一个实施例中,所述串行数据接口是RS232接口、RS422接口和RS485接口之一。
在一个实施例中,所述第一存储单元是EPCS存储单元,所述第二存储单元是FLASH(闪存)存储单元。
在一个实施例中,所述第一存储单元和所述第二存储单元都是FLASH存储单元。
在一个实施例中,所述第二存储单元是所述ARM芯片的一部分。
在一个实施例中,所述FPGA芯片包括与运算模块,所述与运算模块能够对自身的信号或来自DSP芯片的信号与来自ARM芯片的信号进行与运算,并将得到的信号发送到串行数据接口。
在一个实施例中,所述FPGA芯片与所述串行数据接口之间通过UART协议进行通信,所述FPGA芯片与所述ARM芯片之间通过UART协议进行通信,所述FPGA芯片与所述DSP接口之间通过EMIF协议进行通信。
在一个实施例中,在通过串行数据接口向FPGA发送针对FPGA芯片、DSP芯片和ARM芯片中的至少一种芯片的更新数据之前,向FPGA发送指示更新文件大小的指令。
在本发明所提出的对包括ARM、DSP、FPGA芯片的嵌入式系统进行程序更新的方法中,通过使用串行数据接口(例如,RS422接口),能够在不增加系统硬件和软件成本的前提下,方便地完成对三种芯片的程序数据的更新。
附图说明
图1示出了根据本发明的实施例的嵌入式系统的结构框图。
图2示出了根据第一情形的嵌入式系统的结构框图。
图3示出了根据第二情形的嵌入式系统的结构框图。
图4示出了第一存储单元的示例数据存储结构。
图5示出了第二存储单元的示例数据存储结构。
图6示出了根据本发明的实施例的对包括ARM芯片、DSP芯片和FPGA芯片的嵌入式系统进行程序更新的方法的流程图。
图7示意性地示出了基于图3的情形的包括与运算模块的FPGA芯片以及其与ARM芯片和DSP芯片的连接关系。
具体实施方式
下面将详细描述本发明的具体实施例,应当注意,这里描述的实施例只用于举例说明,并不用于限制本发明。在以下描述中,为了提供对本发明的透彻理解,阐述了大量特定细节。然而,对于本领域普通技术人员显而易见的是:不必采用这些特定细节来实行本发明。在其他实例中,为了避免混淆本发明,未具体描述公知的电路、材料或方法。
在整个说明书中,对“一个实施例”、“实施例”、“一个示例”或“示例”的提及意味着:结合该实施例或示例描述的特定特征、结构或特性被包含在本发明至少一个实施例中。因此,在整个说明书的各个地方出现的短语“在一个实施例中”、“在实施例中”、“一个示例”或“示例”不一定都指同一实施例或示例。此外,可以以任何适当的组合和/或子组合将特定的特征、结构或特性组合在一个或多个实施例或示例中。此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。这里使用的术语“和/或”包括一个或多个相关列出的项目的任何和所有组合。
以下参考附图对本发明进行具体描述。
图1示出了根据本发明的实施例的嵌入式系统100的结构框图。如图所示,嵌入式系统100包括ARM芯片110、DSP芯片120、FPGA芯片130和串行数据接口140。在所述嵌入式系统100中,FPGA芯片130分别与ARM芯片110和DSP芯片120相连。在一个实施例中,所述FPGA芯片与所述串行数据接口之间通过UART(通用异步收发)协议进行通信,所述FPGA芯片与所述ARM芯片之间通过UART协议进行通信,所述FPGA芯片与所述DSP接口之间通过EMIF(外部存储接口)协议进行通信。
具体地,ARM可以使用意法半导体公司的STM32FXXX系列芯片,FPGA可以使用ALTERA公司cyclone系列芯片,DSP以使用TI公司C6000系列芯片。此外,实际应用过程中,ARM的UART发送/接收可使用DMA方式。
ARM芯片110、DSP芯片120、FPGA芯片130应该分别连接到用于存储它们的程序文件的存储单元。在本发明的实施例中,考虑将ARM芯片110的程序与DSP芯片120和FPGA芯片1230的程序分别存储的情形。具体地,根据存储单元的连接不同,可以分两种示例情形进行讨论。
第一情形
图2示出了根据第一情形的嵌入式系统200的结构框图。图2中的ARM芯片210、DSP芯片220、FPGA芯片230和串行数据接口240与图1中的相应单元一致,在此不再赘述。
在图2中,FPGA芯片230连接到第一存储单元250,ARM芯片210连接到第二存储单元260。第一存储单元250存储有FPGA芯片230和DSP芯片220的程序,第二存储单元260存储有ARM芯片210的程序。
在一个实施例中,所述第一存储单元250是EPCS存储单元,所述第二存储单元260是FLASH存储单元。
在一个实施例中,所述第二存储单元260是所述ARM芯片210的一部分。
第二情形
图3示出了根据第二情形的嵌入式系统300的结构框图。图3中的ARM芯片310、DSP芯片320、FPGA芯片330和串行数据接口340与图1中的相应单元一致,在此不再赘述。
在图3中,DSP芯片320连接到第一存储单元350,ARM芯片310连接到第二存储单元360。第一存储单元350存储有FPGA芯片330和DSP芯片320的程序,第二存储单元360存储有ARM芯片310的程序。
在一个实施例中,所述第一存储单元350和第二存储单元360都是FLASH存储单元。
在一个实施例中,所述第二存储单元360是ARM芯片310的一部分。
下文中,将在“系统启动”部分以第二情形为例描述嵌入式系统的启动过程,并在“系统更新”部分针对第一情形和第二情形分别描述对嵌入式系统进行更新的方法。
在一个实施例中,串行数据接口140是RS232接口、RS422接口和RS485接口之一。在进行升级更新时,所示串行数据接口140连接上位机(或其他能够提供更新文件的接口或设备)。
系统启动
本部分描述参照图3中所示的嵌入式系统300的结构进行。
首先,图4和图5分别示出了作为FLASH存储单元的第一存储单元350和连接到ARM芯片310的(或位于ARM芯片310的内部)的第二存储单元360(同样以FLASH存储单元为例)的数据存储结构。
如图4所示,第一存储单元350的数据存储结构包括FIRST_BOOT_1K、SECOND_BOOT、FPGA_BOOT、FPGA_APP和DSP_APP五部分。如图5所示,对第二存储单元360的数据存储结构包括ARM_BOOT和ARM_APP两部分。需要指出的是,对嵌入式系统进行程序更新的方法是指FPGA_APP、DSP_APP和ARM_APP这三段用户程序数据的更新方法。FIRST_BOOT_1K、SECOND_BOOT、FPGA_BOOT和ARM_BOOT都是在单板调试的过程中,分别通过DSP和ARM的JTAG接口烧写至对应存储器的地址空间。
系统上电后,DSP通过EMIF从第一存储单元350的基地址处开始,将FIRST_BOOT_1K复制到其内部随机存取存储器(RAM)中,然后开始执行这段程序。然而,FIRST_BOOT_1K受制于其1K字节代码长度的限制,能完成的工作很少。本发明的实施例中还将SECOND_BOOT复制到DSP的内部RAM中,并加以执行。SECOND_BOOT开始运行后,首先从第一存储单元350中读取FPGA_BOOT,完成FPGA的配置。然后,查询是否有来自例如上位机的升级指令。如果有升级指令,则与上位机建立升级通信,完成FPGA_APP或者DSP_APP的数据更新,如果没有升级指令,则读取FPGA_APP数据,控制完成FPGA的配置,最后将DSP_APP复制内部RAM中,并加以执行。至此,用户FPGA程序和DSP应用程序都开始运行。
同时,系统上电后,ARM开始运行ARM_BOOT程序,ARM_BOOT等待DSP用FPGA_BOOT配置完FPGA后,同样查询是否有经由FPGA传递的上位机升级指令。如果有,则经由FPGA与上位机建立通信,完成ARM_APP的更新。如果没有则跳转至ARM_APP,开始执行ARM的应用程序。
系统更新
本部分描述对嵌入式系统进行更新的方法。并将针对图2和图3所示的结构分别进行描述。
图6示出了根据本发明的实施例的对包括ARM芯片、DSP芯片和FPGA芯片的嵌入式系统进行程序更新的方法600的流程图。
所述方法600包括通过串行数据接口执行步骤S610-S630。
在步骤S610中,通过串行数据接口向FPGA芯片发送针对ARM芯片、DSP芯片和/或FPGA芯片的升级指令。
针对图2所示的情形,所述第一存储单元250连接FPGA芯片230。此时,通过串行数据接口240向FPGA芯片230发送升级指令,并使得所述FPGA芯片230将所述升级指令转发到ARM芯片210。
针对图3所示的情形,所述第一存储单元350连接DSP芯片320。此时,通过串行数据接口340向FPGA芯片330发送升级指令,并使得所述FPGA芯片330将所述升级指令转发到DSP芯片320和ARM芯片310。
在步骤S620中,通过串行数据接口从FPGA芯片接收针对所述升级指令的响应。
针对图2中的情形,通过串行数据接口240从FPGA芯片230接收分别来自FPGA芯片230和ARM芯片210的升级响应。而针对图3中的情形,通过串行数据接口340从FPGA芯片330接收分别来自DSP芯片320和ARM芯片310的升级响应。
在步骤S630中,通过串行数据接口向FPGA芯片发送针对ARM芯片、DSP芯片和/或FPGA芯片的更新数据。
其中,对FPGA芯片和DSP芯片的程序更新与对ARM芯片的程序更新是并行的。
针对图2中的情形,通过串行数据接口240向FPGA芯片230发送针对FPGA芯片230、DSP芯片220和ARM芯片210中的至少一种芯片的更新数据。如果所述更新数据中包括针对FPGA芯片230和/或DSP芯片220的更新数据,则使FPGA芯片230使用所接收到的针对FPGA芯片230和/或DSP芯片220的更新数据对第一存储单元250中存储的程序进行更新。如果所述更新数据中包括针对ARM芯片210的更新数据,则使FPGA芯片230将针对ARM芯片210的更新数据转发到ARM芯片210,以便由ARM芯片210使用所述针对ARM芯片210的更新数据对第二存储单元260中存储的程序进行更新。
针对图3中的情形,通过串行数据接口340向FPGA芯片330发送针对FPGA芯片330、DSP芯片320和ARM芯片310中的至少一种芯片的更新数据。如果所述更新数据中包括针对FPGA芯片330和/或DSP芯片320的更新数据,则使FPGA芯片330将所述针对FPGA芯片330和/或DSP芯片320的更新数据转发到DSP芯片320,以便由DSP芯片320使用所述针对FPGA芯片330和/或DSP芯片320的更新数据对第一存储单元350中存储的程序进行更新。如果所述更新数据中包括针对ARM芯片310的更新数据,则使FPGA芯片330将针对ARM芯片310的更新数据转发到ARM芯片310,以便由ARM芯片310使用所述针对ARM芯片310的更新数据对第二存储单元360中存储的程序进行更新。
在本发明的实施例中,所述FPGA芯片还可包括与运算模块。针对图2的情形,所述与运算模块能够对自身的信号与来自ARM芯片210的信号进行与运算,并将得到的信号发送到串行数据接口240。针对图3的情形,所述与运算模块能够对来自DSP芯片320的信号与来自ARM芯片310的信号进行与运算,并将得到的信号发送到串行数据接口340。
图7示意性地示出了基于图3的情形的包括与运算模块731的FPGA芯片730以及其与ARM芯片710和DSP芯片720的连接关系。
更新发送信号Tx分为两路,一路进入FPGA芯片730的UART模块,另一路通过直连的方式进入ARM芯片710。根据UART协议层的信号规范,信号在空闲时刻为高电平。因此,接收信号Rx可以由ARM芯片710的发送信号和来自UART模块的发送信号在与运算模块731处进行与运算后驱动。通过这样的连接,可以通过一个串行数据接口同时与DSP芯片720和ARM芯片710进行通信。进行数据发送时,DSP芯片720和ARM芯片710可以同时接收,并做出相应响应。另外,DSP芯片720和ARM芯片710也可以分时反馈数据。
在一个实施例中,在步骤S630之前,还可向FPGA芯片发送指示更新文件大小的指令,以便相应的芯片擦除存储单元中的相应存储空间。
在一个实施例中,在更新完程序数据后,还可进行校验。
以上的详细描述通过使用示意图、流程图和/或示例,已经阐述了众多实施例。在这种示意图、流程图和/或示例包含一个或多个功能和/或操作的情况下,本领域技术人员应理解,这种示意图、流程图或示例中的每一功能和/或操作可以通过各种结构、硬件、软件、固件或实质上它们的任意组合来单独和/或共同实现。在一个实施例中,本发明的实施例所述主题的若干部分可以通过专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)、或其他集成格式来实现。然而,本领域技术人员应认识到,这里所公开的实施例的一些方面在整体上或部分地可以等同地实现在集成电路中,实现为在一台或多台计算机上运行的一个或多个计算机程序(例如,实现为在一台或多台计算机系统上运行的一个或多个程序),实现为在一个或多个处理器上运行的一个或多个程序(例如,实现为在一个或多个微处理器上运行的一个或多个程序),实现为固件,或者实质上实现为上述方式的任意组合,并且本领域技术人员根据本公开,将具备设计电路和/或写入软件和/或固件代码的能力。此外,本领域技术人员将认识到,本公开所述主题的机制能够作为多种形式的程序产品进行分发,并且无论实际用来执行分发的信号承载介质的具体类型如何,本公开所述主题的示例性实施例均适用。信号承载介质的示例包括但不限于:可记录型介质,如软盘、硬盘驱动器、紧致盘(CD)、数字通用盘(DVD)、数字磁带、计算机存储器等;以及传输型介质,如数字和/或模拟通信介质(例如,光纤光缆、波导、有线通信链路、无线通信链路等)。
虽然已参照几个典型实施例描述了本发明,但应当理解,所用的术语是说明和示例性、而非限制性的术语。由于本发明能够以多种形式具体实施而不脱离发明的精神或实质,所以应当理解,上述实施例不限于任何前述的细节,而应在随附权利要求所限定的精神和范围内广泛地解释,因此落入权利要求或其等效范围内的全部变化和改型都应为随附权利要求所涵盖。