掌桥专利:专业的专利平台
掌桥专利
首页

基于串口的电路升级方法

文献发布时间:2023-06-19 11:16:08


基于串口的电路升级方法

技术领域

本发明涉及电路的升级技术,尤其涉及一种通过上位机对级联电路进行升级的方法。

背景技术

现有的电路中的固件进行升级,都需要将待升级的固件放到单片机中进行升级,一旦电路成型,再次升级就比较麻烦。

尤其是级联电路,也就是说,通过一个主MCU(微控制单元)提供与外部设备的接口,其余的从MCU或者其他固件均挂载在主MCU或者各个从MCU上,且从MCU还分为多级连接,就导致电路中的其他固件升级非常麻烦。

发明内容

为了解决现有技术中电路的固件升级不方便的技术问题,本发明提出一种基于串口的电路升级方法。

本发明提出的基于串口的电路升级方法,所述电路包括至少一个MCU,所述电路升级方法包括:

外部设备通过所述串口与所述MCU中的主MCU连接;

通过所述主MCU的串口发送端口信息包,告知主MCU需要升级的所述电路中的固件;

所述主MCU验证所述端口信息包正确时对外部设备进行应答,接收外部设备发送的用于升级的数据包,对其自身或由其控制的固件进行升级,或者传递给所述MCU中的从MCU,使所述从MCU对其自身或由其控制的固件进行升级。

进一步,所述外部设备通过告知所述电路中的固件的唯一识别码来告知所述主MCU需要升级的所述电路中的固件。

进一步,所述电路中的固件的唯一识别码由固件的种类号、固件连接的所有前级MCU的端口号组成。

进一步,当外部设备告知主MCU需要升级的所述电路中的固件为所述主MCU或其连接的固件时,包括如下步骤:

外部设备向所述主MCU发送数据信息包,告知主MCU所述用于升级的数据包的存放起始地址和大小;

所述主MCU验证所述数据信息包的正确时对外部设备进行应答,并根据需要升级的所述电路中的固件以及所述存放起始地址和大小对相应存储区域进行擦除;

所述外部设备向主MCU发送所述用于升级的数据包;

所述主MCU验证所述用于升级的数据包正确时对外部设备进行应答,将接收的所述用于升级的数据包写入至对应的存储区域。

进一步,当外部设备告知主MCU需要升级的所述电路中的固件为任意一级的所述从MCU或其连接的固件时,包括如下步骤:

外部设备向所述主MCU发送数据信息包,所述主MCU根据需要升级的所述电路中的固件的唯一识别码将所述数据信息包透传给对应的从MCU,告知从MCU所述用于升级的数据包的存放起始地址和大小;

所述从MCU验证所述数据信息包的正确时对外部设备进行应答,根据需要升级的所述电路中的固件的唯一识别码以及所述存放起始地址及大小擦除指定的存储区域;

所述外部设备向主MCU发送所述用于升级的数据包;

所述主MCU将所述用于升级的数据包透传给对应的从MCU;

所述从MCU验证所述用于升级的数据包正确时对外部设备进行应答,根据所述存放起始地址和大小将接收的所述用于升级的数据包写入至指定的内存区域。

进一步,当所述需要升级的所述电路中的固件为主MCU或从MCU时,所述主MCU或从MCU根据所述存放起始地址及大小擦除其指定的Flash区域,并将外部设备发送的用于升级的数据包写入至所述指定的Flash区域。

进一步,当所述需要升级的所述电路中的固件为所述主MCU的Flash(闪存)或者从MCU的Flash时,包括如下步骤:

所述主MCU或从MCU验证所述数据信息包的正确时对外部设备进行应答,通过SPI(总线的一种)对其连接的FLASH进行操作,并根据存放起始地址和大小将接收的所述用于升级的数据包写入至指定的Flash区域。

进一步,当所述需要升级的所述电路中的固件为所述主MCU的EEPROM(带电可擦可编程只读存储器)或者从MCU的EEPROM时,所述主MCU或从MCU验证所述数据信息包的正确时对外部设备进行应答,通过I2C对EEPROM进行操作,并根据所述存放起始地址和大小将接收的所述用于升级的数据包写入至指定的EEPROM区域。

进一步,当所述需要升级的所述电路中的固件为所述主MCU的CPLD或者从MCU的CPLD时,所述主MCU或从MCU验证所述数据信息包的正确时对外部设备进行应答,通过JTAG对CPLD(复杂可编程逻辑器件)进行操作,并根据所述存放起始地址和大小将接收的所述用于升级的数据包写入至指定的内存区域。

进一步,所述外部设备把所述用于升级的数据分为128字节一包发送给所述主MCU,直至所述用于升级的数据发送完成。

本发明在面对多MCU多级联升级,主MCU可以挂载多个从MCU,从MCU可以连接下一级从MCU时,通过搭建路由链路,使得电路中的各级固件均可以正常被升级,升级功能十分全面,不仅可以升级MCU的BootLoader程序和APP程序,还可以升级挂载在MCU上的EEPROM、FLASH、CPLD设备。本发明的通讯简单,占用内存资源少,上位机先发端口数据包,配置完连接端口就可以进行升级,数据缓存大小可以根据MCU的资源大小设计,若升级意外被中断,重新开始升级仍可以完成升级。

附图说明

下面结合实施例和附图对本发明进行详细说明,其中:

图1是本发明一实施例的电路连接示意图。

图2是本发明的另一实施例的电路连接端口示意图。

图3是本发明升级的流程图。

具体实施方式

为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

由此,本说明书中所指出的一个特征将用于说明本发明的一个实施方式的其中一个特征,而不是暗示本发明的每个实施方式必须具有所说明的特征。此外,应当注意的是本说明书描述了许多特征。尽管某些特征可以组合在一起以示出可能的系统设计,但是这些特征也可用于其他的未明确说明的组合。由此,除非另有说明,所说明的组合并非旨在限制。

下面结合附图以及实施例对本发明的原理进行详细说明。

本发明的电路包含一个或多个固件,如有可能只包含一个主MCU,也可能包含一个主MCU以及挂载在主MCU上的Flash、EEPROM等固件,还有可能形成级联电路,如图1所示,就是一个简单的二级电路,其中第一级包括主MCU、通过SPI与主MCU连接的FLASH、通过I2C与主MCU连接的EEPROM、通过JTAG与主MCU连接的CPLD。第二级包括通过UART串口与主MCU连接的从MCU,通过SPI与从MCU连接的FLASH、通过I2C与从MCU连接的EEPROM、通过JTAG与从MCU连接的CPLD。第二级的从MCU还可以进一步连接下一级的从MCU,每一级的MCU(包括主MCU、从MCU)所连接的从MCU都不限于一个,也可以连接多个。

当电路进行升级时,外部设备通过串口(如UART串口)与MCU中的主MCU连接,该外部设备就是上位机,具体可以是一台主机(PC),也可以是其他可作为上位机的装置。外部设备通过主MCU的串口发送端口信息包,告知主MCU需要升级的电路中的固件,主MCU验证端口信息包正确时对外部设备进行应答,接收外部设备发送的用于升级的数据包,对其自身或由其控制的固件进行升级,或者传递给对应的从MCU,使对应的从MCU对其自身或由其控制的固件进行升级。

上述端口信息包含有固件的唯一识别码,外部设备通过发送含有唯一识别码的端口信息包来告知电路中的固件的唯一识别码,以便让主MCU得知需要升级的具体是电路中的哪一个固件。在一个实施例中,电路中的固件的唯一识别码由固件的种类号、固件连接的所有前级MCU的端口号组成。如图2所示,该级联电路具有一个主MCU,连接该主MCU的CPLD,它们是该电路的第一级固件。主MCU通过端口01连接着GUI MCU(从MCU)、通过端口02连接着副MCU(从MCU),GUI MCU连接着一个Flash(GUI),它们是该电路的第二级固件。副MCU通过端口01连接着Key MCU(从MCU),Key MCU连接着一个Flash(Key)。它们是该电路的第三级固件。其中,主MCU、CPLD是同一级设备,他们的端口信息分别为A1、C0,那么主MCU的唯一识别码就是A1,CPLD的唯一识别码就是C0,它们的路由链路都是空。同时挂载的从MCU设备为GUIMCU、副MCU,它们的路由链路分别是01、02,GUI MCU下挂载的非MCU设备为FLASH(GUI),故GUI MCU和FLASH(GUI)为同一网络设备,他们的端口信息分别为A1 01、F0 01,他们的路由链路都是01,副MCU下未挂载非MCU设备,则没有设备与它在一个网络,他的端口信息是A102,路由链路是02,那么GUI MCU的唯一识别码是A1 01,FLASH(GUI) 的唯一识别码是F101,副MCU的唯一识别码是A1 02。KEY MCU下挂载了FLASH(KEY),KEY MCU和FLASH(KEY)为同一网络设备,他们的端口信息分别为A1 01 02、F0 01 02,他们的路由链路都是01 02,那么Key MCU的唯一识别码是A1 01 02,Flash(Key)的唯一识别码是F0 01 02。

外部设备发送的端口信息包就包含了待升级的固件的端口信息(也可以称之为唯一识别码),主MCU在收到端口信息包之后,要判断唯一识别码对应的固件的实际端口信息是否相符,是否成功连接,然后再应答外部设备。

如果需要升级的固件就是主MCU本身。外部设备通过UART向主MCU发送端口信息包,告知主MCU需要升级其自身,主MCU基于上述技术方案对端口信息包进行验证判断,如果收到正确的数据主MCU应答外部设备,外部设备向主MCU发送数据信息包,告知主MCU数据的存放起始地址和大小,MCU验证数据信息包正确时应答外部设备,主MCU擦除主MCU自身基于上述存储起始地址和大小所被指定的Flash区域,外部设备向主MCU发送数据包,把数据分为128字节一包发送,主MCU验证数据包的数据正确就应答外部设备,将数据写入主MCU自身指定的FLASH区域,直到外部设备向主MCU发送结束包,收到正确的数据主MCU应答外部设备。

如果需要升级的固件就是某一级的从MCU或者从MCU所挂载的非MCU固件。外部设备通过UART向主MCU发送端口信息包,告知主MCU需要升级其一级的从MCU或者从MCU所挂载的非MCU固件,主MCU基于上述技术方案对端口信息包进行验证判断,如果收到正确的数据主MCU应答外部设备,外部设备向主MCU发送数据信息包,主MCU根据需要升级的所述电路中的固件的唯一识别码将数据信息包透传给对应的从MCU,告知从MCU用于升级的数据包的存放起始地址和大小;从MCU验证数据信息包的正确时对外部设备进行应答,根据需要升级的固件的唯一识别码以及存放起始地址及大小擦除指定的存储区域,外部设备向主MCU发送所述用于升级的数据包,主MCU将用于升级的数据包透传给对应的从MCU,从MCU验证用于升级的数据包正确时对外部设备进行应答,根据存放起始地址和大小将接收的用于升级的数据包写入至指定的内存区域。

如果需要升级的固件是某个MCU挂载的非MCU固件。以升级主MCU的FLASH为例,外部设备通过UART向主MCU发送端口信息包,告知主MCU需要升级FLASH,收到正确的数据MCU应答外部设备,外部设备向主MCU发送数据信息包,告知主MCU数据的存放起始地址和大小,收到正确的数据主MCU应答外部设备 ,主MCU通过SPI对FLASH进行操作,外部设备向主MCU发送数据包,把数据分为128字节一包发送,收到正确的数据MCU应答外部设备,将数据写入指定FLASH区域,直到外部设备向主MCU发送结束包,收到正确的数据主MCU应答外部设备。如果是升级从MCU的FLASH的话,那么需要经过主MCU将外部设备发送的对应的数据透传给从MCU,由从MCU来执行上述操作。具体的,外部设备通过UART向主MCU发送端口信息包,告知主MCU需要升级其一级从MCU所挂载的FLASH,主MCU基于上述技术方案对端口信息包进行验证判断,如果收到正确的数据主MCU应答外部设备,外部设备向主MCU发送数据信息包,主MCU根据需要升级的所述电路中的固件的唯一识别码将数据信息包透传给对应的从MCU,告知从MCU用于升级的数据包的存放起始地址和大小;从MCU验证数据信息包的正确时对外部设备进行应答,根据需要升级的固件的唯一识别码以及存放起始地址及大小擦除指定的FLASH区域,外部设备向主MCU发送用于升级的数据包,主MCU将用于升级的数据包透传给对应的从MCU,从MCU验证用于升级的数据包正确时通过连接的前级MCU(可能是主MCU,也可能是主MCU和从MCU,需要依据从MCU处于第几级来具体分析)对外部设备进行应答,根据存放起始地址和大小将接收的用于升级的数据包写入至指定的FLASH区域。

以升级主MCU的EEPROM为例。外部设备通过UART向主MCU发送端口信息包,告知主MCU需要升级EEPROM,收到正确的数据主MCU应答外部设备,外部设备向主MCU发送数据信息包,告知主MCU数据的存放起始地址和大小,收到正确的数据主MCU应答外部设备 ,主MCU通过I2C对EEPROM进行操作,外部设备向主MCU发送数据包,把数据分为128字节一包发送,收到正确的数据主MCU应答外部设备,将数据写入指定EEPROM区域,直到外部设备向主MCU发送结束包,收到正确的数据主MCU应答PC。

以升级主MCU的CPLD为例。外部设备通过UART向主MCU发送端口信息包,告知主MCU需要升级CPLD,收到正确的数据主MCU应答外部设备,外部设备向主MCU发送数据信息包,告知主MCU数据的存放起始地址和大小,收到正确的数据主MCU应答外部设备 ,主MCU通过JTAG对CPLD进行操作,外部设备向主MCU发送数据包,把数据分为128字节一包发送,收到正确的数据主MCU应答外部设备,将数据写入指定内存区域,直到外部设备向主MCU发送结束包,收到正确的数据主MCU应答外部设备。

以升级某个从MCU为例。外部设备通过UART向主MCU发送端口信息包,告知主MCU需要升级从MCU,收到正确的数据主MCU应答外部设备,外部设备向主MCU发送数据信息包,主MCU通过UART把数据包透传给从MCU,告知从MCU数据的存放起始地址和大小,收到正确的数据从MCU应答外部设备,从MCU擦除其自身被指定Flash区域,外部设备向主MCU发送数据包,把数据分为128字节一包发送,主MCU通过UART把数据包透传给从MCU,收到正确的数据从MCU应答外部设备,将数据写入从MCU自身被指定的FLASH区域,直到外部设备向从MCU发送结束包,收到正确的数据从MCU应答外部设备。

如图3所示,由于升级MCU自身与升级其他非MCU固件存在不同,因此当MCU(包括主MCU和从MCU)接到外部设备的第一包数据(即端口信息包)时,需要进行判断。第一包数据包含了port路由信息(即端口信息)以及待烧录目标固件信息。这个信息决定了收到这个数据包的MCU是需要搭建路由通道还是重启自己来升级自己的APP程序。假设端口信息是A1 0102,此时上位机(外部设备)发送A1 01 02给到第一级MCU(即主MCU),这颗MCU会根据最后一字节数据(02),进行判断得知这个数据包不是给自己的,它是中间级,需要把数据往自己的02端口透传出去。同时在连接建立好之后,他会反馈一个OK识别码给到上位机。上位机收到OK识别码后,得知第一级打通了。之后他发送的端口信息会减少一位,即为A1 01,这个数据会透过第一级MCU直接发送到下一级的MCU(即副MCU)。第二级MCU(即副MCU)基于同样的原理自动判断这个数据不是给自己的,与第一级MCU做相同的动作,将数据往自己的01端口透传出去,Key MCU将收到透传的数据,副MCU建立好向01端口透传的连接后,反馈OK识别码,通多主MCU透传到上位机。最后上位机会只发送A1的端口信息,透传到第三级MCU(即KeyMCU)。此时第三级MCU知道是升级自己这一级的设备,反馈OK,此时整个路由链路建立完成。之后外部设备再基于前面所描述的技术方案发送数据信息包、用于升级的数据包给主MCU,主MCU通过上述路由链路传递给Key MCU,Key MCU进行相应的升级烧录操作。

通讯目标MCU(可能是主MCU,也可能是从MCU)在收到上位机的通讯数据之后,都会反馈相应的识别码(如上面所述的OK识别码)给上位机,通过其上级的MCU一级一级进行传递,具体的反馈的识别码为1BYTE的数据,其中低四位和高四位互为反码来提升系统的鲁棒性。所以一共有16种识别码。其中F0表示OK,E1表示头错误,D2表示数据校验错误,C3表示数据包长度错误,B4表示数据值错误,A5表示端口错误,87表示通用错误,78表示升级结束,69-0F表示升级不同类型的目标设备时各自的错误识别码。

上位机在发送路由信息时,如果100ms内未收到反馈识别码或者收到数据校验错误,则会重发该信息。升级过程中收到升级结束则退出升级,提示升级成功。收到其他错误则退出升级,进行错误提示。

中间链路在收到识别码为错误类型时,退出透传升级模式。

升级MCU包括升级MCU的APP程序以及升级MCU的Bootloader(底层),以升级主MCU为例,主MCU通过端口信息包判断是需要升级BootLoader还是升级APP,若升级APP,从APP程序跳转到BootLoader程序运行;在BootLoader中升级,先擦除存放APP代码的Flash区域,以分包的形式接收并写入指定Flash区域;完成升级运行APP,收到升级结束数据包,从BootLoader程序跳转到APP程序运行。若升级BootLoader,在APP中升级,先擦除存放BootLoader代码的Flash区域,以分包的形式接收并写入指定Flash区域,直到收到升级结束数据包,接着运行APP程序。

本发明通过串口对电路进行升级,使得本发明的支持面广,能被广泛应用,市面上主流的MCU基本都有一个或多个串口外设,方便产品的维护和功能更新,可以降低产品的维护和功能更新的成本,并且操作简单,传输稳定,升级速度快。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

相关技术
  • 多串口扩展电路、多串口升级方法以及多串口电视机板卡
  • 基于CATV的串口通讯控制电路及OTA升级系统
技术分类

06120112860104