充电桩的升级方法与智能充电桩与流程

专利2022-05-09  80


本申请涉及充电桩技术领域,特别是涉及一种充电桩的升级方法与智能充电桩。



背景技术:

充电桩设备在软件升级方面,如果沿用传统车载ecu通过can通信对充电桩在线升级的方法,非常不方便出厂后的充电桩产品的软件升级的维护工作。这是因为充电桩一般是固定安装在户外的,考虑到使用安全,充电桩需要有很高的防水密封要求(一般是使用ip55等级,指防护安全级别,它定义了一个界面对液态和固态微粒的防护能力),因此我们应当尽量规避拆开盖子再通过设备进行升级的这种升级方式。

随着电动汽车、4g/5g网络、大数据和蓝牙等技术的快速发展,4g/5g网络通信和蓝牙通信等无线技术也在充电桩设备中普及。目前,为了方便解决充电桩的软件升级问题,传统的充电桩升级方法,一般优先考虑通过4g/5g网络通信实现网络平台远程升级充电桩,或是通过蓝牙远程升级充电桩。这样不仅可以通过网络平台或蓝牙实现远程控制和交易数据管理,还可以实现充电桩的软件升级问题。

然而,私有充电桩很多都安装在地下车库,存在既没有4g/5g网络信号,又没有蓝牙信号的情况,抑或是信号较弱,很容易出现在升级过程中系统掉电重启,或者应用程序运行时被干扰篡改,导致应用程序破坏不可用的情况发生。



技术实现要素:

基于此,有必要针对传统充电桩的升级方法容易出现在升级过程中系统掉电重启,或者应用程序运行时被干扰篡改,导致应用程序破坏不可用的情况发生,提供一种充电桩的升级方法与智能充电桩。

本申请提供一种充电桩的升级方法,应用于一种智能充电桩中的充电桩控制器,所述充电桩的升级方法包括:

在充电桩上电后,分别获取第一应用程序和第二应用程序的激活状态,以确定当前激活的应用程序,并运行处于激活状态的应用程序;

判断是否需要对未激活的应用程序进行软件升级;

若需要对未激活的应用程序进行软件升级,则逐帧读取外部存储器中与未激活的应用程序对应的升级文件数据,写入内部存储器中的未激活的应用程序对应的内部应用区中,重启充电桩控制器,返回初始步骤;

若不需要对未激活的应用程序进行软件升级,则判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求;

若接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,则逐帧接收网络平台或客户端蓝牙通信模块发送的升级文件数据,写入外部存储器中的未激活的应用程序对应的外部应用区中,重启充电桩控制器,返回初始步骤。

本申请还提供一种智能充电桩,包括:

充电桩控制器,用于执行如前述内容提及的充电桩的升级方法;

蓝牙通信模块,与所述充电桩控制器电连接,用于与外界的设备或终端通过蓝牙通信连接;

网络通信模块,与所述充电桩控制器电连接,用于与外界的设备或终端通过4g网络或5g网络通信连接;

所述充电桩控制器包括微控制单元和外部存储器;所述微控制单元包括内部存储器,所述内部存储器设置有bootloader区、第一内部应用区、第二内部应用区、第一激活区、第二激活区和升级区;

所述外部存储器设置有数据交易区、第一外部应用区和第二外部应用区。

本申请涉及一种充电桩的升级方法与智能充电桩,通过设置两个应用程序相互冗余,实现系统启动时,当前激活的应用程序对应的内部应用区的数据的完整性校验不通过,还可以启动当前未激活的应用程序,从而使得整个充电桩升级系统最多有两个应用程序可使用,提升了系统的稳定性和安全性。此外,升级软件时,优先对当前未激活的应用程序进行软件升级,进一步提高了升级的安全性,还可以使得未激活的应用程序对应的外部应用区中存放的最旧的软件版本得到优先升级,这样升级使得充电桩控制器的整体的软件升级效率更高。

附图说明

图1为本申请一实施例提供的充电桩的升级方法的流程示意图。

图2为本申请一实施例提供的智能充电桩的结构示意图。

附图标记:

100-充电桩控制器;110-微控制单元;111-内部存储器;

111a-bootloader区;111b-第一内部应用区;111c-第二内部应用区;

111d-第一激活区;111e-第二激活区;111f-升级区;120-外部存储器;

121-数据交易区;122-第一外部应用区;123-第二外部应用区;

200-蓝牙通信模块;300-网络通信模块

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供一种充电桩的升级方法。需要说明的是,本申请提供的充电桩的升级方法应用于任何种类和型号的充电桩。

此外,本申请提供的充电桩的升级方法不限制其执行主体。可选地,本申请提供的充电桩的升级方法的执行主体,可以为一种智能充电桩。具体地,所述执行主体具体可以为,所述智能充电桩中的充电桩控制器。所述充电桩控制器包括微控制单元(mcu)和微控制单元外挂的一颗外部存储器(spifalsh)。

所述微控制单元包括内部存储器,所述内部存储器设置有bootloader区、第一内部应用区(app1)、第二内部应用区(app2)、第一激活区(activecounter1)、第二激活区(activecounter2)和升级区(updataflag);

所述外部存储器设置有数据交易区、第一外部应用区(app1seg)和第二外部应用区(app1seg)。

如图1所示,在本申请的一实施例中,所述充电桩的升级方法包括如下s100至s500:

s100,在充电桩上电后,分别获取第一应用程序和第二应用程序的激活状态,以确定当前激活的应用程序。进一步地,运行处于激活状态的应用程序。

具体地,本申请设置了两个应用程序。两个应用程序是相互冗余的关系。换言之,当前系统激活的有且仅有唯一的一个应用程序,例如,第一应用程序处于激活状态,那么第二应用程序就处于未激活状态,反之亦然。

s200,判断是否需要对未激活的应用程序进行软件升级。

具体地,充电桩控制器优先判断是否需要对未激活的应用程序进行软件升级,作用有两个,一方面可以优先对当前未激活的应用程序进行软件升级,提高升级的安全性,如果对当前激活的应用程序进行软件升级,如果当前激活的应用程序工作时出现数据错误,发生应用程序破坏现象,就会导致升级失败。

另一方面,对当前未激活的应用程序进行软件升级,可以使得未激活的应用程序对应的外部应用区中存放的最旧的软件版本得到优先升级。这样升级使得充电桩控制器的整体的软件升级效率更高。

s300,若需要对未激活的应用程序进行软件升级,则逐帧读取外部存储器中与未激活的应用程序对应的升级文件数据,写入内部存储器中的未激活的应用程序对应的内部应用区中,重启充电桩控制器,返回初始步骤,即所述s100。本申请中所有提及到“初始步骤”指的都是s100。

具体地,升级文件数据包括很多个数据帧,逐帧读取便于对每一帧进行数据正确与否的检验,发现数据帧错误可以及时中止数据传输。

写入内部存储器中的未激活的应用程序对应的内部应用区,是为了避免存放数据混淆,两个应用程序的升级文件数据应当是互相独立的。软件升级的整个流程程序是从bootloader区启动的。

s400,若不需要对未激活的应用程序进行软件升级,则判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求。

具体地,若不需要对未激活的应用程序进行软件升级,则表明外挂的spiflash(即外部存储器)的数据和内部存储器的数据已经同步,也即内部存储器的软件版本和外部存储器的软件版本是相同的,整个充电桩内部的软件版本统一,都是最新版本了,无需进行软件升级。

此时,充电桩控制器就会转而去判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,本质上是去监测外部的平台是否有新的软件版本更新。

s500,若接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,则逐帧接收网络平台或客户端蓝牙通信模块发送的升级文件数据,写入外部存储器中的未激活的应用程序对应的外部应用区中,重启充电桩控制器,返回所述s100。

具体地,若接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,则表明外部平台上有新的软件版本需要更新。客户端蓝牙通信模块是客户端中的蓝牙通信模块。客户端可以为手机、平板电脑等移动终端,也可以是pc(个人电脑)。客户端可以通过蓝牙传输的方式将升级文件数据传输给充电桩。

升级文件数据在传输时,也是逐帧传输,这个时候优先将外部平台的升级文件数据写入外部存储器,后续返回s100,再通过执行s300将外部存储器的升级文件数据写入内部存储器中,完成外部平台的软件在充电桩的全面更新。

本实施例中,通过设置两个应用程序相互冗余,实现系统启动时,当前激活的应用程序对应的内部应用区的数据的完整性校验不通过,还可以启动当前未激活的应用程序,从而使得整个充电桩升级系统最多有两个应用程序可使用,提升了系统的稳定性和安全性。此外,升级软件时,优先对当前未激活的应用程序进行软件升级,进一步提高了升级的安全性,还可以使得未激活的应用程序对应的外部应用区中存放的最旧的软件版本得到优先升级,这样升级使得充电桩控制器的整体的软件升级效率更高。

在本申请的一实施例中,所述s100包括如下s110至s150:

s110,在充电桩上电后,读取第一激活区中的激活计数器的计数值,以及读取第二激活区中的激活计数器的计数值。

s120,判断第一激活区中的激活计数器的计数值是否大于或等于第二激活区中的激活计数器的计数值。

s130,若第一激活区中的激活计数器的计数值大于或等于第二激活区中的激活计数器的计数值,则确定第一应用程序处于激活状态,第二应用程序处于未激活状态。

s140,若第一激活区中的激活计数器的计数值小于第二激活区中的激活计数器的计数值,则确定第二应用程序处于激活状态,第一应用程序处于未激活状态。

s150,运行处于激活状态的应用程序。

具体地,在充电桩上电后,系统引导程序首先从bootloader区启动,充电桩控制器自动识别哪一个应用程序处于激活状态,并识别是否需要对未激活的应用程序进行软件升级。

本实施例介绍了一种具体控制器自动识别哪一个应用程序处于激活状态的流程实施例。本实施例中,通过比较第一激活区和第二激活区的激活计数器的计数值的大小来确定哪一个应用程序处于激活状态。第一激活区、第一内部应用区和第一外部应用区都是与第一应用程序对应的。第二激活区、第二内部应用区和第二外部应用区都是与第二应用程序对应的。

充电桩控制器搭载有充电桩的ecu(电子控制单元),当充电桩控制器刚出厂时,或者充电桩控制器恢复出厂设置时,第一激活区的计数器的计数值为0,第二激活区的计数器的计数值也为0。后续在整个充电桩的升级方法步骤循环执行的过程中,第一激活区的计数器的计数值会逐渐增加,第二激活区的计数器的计数值也会逐渐增加,增加的逻辑与逻辑设置的意义后续会提及。

激活区的激活计数器的计数值更大的,代表激活区对应的应用程序正处于激活状态。例如,第一激活区的激活计数器的计数值为4,第二激活区的激活计数器的计数值为3,4大于3,那么当前激活的就是第一应用程序,因为第一激活区对应第一应用程序。

本实施例中,通过设置第一激活区和第二激活区,并分别在两个激活区各设置一个激活计数器进行计数,通过比较两个激活区计数器的计数值大小,可以确定哪一个应用程序处于激活状态,简便易行,判断速度快。

在本申请的一实施例中,所述s200包括如下s210至s240:

s210,读取升级区中的升级标志。

s220,判断所述升级标志的值是否是0xe5或0xea中的任意一个。

s230,若所述升级标志的值是0xe5或0xea中的任意一个,则确定需要对未激活的应用程序进行软件升级。

s240,若所述升级标志的值既不是0xe5,又不是0xea,则确定不需要对未激活的应用程序进行软件升级。

具体地,升级区(updataflag)中存放有升级标志。升级标志是一段标志数据,具体可以为一个字符串。如果升级标志的值为0xe5或0xea中的任意一个,则确定需要对未激活的应用程序进行软件升级。

本实施例中,若所述升级标志的值既不是0xe5,又不是0xea,则确定不需要对未激活的应用程序进行软件升级,可以运行当前激活的应用程序,执行后续s400。

在本申请的一实施例中,所述s400包括如下s410至s430:

s410,判断充电桩是否处于充电状态。

s420,若充电桩未处于充电状态,则进一步判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求。

s430,若充电桩处于充电状态,则等待充电桩充电结束后,进一步判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求。

具体地,本实施例中,若确定不需要对未激活的应用程序进行软件升级,则先判断充电桩是否处于充电状态,确定充电桩未处于充电状态,再进一步判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求。如果充电桩处于充电状态,就先控制充电桩完成充电任务后再执行判断。

这代表充电桩的充电动作的优先级大于软件升级动作的优先级。

本实施例中,通过先确定充电桩未处于充电状态,再进一步判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,使得充电桩的软件升级不会影响充电桩的充电任务,保证了充电桩的正常充电为第一优先级。

在本申请的一实施例中,在所述s410之前,所述s400还包括如下s401至s407:

s401,对处于激活状态的应用程序对应的内部应用区中存储的数据进行完整性校验,判断完整性校验是否通过。

具体地,完整性校验有多种方式。可选地,本步骤可以采用和校验的方式来进行数据的完整性校验。和校验的具体方法是,例如,处于激活状态的应用程序对应的内部应用区中存储的数据为一个20字节的字符串,那么将前16个字节相加,和字符串的最后4个字节比较,因为最后4个字节在数据结构上也可以组成一个32位的数据。如果16个字节的和,与最后4个字节组成的32位数据相同,那么完整性校验通过,如果不同,完整性校验未通过。后面的完整性校验的原理是相同的,都可以使用本步骤中运用的和校验方式。

s402,若完整性校验通过,则运行处于激活状态的应用程序,执行后续s410。

具体地,若内部应用区中的数据的完整性校验通过,则表明处于激活状态的应用程序对应的内部应用区中的数据是完整安全的,没有破坏。此时,运行处于激活状态的应用程序即可。

运行处于激活状态的应用程序具体为,选择处于激活状态的应用程序对应的内部应用区的首地址,执行跳转指令,跳转到处于激活状态的应用程序对应的内部应用区的首地址,启动处于激活状态的应用程序。此时充电桩处于工作模式,可以执行后续s410。

例如,处于激活状态的应用程序为第一应用程序,那么就通过跳转到第一内部应用区的首地址来启动第一应用程序。

s403,若完整性校验未通过,则处于激活状态的应用程序对应的外部应用区中存储的数据进行完整性校验,判断完整性校验是否通过。

具体地,若内部应用区中的数据的完整性校验未通过,则表明处于激活状态的应用程序对应的内部应用区中的数据已经发生数据丢失或数据错误的现象,数据不可信。此时,需要对内部应用区的数据进行数据恢复,数据恢复的逻辑是从外挂的外部存储器进行数据恢复。具体从处于激活状态的应用程序对应的外部应用区读取数据进行数据恢复。

但是,在恢复之前,需要对外部应用区中的数据进行完整性校验。完整性校验的方式可以与s401中的完整性校验的方式相同。

s404,若完整性校验通过,则擦除升级区中的所有数据,并向升级区写入值为0x99的升级标志,重启充电桩控制器,返回所述s100。

具体地,如果外部应用区中的数据的完整性校验通过,则表明处于激活状态的应用程序对应的内部应用区数据损坏,但是外部应用区中的数据是完整安全的,没有丢失。此时,向升级区写入值为0x99的升级标志,重启充电桩控制器,返回所述s100。等待后续的外部应用区的数据向内部应用区拷贝。

s405,若完整性校验未通过,则进一步判断当前处于未激活状态的应用程序是第一应用程序还是第二应用程序。

具体地,如果外部应用区中的数据的完整性校验也未通过,则表明处于激活状态的应用程序对应的内部应用区和外部应用区同时出现的数据损坏的现象,那么处于激活状态的应用程序是不可信的。此时,需要运行未激活的程序了。

在运行未激活的程序前,充电桩需要再次判断应用程序的激活状态,以对激活计数器的计数值进行调整。判断应用程序的激活状态其实前述s100中已经执行过了,区别是s100是确定当前激活的应用程序,本步骤是确定当前未激活的应用程序,原理是一样的。此处不再赘述。

s406,若当前处于未激活状态的应用程序是第一应用程序,则将第一激活区中的激活计数器的计数值加1,重启充电桩控制器,返回所述s100。

s407,若当前处于未激活状态的应用程序是第二应用程序,则将第二激活区中的激活计数器的计数值加1,重启充电桩控制器,返回所述s100。

具体地,既然要需要运行未激活的程序,那么需要对当前处于未激活状态的应用程序对应的激活区中的激活计数器的计数值加1,因为s110至s150的逻辑设置是计数值大的应用程序会被激活。

本实施例中,在判断充电桩是否处于充电状态之前,通过对处于激活状态的应用程序对应的内部应用区中存储的数据,以及外部应用区中存储的数据的一系列校验流程,可以实现确保处于激活状态的应用程序对应的内部应用区的数据是安全可靠的,而且在数据丢失或数据损坏时,可以从外部应用区拷贝正确的数据。此外,当前激活状态的应用程序的内部应用区和外部应用区的数据均损坏后,转而运行未激活的应用程序,放弃当前激活状态的应用程序,保障了数据安全合法和充电桩升级程序的运行稳定。

在本申请的一实施例中,在所述s240之后,所述s200还包括如下s250至s260:

s250,进一步判断所述升级标志的值是否为0x99。

具体的,承接上一个实施例,上一个实施例中的s404中,若完整性校验通过,则擦除升级区中的所有数据,并向升级区写入值为0x99的升级标志,重启充电桩控制器,返回所述s100。那么本实施例中,当执行到s240时,升级标志的值既不是0xe5,又不是0xea,此时本实施例还需要判断一下是不是0x99,也就是需要执行s250。

s260,若所述升级标志的值为0x99,则确定需要对激活的应用程序进行数据恢复。逐帧读取外部存储器中与激活的应用程序对应的升级文件数据,写入内部存储器中的激活的应用程序对应的内部应用区中。

具体的,如果是述升级标志的值为0x99,则执行对激活的应用程序进行数据恢复的步骤,具体是将外部存储器中的与激活的应用程序对应的升级文件数据,写入内部存储器中的激活的应用程序对应的内部应用区中。

外部存储器中的与激活的应用程序对应的升级文件数据是存放在与激活的应用程序对应的外部应用区的,也就是说,本步骤是外部应用区的数据向内部应用区拷贝。

本实施例中,当内部应用区中与激活的应用程序对应的升级文件数据丢失或损坏时,可以从外部应用区拷贝正确的数据至内部应用区,保障了数据的安全。

在本申请的一实施例中,所述s500包括如下s510至s557:

s510,若接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,则判断接收到的软件升级请求的来源是网络平台还是客户端蓝牙通信模块。

具体的,软件升级请求的来源不同,会执行后续不同的步骤。

s520,若接收到的软件升级请求的来源是网络平台,则设置升级源为网络平台,同时关闭蓝牙升级通道,禁止响应充电桩的充电请求,执行后续s540。

具体的,升级源为网络平台时需要关闭蓝牙升级通道,避免网络平台和蓝牙升级通道都可以升级时,两个通道同时进行升级文件数据传输,导致资源的浪费和不必要的传输冲突。同时禁止响应充电桩的充电请求则是为了防止软件升级动作和充电动作冲突。

s530,若接收到的软件升级请求的来源是客户端蓝牙通信模块,则设置升级源为客户端蓝牙通信模块,同时关闭网络升级通道,禁止响应充电桩的充电请求,执行后续s540。

具体的,可见,s520和s530无论执行哪一个步骤,最终都会执行后续s540。

s540,对升级源进行身份认证,判断身份认证是否通过。

具体的,身份认证有很多种方式,例如升级源向充电桩控制器发送充电桩的唯一设备号和充电桩的当前ip地址,充电桩控制器基于唯一设备号和当前ip地址进行校验,校验通过后,才能认定身份认证通过。本步骤的有益效果是可以防止不合法的外接网络平台或者客户端接入充电桩。

s551,若身份认证通过,则将外部存储器中的未激活的应用程序对应的外部应用区中的全部数据擦除。

具体的,身份认证通过表明升级源合法,准备将升级文件数据的传输至外部应用区,此时需要擦除掉外部应用区中的全部数据。

可选地,若身份认证通过,先读取升级区的升级标志确认升级源(网络还是蓝牙),再根据升级标志选择对应的串口通道(网络串口通道还是蓝牙串口通道),最后再将外部存储器中的未激活的应用程序对应的外部应用区中的全部数据擦除。

s552,开始接收网络平台或客户端蓝牙通信模块发送的升级文件数据,所述升级文件数据包含多个数据帧,接收升级源发送的一个数据帧。

具体的,逐帧接收有助于后续的逐帧校验。开始接收网络平台或客户端蓝牙通信模块发送的升级文件数据前,还需要计算需要传输的数据帧的总帧数。数据帧的总帧数。帧数据的长度定义为128字节,数据帧的总帧数等于整个升级文件数据的总字节数除以128。计算总帧数后,再对每一个数据帧进行编号,生成每一个数据帧对应的数据帧号,依据每一个数据帧的数据帧号进行每一个数据帧的传输。

s553,对所述数据帧进行crc8校验,判断所述数据帧的crc8校验是否通过。

具体的,接收完每一个数据帧后,对接收到的这个数据帧进行即时的校验,如果校验不通过,返回s552重新接收该数据帧。如果校验通过,返回s552继续接收下一个数据帧,直至所有的数据帧接收完毕并校验通过。

s554,若所述数据帧的crc8校验通过,则将所述数据帧写入外部存储器中与未激活的应用程序对应的外部应用区中。

具体地,如果校验通过则将该数据帧写入至外部存储器中与未激活的应用程序对应的外部应用区中,换言之,校验通过一个数据帧后写入该数据帧。

s555,返回所述s552接收升级源发送的下一个数据帧,直至升级文件数据包含的所有的数据帧均写入至外部存储器中与未激活的应用程序对应的外部应用区中。

具体地,写入完通过校验后的一个数据帧后,返回s552继续接收下一个数据帧。

s556,对位于外部存储器中与未激活的应用程序对应的外部应用区中的所有数据帧进行完整性校验,判断完整性校验是否通过。

具体地,s553中的crc8校验的目的是是防止数据帧在通讯过程中出现数据错误。而本步骤s556的完整性校验的目的是则是对所有数据帧的整体进行完整性校验。

s557,若完整性校验通过,则向升级区写入升级标志,重启充电桩控制器,返回所述s100。当升级源为网络平台时,向升级区写入值为0xe5的升级标志。当升级源为客户端蓝牙通信模块时,向升级区写入值为0xea的升级标志。

具体的,本步骤和前述实施例中的s210至s230形成呼应的逻辑链条。完整性校验方式参照前述内容提及的和校验方式,目的也是一样的。

本实施例中,实现了从外部网络平台或客户端蓝牙通信模块的升级文件数据向充电桩的外部存储器(具体是外部应用区)的传输,而且可以保证数据的完整性、传输安全性和存储安全性。

在本申请的一实施例中,在所述s540之后,所述s500还包括如下s561至s564:

s561,若身份认证未通过,则返回所述s410,同时启动通信计数器,使得通信计数器在当前计数值的基础上加1。

s562,判断通信计数器的当前计数值是否小于预设计数值。

s563,若通信计数器的当前计数值大于或等于预设计数值,则控制充电桩的网络通信模块和蓝牙通信模块处于关闭状态,持续预设时间。

s564,在所述预设时间结束后,返回所述s410。

具体的,预设计数值可以为2到5。预设时间可以为半小时到1小时。

本实施例可以实现在外部网络平台或客户端蓝牙通信模块不合法时,避免不合法的外部网络平台或客户端蓝牙通信模块的频繁的通信骚扰,超过预设计数值的尝试次数,系统自锁关闭的状态,待预设时间后重新打开。

在本申请的一实施例中,所述s540包括如下s541至s547:

s541,启动随机数生成器,控制随机数生成器随机生成一个随机数;

s542,将随机数发送至升级源。

s543,获取升级源发送的第一秘钥;所述第一秘钥由升级源对随机数进行异或加密计算生成。

s544,依据与步骤s543中相同的异或加密算法,对随机数进行异或加密计算,生成第二秘钥。

s545,比对第一秘钥和第二秘钥。判断第一秘钥和第二秘钥是否相同。

s546,若第一秘钥和第二秘钥相同,则确认身份认证通过,执行后续s551。

s547,若第一秘钥和第二秘钥不同,则确认身份认证未通过,执行后续s561。

具体的,本实施例提供了一种身份认证的验证方法,其中运用了异或加密算法生成秘钥的方式。

可选地,本实施例具体应用的异或加密算法为:

(d1)设定一个参数i,i为整数,且i的初始值为0。定义一个参数temp。将随机数生成器随机生成的随机数定义为seed,引入一个预设的关键字keyword,对seed和keyword进行一次异或运算,将异或运算得到的值赋予给temp。异或运算得到的值用计算机的二进制表示方法,可以表示为一个32位的字符。

例如,keyword可为0x00006531。

(d2)判断i是否小于字节上限值。字节上限值可以设置为32。如果i小于字节上限值,则进入d3,否则,进入d7。

(d3)判断temp与1的结果是否等于0。若不等于0,则进入d4,若等于0,进入步骤d5。

temp与1的结果取决于temp的值,如果temp的值是0,那么0与1就是0,temp与1的结果就是0,如果temp的值是1,那么1与1就是1,temp与1的结果就是1。

(d4)将temp的值进行右移处理。temp的值用计算机的二进制表示方法,可以表示为一个32位(bit)的字符。i=0代表第0位数字,比如temp的值为1010.....,那么第0位数字就是1,第1位数字为0,第2位数字为1,第3位数字为0......以此类推。在进行右移处理时,第i位数字会右移一位,在右移过程中高位用0填充。比如01xxxxxxx右移变成00xxxxxxx,10xxxxxxx右移变成01xxxxxxx。

进一步将temp的值与seed进行一次异或运算,执行d6。

(d5)将temp的值进行右移处理,将temp的值与seed进行一次异或运算,执行d6。原理同d4。

(d6)将i的数值在原有数值的基础上加1,返回d2。

(d7)将temp的最终值作为秘钥输出。

本实施例采用了异或加密算法来生成第一秘钥和第二秘钥,只有确保异或加密算法必须一致的基础上随机数还必须一致,生成的第一秘钥和第二秘钥才能一致从而通过身份认证,算法复杂,保密性好。

在本申请的一实施例中,所述s300包括如下s310至s380:

s310,若需要对未激活的应用程序进行软件升级,则将内部存储器中与未激活的应用程序对应的内部应用区中的所有数据擦除。

s320,开始读取外部存储器中与未激活的应用程序对应的外部应用区中的升级文件数据,所述升级文件数据包含多个数据帧,每次读取仅读取一个数据帧。

s330,对该所述数据帧进行crc8校验,判断所述数据帧的crc8校验是否通过。

s340,若所述数据帧的crc8校验通过,则将所述数据帧写入内部存储器中与未激活的应用程序对应的内部应用区中。

s350,返回所述s320继续读取下一个数据帧,直至升级文件数据包含的所有的数据帧均写入至内部存储器中与未激活的应用程序对应的内部应用区中。

s360,对位于内部存储器中与未激活的应用程序对应的内部应用区中的所有数据帧进行完整性校验,判断完整性校验是否通过。

s370,若完整性校验通过,则擦除与内部应用区对应的激活区内的所有数据,重启充电桩控制器,返回所述s100。

s380,若完整性校验未通过,则返回所述s310。

具体地,本实施例中的完整性校验方式可以使用参照前述内容提及的和校验方式,原理和目的也是相似的,此处不再赘述。在读取第一个数据帧前,还需要计算需要读取的数据帧的总帧数。数据帧的总帧数。帧数据的长度定义为128字节,数据帧的总帧数等于整个升级文件数据的总字节数除以128。计算总帧数后,再对每一个数据帧进行编号,生成每一个数据帧对应的数据帧号,依据每一个数据帧的数据帧号进行每一个数据帧的读取过程,避免传输时传输重复的数据帧。

本实施例主要介绍了对未激活的应用程序软件升级的过程,本质上是外部应用区中的数据拷贝至内部应用区的过程。本实施例的s310至s380和前述实施例中的s551至s557的步骤的原理是相似的,此处不再赘述。

在本申请的一实施例中,所述s260包括如下s261至s268:

s261,将内部存储器中与激活的应用程序对应的内部应用区中的所有数据擦除。

s262,开始读取外部存储器中与未激活的应用程序对应的外部应用区中的升级文件数据,所述升级文件数据包含多个数据帧,每次读取仅读取一个数据帧。

s263,对该所述数据帧进行crc8校验,判断所述数据帧的crc8校验是否通过。

s264,若所述数据帧的crc8校验通过,则将所述数据帧写入内部存储器中与未激活的应用程序对应的内部应用区中。

s265,返回所述s262继续读取下一个数据帧,直至升级文件数据包含的所有的数据帧均写入至内部存储器中与未激活的应用程序对应的内部应用区中。

s266,对位于内部存储器中与未激活的应用程序对应的内部应用区中的所有数据帧进行完整性校验,判断完整性校验是否通过。

s267,若完整性校验通过,则擦除与内部应用区对应的激活区内的所有数据,重启充电桩控制器,返回所述s100。

s268,若完整性校验未通过,则返回所述s261。

具体地,本实施例提及的s261至s268和前述实施例中的s310至s380的原理是一致的,此处不再赘述。区别是,本实施例提及的s261至s268的目的是数据恢复,前述实施例中的s310至s380的目的就是正常的内部存储器的软件升级,本质上都是外部应用区中的数据拷贝至内部应用区的过程。

在读取第一个数据帧前,还需要计算需要读取的数据帧的总帧数。数据帧的总帧数。帧数据的长度定义为128字节,数据帧的总帧数等于整个升级文件数据的总字节数除以128。计算总帧数后,再对每一个数据帧进行编号,生成每一个数据帧对应的数据帧号,依据每一个数据帧的数据帧号进行每一个数据帧的读取,避免传输时传输重复的数据帧。

在本申请的一实施例中,在所述s554中,当将所有数据帧写入外部存储器中的未激活的应用程序对应的外部应用区中时,依据未激活的应用程序对应的外部应用区的首地址、每一个数据帧的序号和数据帧的长度计算每一个数据帧的外部偏移地址。将每一个数据帧存放在外部应用区中的该数据帧对应的外部偏移地址中。

在所述s340和所述s264中,当将所有数据帧写入内部存储器中的未激活的应用程序对应的内部应用区中时,依据未激活的应用程序对应的内部应用区的首地址、每一个数据帧的序号和数据帧的长度计算每一个数据帧的内部偏移地址。将每一个数据帧存放在内部应用区中的该数据帧对应的内部偏移地址中。

具体地,本实施例介绍的是偏移地址的设置。偏移地址的设置是为了使得系统可以确定把数据放在哪个具体位置,方便数据的调取和拷贝。

外部偏移地址的计算公式可以为外部应用区的首地址 数据帧序号×数据帧的长度。内部偏移地址的计算公式可以为内部应用区的首地址 数据帧序号×数据帧的长度。

也就是说,每一个数据帧在不同的应用区,无论是内部应用区,还是外部应用区,对应的偏移地址都是不同的,体现了不同的存放位置。

而且第一应用程序和第二应用程序对应的不同应用区的偏移地址也是不同的,因为首地址是不同的。

本实施例中,通过设置不同应用区的偏移地址,可以使得数据在传输结束后会存放在准确对应的位置,不会产生错误,在后续的数据拷贝过程或是数据恢复的过程中,也不会产生错误。

本申请还提供一种智能充电桩。

如图2所示,在本申请的一实施例中,所述智能充电桩包括充电桩控制器100、蓝牙通信模块200和网络通信模块300。充电桩控制器100,用于执行如前述任意一个实施例中提及的充电桩的升级方法。所述蓝牙通信模块200与所述充电桩控制器100电连接。所述蓝牙通信模块200用于与外界的设备或终端通过蓝牙通信连接。所述网络通信模块300与所述充电桩控制器100电连接。所述网络通信模块300用于与外界的设备或终端通过4g/5g网络通信连接。

所述充电桩控制器100包括微控制单元110和外部存储器120。所述微控制单元110包括内部存储器111。所述内部存储器111设置bootloader区111a、第一内部应用区111b、第二内部应用区111c、第一激活区111d、第二激活区111e和升级区111f。所述外部存储器120设置有数据交易区121、第一外部应用区122和第二外部应用区123。

具体地,为了行文简洁,前述提及的充电桩的升级方法和本实例中提到的相同设备或者区块,统一在本实施例进行标号,前述方法部分不再进行标号。

第一激活区111d、第一内部应用区111b和第一外部应用区122都是与第一应用程序对应的。第二激活区111e、第二内部应用区111c-

和第二外部应用区123都是与第二应用程序对应的。

所述bootloader区111a的存储空间可以为54kb。所述第一内部应用区111b的存储空间可以为1mb。所述第二内部应用区111c的存储空间可以为1mb。所述第一激活区111d的存储空间可以为1kb。所述第二激活区111e的存储空间可以为1kb。所述升级区111f的存储空间可以为1kb。所述数据交易区121的存储空间可以为30mb。所述第一外部应用区122的存储空间可以为1mb。所述第二外部应用区123的存储空间可以为1mb。

本实施例中,外部存储器120也设置两个外部应用区的作用是需要和内部存储器111的两个内部应用区进行数据备份和数据交互,分两个外部应用区而不是一个外部应用区对于数据传输来讲安全性更强。在两个内部应用区中的任何一个区出现数据丢失情况时,能够从相应的外部应用区取回数据,且能够分清楚具体需要取回哪一个区的数据,不会产生混淆。

以上所述实施例的各技术特征可以进行任意的组合,各方法步骤也并不做执行顺序的限制,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。


技术特征:

1.一种充电桩的升级方法,其特征在于,应用于一种智能充电桩中的充电桩控制器,所述充电桩的升级方法包括:

在充电桩上电后,分别获取第一应用程序和第二应用程序的激活状态,以确定当前激活的应用程序,并运行处于激活状态的应用程序;

判断是否需要对未激活的应用程序进行软件升级;

若需要对未激活的应用程序进行软件升级,则逐帧读取外部存储器中与未激活的应用程序对应的升级文件数据,写入内部存储器中的未激活的应用程序对应的内部应用区中,重启充电桩控制器,返回初始步骤;

若不需要对未激活的应用程序进行软件升级,则判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求;

若接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,则逐帧接收网络平台或客户端蓝牙通信模块发送的升级文件数据,写入外部存储器中的未激活的应用程序对应的外部应用区中,重启充电桩控制器,返回初始步骤。

2.根据权利要求1所述的充电桩的升级方法,其特征在于,所述在充电桩上电后,分别获取第一应用程序和第二应用程序的激活状态,以确定当前激活的应用程序,并运行处于激活状态的应用程序,包括:

在充电桩上电后,读取第一激活区中的激活计数器的计数值,以及第二激活区中的激活计数器的计数值;

判断第一激活区中的激活计数器的计数值是否大于或等于第二激活区中的激活计数器的计数值;

若第一激活区中的激活计数器的计数值大于或等于第二激活区中的激活计数器的计数值,则确定第一应用程序处于激活状态,第二应用程序处于未激活状态;

若第一激活区中的激活计数器的计数值小于第二激活区中的激活计数器的计数值,则确定第二应用程序处于激活状态,第一应用程序处于未激活状态;

运行处于激活状态的应用程序。

3.根据权利要求2所述的充电桩的升级方法,其特征在于,所述判断是否需要对未激活的应用程序进行软件升级,包括:

读取升级区中的升级标志;

判断所述升级标志的值是否是0xe5或0xea中的任意一个;

若所述升级标志的值是0xe5或0xea中的任意一个,则确定需要对未激活的应用程序进行软件升级;

若所述升级标志的值既不是0xe5,又不是0xea,则确定不需要对未激活的应用程序进行软件升级。

4.根据权利要求3所述的充电桩的升级方法,其特征在于,所述判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,包括:

判断充电桩是否处于充电状态;

若充电桩未处于充电状态,则进一步判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求;

若充电桩处于充电状态,则等待充电桩充电结束后,进一步判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求。

5.根据权利要求4所述的充电桩的升级方法,其特征在于,在所述判断充电桩是否处于充电状态之前,所述判断是否接收到网络平台或客户端蓝牙通信模块发送的软件升级请求还包括:

对处于激活状态的应用程序对应的内部应用区中存储的数据进行完整性校验,判断完整性校验是否通过;

若完整性校验通过,则运行处于激活状态的应用程序,执行后续判断充电桩是否处于充电状态的步骤;

若完整性校验未通过,则处于激活状态的应用程序对应的外部应用区中存储的数据进行完整性校验,判断完整性校验是否通过;

若完整性校验通过,则擦除升级区中的所有数据,并向升级区写入值为0x99的升级标志,重启充电桩控制器,返回所述初始步骤;

若完整性校验未通过,则进一步判断当前处于未激活状态的应用程序是第一应用程序还是第二应用程序;

若当前处于未激活状态的应用程序是第一应用程序,则将第一激活区中的激活计数器的计数值加1,重启充电桩控制器,返回所述初始步骤;

若当前处于未激活状态的应用程序是第二应用程序,则将第二激活区中的激活计数器的计数值加1,重启充电桩控制器,返回所述初始步骤。

6.根据权利要求5所述的充电桩的升级方法,其特征在于,在确定不需要对未激活的应用程序进行软件升级之后,所述判断是否需要对未激活的应用程序进行软件升级还包括:

进一步判断所述升级标志的值是否为0x99;

若所述升级标志的值为0x99,则确定需要对激活的应用程序进行数据恢复,逐帧读取外部存储器中与激活的应用程序对应的升级文件数据,写入内部存储器中与激活的应用程序对应的内部应用区中。

7.根据权利要求6所述的充电桩的升级方法,其特征在于,所述若接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,则逐帧接收网络平台或客户端蓝牙通信模块发送的升级文件数据,写入外部存储器中的未激活的应用程序对应的外部应用区中,重启充电桩控制器,返回初始步骤,包括:

若接收到网络平台或客户端蓝牙通信模块发送的软件升级请求,则判断接收到的软件升级请求的来源是网络平台还是客户端蓝牙通信模块;

若接收到的软件升级请求的来源是网络平台,则设置升级源为网络平台,同时关闭蓝牙升级通道,禁止响应充电桩的充电请求,执行后续步骤;

若接收到的软件升级请求的来源是客户端蓝牙通信模块,则设置升级源为客户端蓝牙通信模块,同时关闭网络升级通道,禁止响应充电桩的充电请求,执行后续步骤;

在充电桩的充电请求被禁止后,对升级源进行身份认证,判断身份认证是否通过;

若身份认证通过,则将外部存储器中的未激活的应用程序对应的外部应用区中的全部数据擦除;

开始接收网络平台或客户端蓝牙通信模块发送的升级文件数据,所述升级文件数据包含多个数据帧,接收升级源发送的一个数据帧;

对所述数据帧进行crc8校验,判断所述数据帧的crc8校验是否通过;

若所述数据帧的crc8校验通过,则将所述数据帧写入外部存储器中与未激活的应用程序对应的外部应用区中;

返回所述接收升级源发送的一个数据帧的步骤,接收升级源发送的下一个数据帧,直至升级文件数据包含的所有的数据帧均写入至外部存储器中与未激活的应用程序对应的外部应用区中;

对位于外部存储器中与未激活的应用程序对应的外部应用区中的所有数据帧进行完整性校验,判断完整性校验是否通过;

若完整性校验通过,则向升级区写入升级标志,重启充电桩控制器,返回所述初始步骤;当升级源为网络平台时,向升级区写入值为0xe5的升级标志;当升级源为客户端蓝牙通信模块时,向升级区写入值为0xea的升级标志。

8.根据权利要求7所述的充电桩的升级方法,其特征在于,在对升级源进行身份认证,判断身份认证是否通过之后,还包括:

若身份认证未通过,则返回所述判断充电桩是否处于充电状态的步骤,同时启动通信计数器,使得通信计数器在当前计数值的基础上加1;

判断通信计数器的当前计数值是否小于预设计数值;

若通信计数器的当前计数值大于或等于预设计数值,则控制充电桩的网络通信模块和蓝牙通信模块处于关闭状态,持续预设时间;

在所述预设时间结束后,返回所述判断充电桩是否处于充电状态的步骤。

9.根据权利要求8所述的充电桩的升级方法,其特征在于,所述对升级源进行身份认证,判断身份认证是否通过,包括:

启动随机数生成器,控制随机数生成器随机生成一个随机数;

将随机数发送至升级源;

获取升级源发送的第一秘钥;所述第一秘钥由升级源对随机数进行异或加密计算生成;

依据与前一步骤中相同的异或加密算法,对随机数进行异或加密计算,生成第二秘钥;

比对第一秘钥和第二秘钥,判断第一秘钥和第二秘钥是否相同;

若第一秘钥和第二秘钥相同,则确认身份认证通过;

若第一秘钥和第二秘钥不同,则确认身份认证未通过。

10.根据权利要求9所述的充电桩的升级方法,其特征在于,所述若需要对未激活的应用程序进行软件升级,则逐帧读取外部存储器中与未激活的应用程序对应的升级文件数据,写入内部存储器中的未激活的应用程序对应的内部应用区中,重启充电桩控制器,返回初始步骤,包括:

若需要对未激活的应用程序进行软件升级,则将内部存储器中与未激活的应用程序对应的内部应用区中的所有数据擦除;

开始读取外部存储器中与未激活的应用程序对应的外部应用区中的升级文件数据,所述升级文件数据包含多个数据帧,每次读取仅读取一个数据帧;

对该所述数据帧进行crc8校验,判断所述数据帧的crc8校验是否通过;

若所述数据帧的crc8校验通过,则将所述数据帧写入内部存储器中与未激活的应用程序对应的内部应用区中;

返回读取外部存储器中与未激活的应用程序对应的外部应用区中的升级文件数据的步骤,继续读取下一个数据帧,直至升级文件数据包含的所有的数据帧均写入至内部存储器中与未激活的应用程序对应的内部应用区中;

对位于内部存储器中与未激活的应用程序对应的内部应用区中的所有数据帧进行完整性校验,判断完整性校验是否通过;

若完整性校验通过,则擦除与内部应用区对应的激活区内的所有数据,重启充电桩控制器,返回所述初始步骤;

若完整性校验未通过,则返回所述将内部存储器中与未激活的应用程序对应的内部应用区中的所有数据擦除的步骤,重新读取升级文件数据。

11.根据权利要求10所述的充电桩的升级方法,其特征在于,所述确定需要对激活的应用程序进行数据恢复,逐帧读取外部存储器中与激活的应用程序对应的升级文件数据,写入内部存储器中与激活的应用程序对应的内部应用区中,包括:

将内部存储器中与激活的应用程序对应的内部应用区中的所有数据擦除;

开始读取外部存储器中与未激活的应用程序对应的外部应用区中的升级文件数据,所述升级文件数据包含多个数据帧,每次读取仅读取一个数据帧;

对该所述数据帧进行crc8校验,判断所述数据帧的crc8校验是否通过;

若所述数据帧的crc8校验通过,则将所述数据帧写入内部存储器中与未激活的应用程序对应的内部应用区中;

返回读取外部存储器中与未激活的应用程序对应的外部应用区中的升级文件数据的步骤,继续读取下一个数据帧,直至升级文件数据包含的所有的数据帧均写入至内部存储器中与未激活的应用程序对应的内部应用区中;

对位于内部存储器中与未激活的应用程序对应的内部应用区中的所有数据帧进行完整性校验,判断完整性校验是否通过;

若完整性校验通过,则擦除与内部应用区对应的激活区内的所有数据,重启充电桩控制器,返回所述初始步骤;

若完整性校验未通过,则返回所述将内部存储器中与激活的应用程序对应的内部应用区中的所有数据擦除的步骤,重新读取升级文件数据。

12.根据权利要求11所述的充电桩的升级方法,其特征在于,当将所有数据帧写入外部存储器中的未激活的应用程序对应的外部应用区中时,依据未激活的应用程序对应的外部应用区的首地址、每一个数据帧的序号和数据帧的长度计算每一个数据帧的外部偏移地址,将每一个数据帧存放在外部应用区中的该数据帧对应的外部偏移地址中;

当将所有数据帧写入内部存储器中的未激活的应用程序对应的内部应用区中时,依据未激活的应用程序对应的内部应用区的首地址、每一个数据帧的序号和数据帧的长度计算每一个数据帧的内部偏移地址,将每一个数据帧存放在内部应用区中的该数据帧对应的内部偏移地址中。

13.一种智能充电桩,其特征在于,包括:

充电桩控制器,用于执行如权利要求1-12中任意一项所述的充电桩的升级方法;

蓝牙通信模块,与所述充电桩控制器电连接,用于与外界的设备或终端通过蓝牙通信连接;

网络通信模块,与所述充电桩控制器电连接,用于与外界的设备或终端通过4g网络或5g网络通信连接;

所述充电桩控制器包括微控制单元和外部存储器;所述微控制单元包括内部存储器,所述内部存储器设置有bootloader区、第一内部应用区、第二内部应用区、第一激活区、第二激活区和升级区;

所述外部存储器设置有数据交易区、第一外部应用区和第二外部应用区。

技术总结
本申请涉及一种充电桩的升级方法与智能充电桩,通过设置两个应用区程序相互冗余,实现升级系统启动时,当前激活的应用程序对应的内部应用区的数据的完整性校验不通过,还可以启动当前未激活的应用程序,从而使得整个充电桩升级系统最多有两个应用程序可使用,提升了系统的稳定性和安全性。此外,升级软件时,优先对当前未激活的应用程序进行软件升级,进一步提高了升级的安全性,还可以使得未激活的应用程序对应的外部应用区中存放的最旧的软件版本得到优先升级,这样升级使得充电桩控制器的整体的软件升级效率更高。

技术研发人员:夏亚军;刘玉达;史汝海;朱恺
受保护的技术使用者:宁波均胜新能源汽车技术有限公司
技术研发日:2021.05.27
技术公布日:2021.08.03

转载请注明原文地址:https://doc.8miu.com/read-9771.html

最新回复(0)