CN113867771B - 一种基于fpga的远程固件升级方法 - Google Patents

一种基于fpga的远程固件升级方法 Download PDF

Info

Publication number
CN113867771B
CN113867771B CN202111147381.2A CN202111147381A CN113867771B CN 113867771 B CN113867771 B CN 113867771B CN 202111147381 A CN202111147381 A CN 202111147381A CN 113867771 B CN113867771 B CN 113867771B
Authority
CN
China
Prior art keywords
executing
flash
data
command
judging whether
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
Application number
CN202111147381.2A
Other languages
English (en)
Other versions
CN113867771A (zh
Inventor
周天
黄杰
杜伟东
陈宝伟
胡永翔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Shengzhiyang Technology Co ltd
Harbin Engineering University
Original Assignee
Shanghai Shengzhiyang Technology Co ltd
Harbin Engineering University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Shengzhiyang Technology Co ltd, Harbin Engineering University filed Critical Shanghai Shengzhiyang Technology Co ltd
Priority to CN202111147381.2A priority Critical patent/CN113867771B/zh
Publication of CN113867771A publication Critical patent/CN113867771A/zh
Application granted granted Critical
Publication of CN113867771B publication Critical patent/CN113867771B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于FPGA的设备远程固件升级方法,PC端上位机通过网络TCP/IP协议将固件下发到设备内部FPGA芯片的Nios系统中,然后再由Nios系统转发至设备内部的Flash芯片烧写控制器,从而实现了设备的远程固件升级。本发明提供的设备远程固件升级方法,通过设备本身对外通信的网口解决了设备固件升级免拆卸的问题。且本发明的固件升级方法耗时短,成本低,能够很好的满足市场需求。

Description

一种基于FPGA的远程固件升级方法
技术领域
本发明属于FPGA嵌入式领域,更具体的说是涉及一种基于FPGA的远程固件升级方法。
背景技术
一般的FPGA开发经常使用JTAG完成在线开发调试和配置,当开发完成后会使用JTAG将配置文件烧写到非易失性存储器中,例如Flash芯片。但是这种方式存在效率低下、可靠性低的问题,当FPGA作为信号处理器被封装在产品中时,若果需要进行算法升级,使用JTAG的方式需要进行拆壳处理,这样做不仅耗时长,而且会增加损坏硬件和外壳防水结构的风险。因此,如何在不用拆除产品外壳的前提下快速实现其内部FPGA的固件升级是本领域技术人员亟须解决的问题。
发明内容
有鉴于此,本发明提供了一种基于FPGA的远程固件升级方法。能够实现在不用拆除设备外壳的前提下远程的实现内部固件的升级。
为了实现上述目的,本发明采用如下技术方案:
一种基于FPGA的远程固件升级方法,包括以下几个步骤:
步骤一:PC端上位机通过网口向水下设备内部FPGA芯片的Nios系统发送固件文件;
步骤二:Nios系统将接收到的固件临时存储到RAM中;
步骤三:Nios将RAM中的固件文件分段读出打包成特殊的形式传输到Flash控制器;
步骤四:Flash控制器接收到打包的固件文件,并确认正确性,确认正确后再烧写到Flash芯片中。
其中,步骤三具体步骤包括:
SIII1:发送Flash烧写状态机复位命令rest_str使FPGA烧写状态机就位;
SIII2:发送Flash芯片整片擦除命令erase_str,并等待接收Flash擦除完成命令;
SIII3:判断等待接收命令时间是否超时。若超时则执行步骤SIII1,若没超时则判断是否为Flash擦除完成命令。若为Flash擦除完成命令则执行下一步,若不是则执行步骤SIII1;
SIII4:根据接收到的总字节数A,及一帧要传输的字节数B,得到即将要传输的总数据帧数M=A/B;
SIII5:判断即将打包的数据帧编号i(取值从1到M)是否大于总数据帧M。若大于M,则执行步骤SIII8;否则,执行下一步;
SIII6:打包并发起第i帧数据传输;打包的数据格式为:帧头+要传输的数据字节数+帧编号+待传输数据+校验和;
帧头为1个字节,为固定值0xFA;
要传输的数据字节数,为1个字节,值为N;
帧编号,为2个字节,值为i;
待传输数据,为N个字节,第i段固件文件数据;
校验和,为1个字节,值为前面所有字节求和后取256的余数;
SIII8:发送烧写结束命令;
SIII9:等待回复,判断回复是否正确。若正确,则结束;否则,则执行步骤SIII8。
步骤四具体步骤包括:
SIV1:等待接收Flash芯片整片擦除命令;
SIV2:判断是否接收到Flash芯片整片擦除命令。若是则执行下一步,否则执行步骤SIV1;
SIV3:执行整片Flash芯片擦除命令;
SIV4:判断Flash芯片是否擦除完成;若完成,则执行下一步,否则执行SIV3;
SIV5:读取一个字节数据,并判断是否有复位信号产生。若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV6:判断是否为帧头head;若是,则执行下一步;否则执行步骤SIV15;
SIV7:紧接着读取一个字节做为当前即将传输数据帧总长度N,并判断是否有复位信号产生;若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV8:紧接着读取2个字节数据组成一个16位的无符号整数做为当前数据帧的片段在全部数据中的偏移量i,然后计算即将写入Flash存储器指定区域的首地址addr=N*I,并判断是否有复位信号产生。若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV9:紧接着读取N个字节写入到Flash控制器中,同时向Flash控制器输入存储的首地址addr,并判断是否有复位信号产生,并判断是否有复位信号产生。若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV10:紧接着读取1个字节为前面读取的所有字节的校验和,并和本地自己求的校验和比较,并判断是否有复位信号产生。若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV11:判断校验和是否一致。若一致则执行下一步;否则执行步骤SIV14;
SIV12:使能Flash控制器中的烧写使能信号,执行烧写程序;
SIV13:等待烧写完成,并回复right,表示正常接收到数据,可以接收下一帧数据。然后执行步骤SIV5;
SIV14:回复error,表示接收数据异常,请重新传输当前的数据帧;
SIV15:判断是否为烧写结束命令over。若是则执行下一步;否则执行步骤SIV5;
SIV16:回复收到烧写结束命令get_over。结束烧写过程。
本发明公开了一种基于FPGA的远程固件升级方法,利用设备自身与外部系统通信的网口,避免了拆除外壳进行固件升级的问题,具有耗时短,可靠性高的优点,能够很好的满足市场需求。
下面结合具体实施方式对本发明的技术方案做进一步说明。网口为百兆网口,FPGA的型号为5CGXFC9D6F27C7。Flash芯片类型为EPCS128。传输的单帧数据中的帧头head为0xFA,所包含的有用数据字节数N为128个字节。传输校验正确回复值right为0x55,校验出错回复值error为0x66。烧写结束命令over为0xAA。烧写结束收到回复命令get_over为0x55。Flash烧写控制器复位命令rest_str为字符串’$RESTB’、Flash芯片擦除命令erase_str为字符串‘$FPGAB’、将参数带入上述步骤中即可得到详细的固件升级流程。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明提供的Nios系统将RAM中的固件文件分段读出打包成特殊的形式传输到Flash控制器中的流程框图;
图2为本发明提供的Flash控制器接收到打包的固件文件,并确认正确性,确认正确后再烧写到Flash芯片中的流程框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种基于FPGA的远程固件升级方法,包括以下几个步骤:
步骤一:PC端上位机通过网口向设备内部FPGA芯片的Nios系统发送固件文件。
步骤二:Nios系统将接收到的固件临时存储到RAM中。
步骤三:Nios将RAM中的固件文件分段读出打包成特殊的形式传输到Flash控制器。
步骤四:Flash控制器接收到打包的固件文件,并确认正确性,确认正确后再烧写到Flash芯片中。
参见图1,是对步骤三,Nios将RAM中的固件文件分段读出打包成特殊的形式传输到Flash控制器以图形化的方式具体的描述,其具体步骤包括:
SIII1:发送Flash烧写状态机复位命令rest_str使FPGA烧写状态机就位。
SIII2:发送Flash芯片整片擦除命令erase_str,并等待接收Flash擦除完成命令。
SIII3:判断等待接收命令时间是否超时。若超时则执行步骤SIII1,若没超时则判断是否为Flash擦除完成命令。若为Flash擦除完成命令则执行下一步,若不是则执行步骤SIII1。
SIII4:根据接收到的总字节数A,及一帧要传输的字节数B,得到即将要传输的总数据帧数M=A/B。
SIII5:判断即将打包的数据帧编号i(取值从1到M)是否大于总数据帧M。若大于M,则执行步骤SIII8;否则,执行下一步。
SIII6:打包并发起第i帧数据传输,打包的数据格式为:帧头(1个字节,为固定值0xFA)+要传输的数据字节数(1个字节,值为N)+帧编号(2个字节,值为i)+待传输数据(N个字节,第i段固件文件数据)+校验和(1个字节,值为前面所有字节求和后取256的余数)。
SIII7:等待回复,收到正确回复,则i=i+1;错误回复,则i=i;或者超过1秒钟无回复,则i=i。执行步骤SIII5。
SIII8:发送烧写结束命令。
SIII9:等待回复,判断回复是否正确。若正确,则结束;否则,则执行步骤SIII8。
参见图2,是对步骤四,Flash控制器接收到打包的固件文件,并确认正确性,确认正确后再烧写到Flash芯片中以图形化的方式具体的描述,其具体步骤包括:
SIV1:等待接收Flash芯片整片擦除命令。
SIV2:判断是否接收到Flash芯片整片擦除命令。若是则执行下一步,否则执行步骤SIV1。
SIV3:执行整片Flash芯片擦除命令。
SIV4:判断Flash芯片是否擦除完成。若完成,则执行下一步,否则执行SIV3。
SIV5:读取一个字节数据,并判断是否有复位信号产生。若没有复位信号产生,则执行下一步;否则执行步骤SIV1。
SIV6:判断是否为帧头head。若是,则执行下一步;否则执行步骤SIV15。
SIV7:紧接着读取一个字节做为当前即将传输数据帧总长度N,并判断是否有复位信号产生。若没有复位信号产生,则执行下一步;否则执行步骤SIV1。
SIV8:紧接着读取2个字节数据组成一个16位的无符号整数做为当前数据帧的片段在全部数据中的偏移量i,然后计算即将写入Flash存储器指定区域的首地址addr=N*I,并判断是否有复位信号产生。若没有复位信号产生,则执行下一步;否则执行步骤SIV1。
SIV9:紧接着读取N个字节写入到Flash控制器中,同时向Flash控制器输入存储的首地址addr,并判断是否有复位信号产生,并判断是否有复位信号产生。若没有复位信号产生,则执行下一步;否则执行步骤SIV1。
SIV10:紧接着读取1个字节为前面读取的所有字节的校验和,并和本地自己求的校验和比较,并判断是否有复位信号产生。若没有复位信号产生,则执行下一步;否则执行步骤SIV1。
SIV11:判断校验和是否一致。若一致则执行下一步;否则执行步骤SIV14。
SIV12:使能Flash控制器中的烧写使能信号,执行烧写程序。
SIV13:等待烧写完成,并回复right,表示正常接收到数据,可以接收下一帧数据。然后执行步骤SIV5。
SIV14:回复error,表示接收数据异常,请重新传输当前的数据帧。
SIV15:判断是否为烧写结束命令over。若是则执行下一步;否则执行步骤SIV5。
SIV16:回复收到烧写结束命令get_over。结束烧写过程。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (2)

1.一种基于FPGA的远程固件升级方法,其特征在于,包括以下几个步骤:
步骤一:PC端上位机通过网口向设备内部FPGA芯片的Nios系统发送固件文件;
步骤二:Nios系统将接收到的固件临时存储到RAM中;
步骤三:Nios将RAM中的固件文件分段读出打包传输到Flash控制器;
步骤三具体步骤包括:
SIII1:发送Flash烧写状态机复位命令rest_str使FPGA烧写状态机就位;
SIII2:发送Flash芯片整片擦除命令erase_str,并等待接收Flash擦除完成命令;
SIII3:判断等待接收命令时间是否超时;若超时则执行步骤SIII1,若没超时则判断是否为Flash擦除完成命令;若为Flash擦除完成命令则执行下一步,若不是则执行步骤SIII1;
SIII4:根据接收到的总字节数A,及一帧要传输的字节数B,得到即将要传输的总数据帧数M=A/B;
SIII5:判断即将打包的数据帧编号i是否大于总数据帧M,i取值从1到M;若大于M,则执行步骤SIII8;否则,执行下一步;
SIII6:打包并发起第i帧数据传输;
SIII7:等待回复,收到正确回复,则i=i+1;错误回复,则i=i;或者超过1秒钟无回复,则i=i;执行步骤SIII5;
SIII8:发送烧写结束命令;
SIII9:等待回复,判断回复是否正确;若正确,则结束;否则,则执行步骤SIII8;
步骤四:Flash控制器接收到打包的固件文件,并确认正确性,确认正确后再烧写到Flash芯片中;
步骤四的具体步骤包括:
SIV1:等待接收Flash芯片整片擦除命令;
SIV2:判断是否接收到Flash芯片整片擦除命令;若是则执行下一步,否则执行步骤SIV1;
SIV3:执行整片Flash芯片擦除命令;
SIV4:判断Flash芯片是否擦除完成;若完成,则执行下一步,否则执行SIV3;
SIV5:读取一个字节数据,并判断是否有复位信号产生;若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV6:判断是否为帧头head;若是,则执行下一步;否则执行步骤SIV15;
SIV7:紧接着读取一个字节做为当前即将传输数据帧总长度 N,并判断是否有复位信号产生;若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV8:紧接着读取2个字节数据组成一个16位的无符号整数做为当前数据帧的片段在全部数据中的偏移量i,然后计算即将写入Flash存储器指定区域的首地址addr=N*I,并判断是否有复位信号产生;若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV9:紧接着读取N个字节写入到Flash控制器中,同时向Flash控制器输入存储的首地址addr,并判断是否有复位信号产生,并判断是否有复位信号产生;若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV10:紧接着读取1个字节为前面读取的所有字节的校验和,并和本地自己求的校验和比较,并判断是否有复位信号产生;若没有复位信号产生,则执行下一步;否则执行步骤SIV1;
SIV11:判断校验和是否一致;若一致则执行下一步;否则执行步骤SIV14;
SIV12:使能Flash控制器中的烧写使能信号,执行烧写程序;
SIV13:等待烧写完成,并回复right,表示正常接收到数据,可以接收下一帧数据;然后执行步骤SIV5;
SIV14:回复error,表示接收数据异常,请重新传输当前的数据帧;
SIV15:判断是否为烧写结束命令over;若是则执行下一步;否则执行步骤SIV5;
SIV16:回复收到烧写结束命令get_over;结束烧写过程。
2.根据权利要求1所述的一种基于FPGA的远程固件升级方法,其特征在于,SIII6中打包的数据格式为:帧头+要传输的数据字节数+帧编号+待传输数据+校验和;
帧头为1个字节,为固定值0xFA;
要传输的数据字节数,为1个字节,值为N;
帧编号,为2个字节,值为i;
待传输数据,为N个字节,第i段固件文件数据;
校验和,为1个字节,值为前面所有字节求和后取256的余数。
CN202111147381.2A 2021-09-29 2021-09-29 一种基于fpga的远程固件升级方法 Active CN113867771B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111147381.2A CN113867771B (zh) 2021-09-29 2021-09-29 一种基于fpga的远程固件升级方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111147381.2A CN113867771B (zh) 2021-09-29 2021-09-29 一种基于fpga的远程固件升级方法

Publications (2)

Publication Number Publication Date
CN113867771A CN113867771A (zh) 2021-12-31
CN113867771B true CN113867771B (zh) 2024-05-24

Family

ID=78992423

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111147381.2A Active CN113867771B (zh) 2021-09-29 2021-09-29 一种基于fpga的远程固件升级方法

Country Status (1)

Country Link
CN (1) CN113867771B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117742754A (zh) * 2023-12-29 2024-03-22 广东东菱电源科技有限公司 基于dali总线及调光线的灯具驱动器固件升级方案

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050071131A (ko) * 2003-12-31 2005-07-07 엘지전자 주식회사 아이피시를 통한 에프피지에이 펌웨어 업그레이드 시스템및 그 방법
CN103106095A (zh) * 2013-03-11 2013-05-15 深圳华用科技有限公司 一种工业照相机远程升级的方法及照相机
CN103136028A (zh) * 2013-03-11 2013-06-05 西北工业大学 一种基于fpga的flash存储器远程在线升级方法
CN110737452A (zh) * 2019-09-30 2020-01-31 清能德创电气技术(北京)有限公司 一种fpga固件在线升级方法及系统
CN111090447A (zh) * 2019-12-23 2020-05-01 杭州和利时自动化有限公司 一种io模块的固件更新方法及相关装置
CN111555914A (zh) * 2020-04-24 2020-08-18 深圳国人无线通信有限公司 一种fpga远程配置方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI685786B (zh) * 2018-10-25 2020-02-21 神雲科技股份有限公司 用於現場可程式邏輯閘陣列的韌體更新方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050071131A (ko) * 2003-12-31 2005-07-07 엘지전자 주식회사 아이피시를 통한 에프피지에이 펌웨어 업그레이드 시스템및 그 방법
CN103106095A (zh) * 2013-03-11 2013-05-15 深圳华用科技有限公司 一种工业照相机远程升级的方法及照相机
CN103136028A (zh) * 2013-03-11 2013-06-05 西北工业大学 一种基于fpga的flash存储器远程在线升级方法
CN110737452A (zh) * 2019-09-30 2020-01-31 清能德创电气技术(北京)有限公司 一种fpga固件在线升级方法及系统
CN111090447A (zh) * 2019-12-23 2020-05-01 杭州和利时自动化有限公司 一种io模块的固件更新方法及相关装置
CN111555914A (zh) * 2020-04-24 2020-08-18 深圳国人无线通信有限公司 一种fpga远程配置方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
基于GPRS的DSP程序远程升级的研究与实现;何宾;朱红林;计算机工程与设计;20101231;31(15);全文 *
熊杰.FPGA的远程升级研究及应用.2013,全文. *

Also Published As

Publication number Publication date
CN113867771A (zh) 2021-12-31

Similar Documents

Publication Publication Date Title
JP5423830B2 (ja) 更新データ送信方法、ファームウェア更新システム及びホスト装置
US8601464B2 (en) Memory online update system and method
CN106951289A (zh) 一种在线升级方法、dsp控制器及升级系统
CN113867771B (zh) 一种基于fpga的远程固件升级方法
CN103106095A (zh) 一种工业照相机远程升级的方法及照相机
JP5259513B2 (ja) 携帯可能電子装置、icカードおよび携帯可能電子装置の制御方法
CN102446141B (zh) 用于实现写保护控制的装置和方法
CN104077166A (zh) 基于fpga中ip核的epcs与epcq存储器在线升级方法
CN104898989A (zh) 一种大容量数据存储设备、方法及装置
CN111897560A (zh) 基于NB-IoT模块的程序升级系统、方法、设备以及存储介质
CN102629212A (zh) 一种基于j-link间接烧写程序到nandflash的方法
JP4967881B2 (ja) 更新データ送信方法、ファームウェア書き換えシステム及び更新データ送信プログラム
US20200201623A1 (en) Electronic device for updating on-board data of power off status and electronic device package assembly
CN111459468A (zh) 高可靠性串口通讯的dsp程序在线升级系统和方法
CN112181460B (zh) 程序固件升级方法、装置、电子设备及存储介质
CN115599424A (zh) 一种采用cpu远程更新fpga固件的方法
CN112181444B (zh) 一种基于1553b总线的dsp多核数据烧写方法
CN212181459U (zh) Fpga升级系统
KR20010027466A (ko) 차량의 엔진제어유닛 리프로그래밍 방법
JP4325786B2 (ja) プログラムダウンロード方法
CN111638899A (zh) 一种通过dsp串口升级fpga程序的方法
CN111007989A (zh) 一种弹载flash芯片坏块信息存储和使用方法
CN111506333B (zh) 一种双dsp程序在线升级方法及系统
CN116301959A (zh) 一种基于串口的soc远程程序更新方法及装置
CN114594752B (zh) 一种拖拉机控制单元软件刷写方法及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant