CN105446783B - 一种皮卫星dsp程序快速加载方法 - Google Patents
一种皮卫星dsp程序快速加载方法 Download PDFInfo
- Publication number
- CN105446783B CN105446783B CN201510995332.2A CN201510995332A CN105446783B CN 105446783 B CN105446783 B CN 105446783B CN 201510995332 A CN201510995332 A CN 201510995332A CN 105446783 B CN105446783 B CN 105446783B
- Authority
- CN
- China
- Prior art keywords
- dsp
- fpga
- spi
- byte
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种皮卫星DSP程序快速高可靠三取二加载方法,DSP程序分别存储在3片SPI Flash上,运行在Sequential Read模式下的DSP通过作为中间模块的FPGA从3片SPI Flash加载DSP程序,具体包括:(1)DSP在向FPGA发送命令字与地址,请求加载DSP程序;(2)FPGA同时在3片SPI Flash的相应地址中逐字节读取数据,并将读取的每个字节进行三取二校验;(3)DSP从FPGA读取校验后的字节数据,同时FPGA进行下一字节的读取和校验。本发明DSP程序三取二加载方案,基于DSP的Sequential Read的快速加载模式,使用3片SPI Flash作为程序存储器,并通过FPGA的逻辑设计来实现。相比于基于Random Read模式的三取二加载方法,可以更快速完成DSP加载,加载时间会至少缩短50%。
Description
技术领域
本发明涉及皮卫星、空间应用电子系统,尤其涉及一种基于FPGA实现的,应用于皮卫星的快速、高可靠DSP程序三取二加载方法。
背景技术
皮卫星是指重量为公斤级的超微小卫星,它一般以微电子、微机电系统(MEMS)、多芯片封装组装等微小型化技术为基础,具有自主控制程度高、重量轻、研制周期短、机动性强、造价和发射成本低等特点。皮卫星是现代航天技术中的重要研究领域,它能以更低的成本完成卫星搭载试验等空间科学实验,已成为国际上的研究热点。
皮卫星工作环境比较复杂,轨道上高低温、辐射、单粒子事件等都会导致皮卫星出错概率增加,由于DSP软件运行在RAM中,容易收到辐射影响,发生单粒子事件,所以当星上DSP软件死机或者跑飞时,需要对DSP进行重新加载。DSP程序由于比较灵活,难以在设计早中期定型,一般存放在NAND Flash、SPI Flash、EEPROM等可重复擦写的存储器中,以便调试、更改。然而这些存储器并非专用的宇航级器件,无抗辐射指标,抵抗单粒子能力有限,一旦存储于其中的代码发生了单粒子翻转,那么可能导致整个软件无法正常加载起来,后果十分严重。故需要在设计上对其进行加固处理。
设计上一般采取冗余加固处理。采用冗余设计的思路均为将软件代码在存储器中存放多份,但是加载方案各有不同。已有的一种方法为:先设计DSP加载的二级bootloader程序,将此程序存放在反熔丝存储器中,再将任务程序以3倍冗余的形式存储在可重复擦写的存储器中。DSP上电后先加载二级bootloader程序,二级bootloader程序运行起来之后,再从外部存储器中读取任务程序,进行三取二校验,然后再更新DSP内部程序,之后任务程序就可以运行起来了。
这种方法仅靠DSP自身就可以完成三取二加载,提高了加载的可靠性,但其性能并非最优。这是因为DSP加载完成二级bootloader程序后,二级bootloader程序还要再去依次读取3份程序进行冗余校验,最后再完成加载,这一步消耗的时间就增加到了3倍,很大的延长了加载总耗时;
另一种已公开的三取二加载方法是:将软件代码存放3份在EEPROM中,利用CPLD中的逻辑设计,完成三取二加载。然而该方法适用的是Random Read模式,即每加载1字节数据,命令字(1字节)和地址(3字节)都要发送一次,加载耗时为本发明的5倍。如果在32位DSP上按32bit模式加载(即每次发一次命令字与地址,读取4个字节),加载耗时也仍然会增加1倍。
发明内容
本发明是为了克服现有DSP三取二加载技术消耗时间长、以及无多软件版本保存的问题,提供了一种快速、多备份的高可靠DSP加载管理方案。
一种皮卫星DSP程序快速高可靠三取二加载方法,DSP程序分别存储在3片SPIFlash上,运行在Sequential Read模式下的DSP通过作为中间模块的FPGA从3片SPI Flash加载DSP程序,具体包括:
(1)DSP在向FPGA发送命令字与地址,请求加载DSP程序;
(2)FPGA同时在3片SPI Flash的相应地址中逐字节读取数据,并将读取的每个字节进行三取二校验;
(3)DSP从FPGA读取校验后的字节数据,同时FPGA进行下一字节的读取和校验。
本发明DSP程序三取二加载方案,基于DSP的Sequential Read的快速加载模式,使用3片SPI Flash作为程序存储器,并通过FPGA的逻辑设计来实现。相比于基于Random Read模式的三取二加载方法,可以更快速完成DSP加载,加载时间会至少缩短50%。
作为优选,3片SPI Flash中存有不同版本的DSP程序,所述FPGA直接接收带有偏移地址的遥控指令,根据该偏移地址从3片SPI Flash中读取相应版本的DSP程序并发送至DSP。
本发明具有存储并加载多个软件版本的功能,除正常的软件版本之外,额外存储一份只包含基本功能的核心版本,当正常的卫星软件由于某些原因出故障时,可以加载核心版本,以维持卫星的基本功能,为进一步进行故障恢复提供基础。
作为优选,FPGA内带有用于保存地址偏移量的BIAS寄存器,步骤(1)中DSP所发送的地址以及所述遥控指令中的偏移地址均存放在该BIAS寄存器,每次FPGA按照BIAS寄存器中的地址偏移量从在3片SPIFlash中读取相应的数据。
步骤(1)中,FPGA通过检测来自DSP的CS信号的状态以触发加载DSP程序。
DSP上电后进入SPI串行加载模式,开始发出加载时序,CS信号被拉低;FPGA采集到CS信号下降沿后,开始进行DSP程序加载的相关步骤。
FPGA中开启两个能够相互检测状态的状态机(FSM),分别对应SPI_Master模块和SPI_Slave模块,其中SPI_Slave模块与DSP通信,SPI_Master模块与3片SPI Flash通信;FPGA中预设两个寄存器,分别为寄存器A1和寄存器A2;
步骤(2)中SPI_Master模块在预定周期内从3片SPI Flash中逐字节读取数据,当前字节数据读取完成后立即进行三取二校验,将结果存入寄存器A1中。
步骤(3)中的预定周期结束后,SPI_Slave模块将寄存器A1的值赋给寄存器A2,再把寄存器A2的值输出给DSP;完成输出后重新判断CS信号的状态以进行相应的后续步骤。
步骤(3)中在SPI_Slave模块与DSP通信的同时,SPI_Master模块进行下一字节的读取和校验。
本发明应用于皮卫星上的快速、高可靠DSP程序三取二加载方法基于DSP的Sequential Read的快速加载模式,使用3片SPI Flash作为程序存储器,并通过FPGA的逻辑设计来实现。可以更快速完成DSP加载,除正常的软件版本之外,额外存储一份只包含基本功能的核心版本,当正常的卫星软件由于某些原因出故障时,可以加载核心版本,以维持卫星的基本功能。
由于皮卫星研制周期一般较短,软件很难有充足的时间充分测试,其成熟度比一般较低。某些皮卫星会使用软件在轨更新功能来应对软件成熟度不足的问题,但此功能又会引入新的风险。本发明提供的核心版本机制可以较好的应对软件成熟度不足、以及在轨更新潜在的风险,增加了整星的可靠性。在研制周期较短的皮纳卫星的应用中,具有较大的实用价值;在其他软件成熟度不足的应用场合,也具备一定借鉴意义。
附图说明
图1是本发明DSP程序加载方法的硬件构架示意图
图2是图1中硬件构架的内部原理示意图。
图3为DSP在32bit串行加载模式下的Random Read时序,每读取一个字长(32bit)的数据都需要重复发送读命令、地址。
图4为DSP在32bit串行加载模式下的Sequential Read时序,只需要发送一次读命令、地址,就可以读出整份代码数据。
图5为FPGA内三取二加载模块的逻辑框图。
图6为SPI Slave模块内部有限状态机,主要功能为负责与DSP的通信。
图7为SPI Master模块的内部有限状态,主要功能为负责与3片SPI Flash的通信并校验。
具体实施方式
参见图1,本发明DSP程序快速三取二加载的方法所涉及的硬件包括由DSP(DSP芯片),FPGA,3片SPI Flash。
其中3片SPI Flash通过独立总线的方式与FPGA连接,参见图2,SPI Flash存储空间划分为0,1,2……n几个块,每个块存放一个版本的代码,3片存储器同地址存放同样的代码,这样就形成了3倍冗余的n个版本的代码的存储体系。
本发明DSP为TI TMS32C6000系列,根据器件技术手册,该DSP的SPI串行加载有的Random Read模式与Sequential Read模式,如附图3和图4所示。可以看出Random Read模式下每读一个字长的数据,都需要发送一次8bit读命令(CMD),一次24bit地址(ADDRESS),然后回读32bit数据;Sequential Read模式下,只需发一次8bit读命令(CMD),一次24bit地址(ADDRESS),然后可以回读所有数据,显然在相同的加载时钟频率下,Sequential Read模式加载效率会高出1倍。本发明适用的就是快速的Sequential Read模式。
生成烧写用AIS文件时,在AIS配置页面,将“Sequential Read”对勾勾上,设置SPI读模式为Sequential Read。
DSP是加载的发起端,其加载模式选择由芯片上的BOOT0,BOOT1,BOOT2,BOOT7管脚决定,要求这几个管脚处于以下状态:BOOT0下拉,BOOT1上拉,BOOT2上拉,BOOT7下拉,以选择SPI Flash串行加载模式。
DSP加载的时序由FPGA识别,读取SPI Flash的时序也由FPGA产生,如图2,FPGA的功能主要为分以下三个模块:指令接收模块,加载版本切换模块,三取二加载模块。
指令接收模块:接收测控系统发送过来的遥控指令,实现了与测控系统的接口通信。
加载版本切换模块:设有BIAS寄存器,用于保存地址偏移量,实现不同版本软件的选择。根据指令接收模块获得的加载版本信息,改变BIAS的值以切换到对应的目标地址,通过改变偏移地址的方式实现不同软件版本的加载;
参见图5,三取二加载模块包含SPI_Slave模块与SPI_Master模块。其中SPI_Slave模块负责与DSP通信,对DSP加载时钟进行计数,依据此计数值确定读取SPI Flash的时刻以及地址,并负责把校验后的数据给DSP;SPI_Master模块负责并行读取3片SPI Flash,读取的时刻与地址由SPI_Slave模块提供,并负责三取二校验读到的数据,提供给SPI_Slave模块。
SPI_Slave模块与SPI_Master模块也可视为两个能够相互检测状态的状态机(FSM),SPI_Slave模块内部有限状态机包括IDLE,RX_CMD,RX_ADDR,SET,TX_DAT五个状态,SPI_Master模块内部有限状态机包括IDLE,RX_FLASH,RELEASE,DECODE四个状态。
图6~图7描述了三取二加载模块的逻辑关系与状态转换图。其中SPI_Slave模块负责与DSP通信,对DSP加载时钟进行计数,依据此计数值确定读取SPI Flash的时刻以及地址,并负责把校验后的数据给DSP;SPI_Master模块负责并行读取3片SPI Flash,读取的时刻与地址由SPI_Slave模块提供,并负责三取二校验读到的数据,提供给SPI_Slave模块。实际应用时,在向SPI Flash烧写软件的时候,需要在三片SPI Flash相同的存储位置分别烧写一遍相同的程序,以保证三取二校验可以正常执行。
本发明具体实现步骤如下:
1.DSP上电后,扫描boot脚(boot脚在硬件上需这样配置:BOOT0下拉,BOOT1上拉,BOOT2上拉,BOOT7下拉,其余BOOT脚任意),进入SPI串行加载模式,开始发出加载时序,CS信号被拉低;
2.FPGA内所有计数器的初始值设为0。FPGA的SPI_Slave模块采集到CS信号下降沿后,从复位状态IDLE进入RX_CMD状态,同时加载时钟计数器CNT开始对时钟的个数进行计数;FPGA内的BIAS寄存器,用于保存地址偏移量,实现不同版本软件的选择。
3.当SPI_Master检测到SPI_Slave处于RX_CMD状态时,会从IDLE状态进入RX_FLASH状态,开始并行地从3片SPI Flash第BIAS+0个字节地址起,读取32bit数据,读取完成后立即进行三取二校验,将结果存入寄存器A1中。此过程需要在32个时钟周期内完成。32个时钟周期之后CNT=32,SPI_Slave进入SET状态,SPI_Master会再回到IDLE状态;
4.SPI_Slave进入SET状态后,将CNT赋值为32,将A1的值赋给A2,然后进入TX_DAT状态;
5.SPI_Slave进入TX_DAT状态后,FPGA内会同时执行两项任务:
(a)SPI_Slave根据SPI时序,把寄存器A2的值输出给DSP,最后1bit输出之后(即32个时钟周期后,CNT=64时),判断CS是否是低电平,如果是,则回到状态SET;否则回到IDLE状态,表明加载结束。
(b)SPI_Master检测到SPI_Slave已经处于TX_DAT状态,将并行地从3片SPI Flash第BIAS+4n(n=1,2…)个字节地址读取数据,在32个时钟周期内完成读取与三取二校验,将结果存入寄存器A1中,并将n值+1。在检测到SPI_Slave已经处于SET状态后,自己回到IDLE状态。此步骤中FPGA要“提前”准备好校验后的数据,即在送给DSP数据的同时,从3片SPIFlash中读取后续的数据。这样就实现了适用于Sequential Read模式的三取二加载。
重复(4)~(5)直到DSP程序加载完成。
本发明中,三取二表决是通过1bit加法进位获得。若a,b,c均为1bit数据,那么abc三取二的结果就是a+b+c的进位值。利用该逻辑关系可以很方便在FPGA内实现三取二表决。
本发明基于DSP的Sequential Read模式,通过FPGA逻辑设计实现了适用于该模式的三取二加载方案,并不会额外增加DSP的加载时间,并且有多软件版本机制。目前已有的两种三取二加载方法,与本发明的三取二加载方法,性能对比如下:
三种三取二加载方法的性能对比
相比于基于Random Read模式的三取二加载方法,本发明可以更快速完成DSP加载,加载时间会至少缩短50%。
Claims (4)
1.一种皮卫星DSP程序快速高可靠三取二加载方法,其特征在于,DSP程序分别存储在3片SPI Flash上,运行在Sequential Read模式下的DSP通过作为中间模块的FPGA从3片SPIFlash加载DSP程序,具体包括:
(1)DSP在向FPGA发送命令字与地址,请求加载DSP程序;
(2)FPGA同时在3片SPI Flash的相应地址中逐字节读取数据,并将读取的每个字节进行三取二校验;
(3)DSP从FPGA读取校验后的字节数据,同时FPGA进行下一字节的读取和校验;
FPGA中开启两个能够相互检测状态的状态机,分别对应SPI_Master模块和SPI_Slave模块,其中SPI_Slave模块与DSP通信,SPI_Master模块与3片SPI Flash通信;FPGA中预设两个寄存器,分别为寄存器A1和寄存器A2;
步骤(2)中SPI_Master模块在预定周期内从3片SPI Flash中逐字节读取数据,当前字节数据读取完成后立即进行三取二校验,将结果存入寄存器A1中;
步骤(2)中的预定周期结束后,SPI_Slave模块将寄存器A1的值赋给寄存器A2,再把寄存器A2的值输出给DSP;完成输出后重新判断CS信号的状态以进行相应的后续步骤;
步骤(3)中在SPI_Slave模块与DSP通信的同时,SPI_Master模块进行下一字节的读取和校验。
2.如权利要求1所述的皮卫星DSP程序快速高可靠三取二加载方法,其特征在于,3片SPI Flash中存有不同版本的DSP程序,所述FPGA直接接收带有偏移地址的遥控指令,根据该偏移地址从3片SPI Flash中读取相应版本的DSP程序并发送至DSP。
3.如权利要求2所述的皮卫星DSP程序快速高可靠三取二加载方法,其特征在于,FPGA内带有用于保存地址偏移量的BIAS寄存器,步骤(1)中DSP所发送的地址以及所述遥控指令中的偏移地址均存放在该BIAS寄存器,每次FPGA按照BIAS寄存器中的地址偏移量从在3片SPI Flash中读取相应的数据。
4.如权利要求3所述的皮卫星DSP程序快速高可靠三取二加载方法,其特征在于,步骤(1)中,FPGA通过检测来自DSP的CS信号的状态以触发加载DSP程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510995332.2A CN105446783B (zh) | 2015-12-25 | 2015-12-25 | 一种皮卫星dsp程序快速加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510995332.2A CN105446783B (zh) | 2015-12-25 | 2015-12-25 | 一种皮卫星dsp程序快速加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105446783A CN105446783A (zh) | 2016-03-30 |
CN105446783B true CN105446783B (zh) | 2019-01-29 |
Family
ID=55557024
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510995332.2A Active CN105446783B (zh) | 2015-12-25 | 2015-12-25 | 一种皮卫星dsp程序快速加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105446783B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649173B (zh) * | 2016-10-10 | 2019-04-09 | 上海航天控制技术研究所 | 基于1553b总线的高可靠星载计算机在轨自修正系统及方法 |
CN107562647A (zh) * | 2017-08-31 | 2018-01-09 | 王洋 | 一种对数字信号程序处理器可靠性扩展的控制方法及装置 |
CN108197063B (zh) * | 2017-12-29 | 2021-01-22 | 西安智多晶微电子有限公司 | Fpga的spi接口主动串行配置方法及装置 |
CN111176908B (zh) * | 2019-12-11 | 2023-07-14 | 北京遥测技术研究所 | 一种基于三模冗余的程序在轨加载刷新方法 |
CN111625286B (zh) * | 2020-06-04 | 2021-04-27 | 中国科学院长春光学精密机械与物理研究所 | 一种星载dsp程序外部引导加载方法及加载系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102945217A (zh) * | 2012-10-11 | 2013-02-27 | 浙江大学 | 一种基于三模冗余的星载综合电子系统 |
CN104239084A (zh) * | 2013-06-24 | 2014-12-24 | 南京南瑞继保电气有限公司 | 一种dsp程序自动加载的实现方法 |
CN104281463A (zh) * | 2013-07-12 | 2015-01-14 | 中国航天科工集团第三研究院第八三五八研究所 | 一种可选择版本的dsp处理器程序加载方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI227409B (en) * | 2003-06-05 | 2005-02-01 | Carry Computer Eng Co Ltd | Storage device capable of enhancing transmission speed |
-
2015
- 2015-12-25 CN CN201510995332.2A patent/CN105446783B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102945217A (zh) * | 2012-10-11 | 2013-02-27 | 浙江大学 | 一种基于三模冗余的星载综合电子系统 |
CN104239084A (zh) * | 2013-06-24 | 2014-12-24 | 南京南瑞继保电气有限公司 | 一种dsp程序自动加载的实现方法 |
CN104281463A (zh) * | 2013-07-12 | 2015-01-14 | 中国航天科工集团第三研究院第八三五八研究所 | 一种可选择版本的dsp处理器程序加载方法 |
Non-Patent Citations (1)
Title |
---|
高可靠皮卫星综合电子系统研究;童杰文;《中国优秀硕士学位论文全文数据库 工程科技Ⅱ辑》;20140615;第43-44页 |
Also Published As
Publication number | Publication date |
---|---|
CN105446783A (zh) | 2016-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105446783B (zh) | 一种皮卫星dsp程序快速加载方法 | |
US10831507B2 (en) | Configuration load of a reconfigurable data processor | |
US11768241B2 (en) | Test systems for executing self-testing in deployed automotive platforms | |
CN104484214B (zh) | 一种sram型fpga的配置、刷新与程序上注一体化系统 | |
CN104239090A (zh) | 一种基于fpga的卫星星务计算机在轨重构系统及方法 | |
US8060767B1 (en) | Ultra low power sleep mode | |
TWI521441B (zh) | 運用rfid之多插槽伺服器管理技術 | |
CN104035843B (zh) | 用于提高锁步核可用性的系统和方法 | |
US9726723B2 (en) | Scan chain processing in a partially functional chip | |
CN105760250A (zh) | 一种具有码流纠检错功能的单粒子加固fpga配置电路 | |
WO2018064885A1 (zh) | 一种对可编程逻辑器件进行配置或更新的装置和方法 | |
CN106201590B (zh) | 一种fpga配置文件加载方法和系统 | |
CN101828174A (zh) | 用于同步串行接口nand的数据读取的系统及方法 | |
CN105930186A (zh) | 多cpu的软件加载方法及基于多cpu的软件加载装置 | |
CN105159695B (zh) | 一种基于非易失控制的射频模块初始化系统及方法 | |
CN104969300A (zh) | 优化用于存储器修复的熔丝rom | |
CN113703803B (zh) | 基于fpga的远程升级系统、方法及介质 | |
EP2359372A1 (en) | Error detection method and a system including one or more memory devices | |
CN107301042A (zh) | 一种带自检功能的SoC应用程序引导方法 | |
CN108319465A (zh) | 对fpga配置数据进行升级的电路及方法 | |
CN114661655B (zh) | 一种星载测控数传一体机fpga程序在轨重构系统及方法 | |
US11526409B2 (en) | Parallel processing system runtime state reload | |
WO2020205882A1 (en) | Scan chain self-testing of lockstep cores on reset | |
CN109725941A (zh) | 一种用于显示驱动芯片的可编程初始化方法及系统 | |
CN112214345A (zh) | 一种基于多重加载的多fpga软件烧写故障恢复方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |