首页> 中国专利> 一种升级BMC的方法、装置、电子设备及存储介质

一种升级BMC的方法、装置、电子设备及存储介质

摘要

本发明实施例提供一种升级BMC的方法、装置、电子设备及存储介质。所述方法包括:开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。本发明实施例提供的升级BMC的方法,开启LPC到AHB的通道,从而通过AHB控制待升级BMC上的寄存器完成BMC升级操作,缩短了从CPU侧升级BMC的时间。

著录项

  • 公开/公告号CN112612500A

    专利类型发明专利

  • 公开/公告日2021-04-06

    原文格式PDF

  • 申请/专利权人 锐捷网络股份有限公司;

    申请/专利号CN202011603618.9

  • 发明设计人 林志捷;

    申请日2020-12-30

  • 分类号G06F8/654(20180101);G06F11/10(20060101);

  • 代理机构

  • 代理人

  • 地址 350002 福建省福州市仓山区金山大道618号桔园洲工业园19#楼

  • 入库时间 2023-06-19 10:29:05

说明书

技术领域

本发明实施例涉及通信技术领域,具体涉及一种升级BMC的方法、装置、电子设备及存储介质。

背景技术

BMC(Board Management Controller,基板管理控制器)是一个设备监控系统,主要通过各类基础的接口来监控设备的状态,如监控CPU的温度、电压、电源等,并在系统硬件出现异常时做相应的调节工作,以保证设备处于健康的状态。

目前,BMC的固件程序存放在主板上的flash内,从CPU侧升级BMC使用的是ASPEED提供的socflash程序,擦除flash的某块地址然后进行烧写,烧写完成后再进行回读校验,之后再擦除flash的下一块地址直至完成整个flash烧写校验,然而这种方案升级BMC的时间比较长,通常需要16~20分钟左右。且由于socflash是第三方的工具,无法对其进行优化。

发明内容

针对现有技术中的缺陷,本发明实施例提供了一种升级BMC的方法、装置、电子设备及存储介质。

第一方面,本发明实施例提供一种升级BMC的方法,包括:

开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;

向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。

如上述方法,可选地,所述待升级BMC上的寄存器包括:所述待升级BMC上FMC的寄存器;

相应地,所述向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程,包括:

向所述FMC上的寄存器发送擦除指令,通过所述寄存器控制所述待升级BMC擦除flash中的原有程序;

擦除完成之后,向所述FMC上的寄存器发送烧写指令,通过所述寄存器向所述flash中写入升级程序;

写入完成之后,向所述FMC上的寄存器发送校验指令,通过所述寄存器控制所述待升级BMC完成升级校验。

如上述方法,可选地,所述待升级BMC上的寄存器还包括:所述待升级BMC上SCU的寄存器;

相应地,所述向所述FMC上的寄存器发送擦除指令之前,还包括:

控制所述待升级BMC上SCU的寄存器,以便关闭所述待升级BMC上的CPU使能。

如上述方法,可选地,所述向所述FMC上的寄存器发送擦除指令之前,还包括:

控制所述FMC的第一寄存器,以便开启FMC写使能。

如上述方法,可选地,所述开启FMC写使能之后,还包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第一SPI写指令,并将所述第一SPI写指令发送至flash,以供所述flash开启flash写使能。

如上述方法,可选地,所述开启flash写使能之后,还包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第一SPI读指令,并将所述第一SPI读指令发送至flash;

根据flash返回的第一数值对所述flash的写使能进行校验。

如上述方法,可选地,所述向所述FMC上的寄存器发送擦除指令,通过所述寄存器控制所述待升级BMC擦除flash中的原有程序,包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成SPI擦除指令,并将所述SPI擦除指令发送至flash,以便擦除所述flash中的原有程序;

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI读指令,并将所述第二SPI读指令发送至flash;

根据flash返回的第二数值校验所述flash的寄存器的写入过程标志位和擦除成功标志位,判断擦除是否成功。

如上述方法,可选地,所述擦除完成之后,向所述FMC上的寄存器发送烧写指令之前,还包括:

控制所述FMC的第二寄存器,将所述flash的烧写模式修改为用户模式。

如上述方法,可选地,所述向所述FMC上的寄存器发送烧写指令,包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI写指令,通过所述第二SPI写指令将待升级程序写入到所述flash中;

校验所述flash的寄存器的写入过程标志位和烧写成功标志位,判断烧写是否成功。

如上述方法,可选地,所述控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI写指令,通过所述第二SPI写指令将待升级程序写入到所述flash中,包括:

修改所述FMC的第二寄存器的值,以便所述FMC根据所述第二寄存器的值确定待发送的SPI指令为写指令;

通过所述AHB的数据线向所述FMC的第二寄存器发送待升级程序;

通过所述AHB的数据线向所述FMC的第二寄存器发送待写入flash的地址,以便所述FMC根据所述待升级程序和所述地址生成第二SPI写指令,并将所述第二SPI写指令发送至所述flash。

如上述方法,可选地,所述向所述FMC上的寄存器发送校验指令,通过所述寄存器控制所述待升级BMC完成升级校验,包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第三SPI读指令,并将所述第三SPI读指令发送至flash;

判断flash返回的烧写程序与所述待升级程序是否相同,若相同,则校验成功。

如上述方法,可选地,通过所述寄存器控制所述待升级BMC完成升级过程之后,还包括:

重启所述BMC。

如上述方法,可选地,所述开启LPC到AHB的通道之后,还包括:

关闭所述BMC的看门狗程序;

相应地,所述重启所述BMC,包括:

重启所述BMC的看门狗程序以便重启所述BMC。

如上述方法,可选地,所述重启所述BMC之后,还包括:

控制所述BMC上SCU的寄存器,以便开启所述待升级BMC上的CPU使能。

如上述方法,可选地,所述重启所述BMC的看门狗程序之后,还包括:

关闭LPC到AHB的通道。

第二方面,本发明实施例提供一种升级BMC的装置,包括:

开启模块,用于开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;

发送模块,用于向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。

如上述装置,可选地,所述待升级BMC上的寄存器包括:所述待升级BMC上FMC的寄存器;

相应地,所述发送模块包括:

擦除单元,用于向所述FMC上的寄存器发送擦除指令,通过所述寄存器控制所述待升级BMC擦除flash中的原有程序;

烧写单元,用于擦除完成之后,向所述FMC上的寄存器发送烧写指令,通过所述寄存器向所述flash中写入升级程序;

校验单元,用于写入完成之后,向所述FMC上的寄存器发送校验指令,通过所述寄存器控制所述待升级BMC完成升级校验。

如上述装置,可选地,所述待升级BMC上的寄存器还包括:所述待升级BMC上SCU的寄存器;

相应地,所述装置还包括:

第一控制模块,用于向所述FMC上的寄存器发送擦除指令之前,控制所述待升级BMC上SCU的寄存器,以便关闭所述待升级BMC上的CPU使能。

如上述装置,可选地,还包括:

第二控制模块,用于向所述FMC上的寄存器发送擦除指令之前,控制所述FMC的第一寄存器,以便开启FMC写使能。

如上述装置,可选地,还包括:

第三控制模块,用于开启FMC写使能之后,控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第一SPI写指令,并将所述第一SPI写指令发送至flash,以供所述flash开启flash写使能。

如上述装置,可选地,述第三控制模块还用于:

开启flash写使能之后,控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第一SPI读指令,并将所述第一SPI读指令发送至flash;

根据flash返回的第一数值对所述flash的写使能进行校验。

如上述装置,可选地,所述擦除单元具体用于:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成SPI擦除指令,并将所述SPI擦除指令发送至flash,以便擦除所述flash中的原有程序;

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI读指令,并将所述第二SPI读指令发送至flash;

根据flash返回的第二数值校验所述flash的寄存器的写入过程标志位和擦除成功标志位,判断擦除是否成功。

如上述装置,可选地,所述第三控制模块还用于:

擦除完成之后,向所述FMC上的寄存器发送烧写指令之前,控制所述FMC的第二寄存器,将所述flash的烧写模式修改为用户模式。

如上述装置,可选地,所述烧写单元具体包括:

指令生成子单元,用于控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI写指令,通过所述第二SPI写指令将待升级程序写入到所述flash中;

校验子单元,用于校验所述flash的寄存器的写入过程标志位和烧写成功标志位,判断烧写是否成功。

如上述装置,可选地,所述指令生成子单元具体用于:

修改所述FMC的第二寄存器的值,以便所述FMC根据所述第二寄存器的值确定待发送的SPI指令为写指令;

通过所述AHB的数据线向所述FMC的第二寄存器发送待升级程序;

通过所述AHB的数据线向所述FMC的第二寄存器发送待写入flash的地址,以便所述FMC根据所述待升级程序和所述地址生成第二SPI写指令,并将所述第二SPI写指令发送至所述flash。

如上述装置,可选地,所述校验单元具体用于:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第三SPI读指令,并将所述第三SPI读指令发送至flash;

判断flash返回的烧写程序与所述待升级程序是否相同,若相同,则校验成功。

如上述装置,可选地,还包括:

重启模块,用于通过所述寄存器控制所述待升级BMC完成升级过程之后,重启所述BMC。

如上述装置,可选地,还包括:

关闭模块,用于开启LPC到AHB的通道之后,关闭所述BMC的看门狗程序;

相应地,所述重启模块具体用于:

重启所述BMC的看门狗程序以便重启所述BMC。

如上述装置,可选地,还包括:

开启模块,用于重启所述BMC之后,控制所述BMC上SCU的寄存器,以便开启所述待升级BMC上的CPU使能。

如上述装置,可选地,所述关闭模块还用于:

重启所述BMC的看门狗程序之后,关闭LPC到AHB的通道。

第三方面,本发明实施例提供一种电子设备,包括:

存储器和处理器,所述处理器和所述存储器通过总线完成相互间的通信;所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如下方法:开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。

第四方面,本发明实施例提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如下方法:开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。

本发明实施例提供的升级BMC的方法,开启LPC到AHB的通道,从而通过AHB控制待升级BMC上的寄存器完成BMC升级操作,缩短了从CPU侧升级BMC的时间。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的升级BMC的方法流程示意图;

图2为本发明又一实施例提供的升级BMC的方法流程示意图;

图3为本发明实施例提供的升级BMC的装置的结构示意图;

图4为本发明实施例提供的电子设备的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例提供的升级BMC的方法流程示意图,如图1所示,该方法包括:

步骤S11、开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;

步骤S12、向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。

具体地,在电子设备中,BMC用于监控CPU参数,同时也可以使用CPU来升级BMC,为了缩短从CPU侧升级BMC的时间,本发明实施例提供了一种升级BMC的方法,应用于CPU侧,CPU可以为X86 D15XX系列,操作系统可以为开放网络操作系统(Software for OpenNetworking in the Cloud,SONIC)系统,SONIC是基于Linux的开源网络操作系统,并且能够适配来自不同产家的交换设备,并提供丰富的网络功能。

要从CPU侧升级BMC,首先要开启LPC(Low pin count Bus,低引脚数总线)控制高级高性能总线(Advanced High performance Bus,AHB)进而就可以操作BMC端所有的寄存器了。AHB总线协议是AMBA(Advanced Microcontroller Bus Architecture,先进的微控制器总线架构)协议的一部分,一个AHB总线系统包含:AHB主机,AHB从机,仲裁器和解码器。AHB的主机能够向从机发起读写操作,而从机会将操作的结果(成功或失败)返回给主机。AHB的仲裁器保证了每次只有一个主机可以发起命令请求来防止冲突。解码器能够根据传来的地址进行解码,然后生成对应的从机片选信号,AHB总线连接了CPU与BMC下的从设备,因此控制了AHB就能从CPU端读写BMC端各个从设备的寄存器了,即BMC的寄存器为AHB从机。

具体地,从CPU侧开启LPC到AHB的通道主要通过CPU端的LPC将SuperIO的30寄存器的bit[0]置为1开启的,LPC是CPU侧的,SuperIO是BMC端的,通过LPC接口以及BMC的SuperIO功能中的logical device0D:iLPC2AHB(LPC转AHB桥)可实现对BMC内部所有寄存器的读/写操作。

之后CPU可以通过AHB向待升级BMC上的寄存器发送升级指令,具体地,可以参照BMC各个寄存器参数表,通过AHB去修改相应寄存器的值,实现相应的功能,从而通过寄存器控制待升级BMC完成升级过程。

本发明实施例提供的升级BMC的方法,开启LPC到AHB的通道,从而通过AHB控制待升级BMC上的寄存器完成BMC升级操作,缩短了从CPU侧升级BMC的时间。

在上述实施例的基础上,进一步地,所述待升级BMC上的寄存器包括:所述待升级BMC上FMC的寄存器;

相应地,所述向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程,包括:

向所述FMC上的寄存器发送擦除指令,通过所述寄存器控制所述待升级BMC擦除flash中的原有程序;

擦除完成之后,向所述FMC上的寄存器发送烧写指令,通过所述寄存器向所述flash中写入升级程序;

写入完成之后,向所述FMC上的寄存器发送校验指令,通过所述寄存器控制所述待升级BMC完成升级校验。

具体地,FMC(Firmware SPI Memory Controller)是BMC固件的SPI(SerialPeripheral Interface串行外设接口)控制器,是AHB总线下的一个从机,所以FMC的地址线和数据线就是AHB的地址线和数据线,FMC主要用于控制BMC的闪存flash,开启LPC到AHB通道之后,FMC作为AHB的从机,可以通过向AHB总线发送指令,控制FMC的寄存器,从而控制FMC实现相应的功能。在本发明实施例中,通过AHB向FMC上的寄存器发送擦除指令,通过寄存器控制待升级BMC擦除flash中的原有程序,其中flash是预先设置的专门用于存储BMC升级程序的flash,或者由用户设置的。擦除完成之后,向FMC上的寄存器发送烧写指令,通过寄存器向所述flash中写入升级程序;写入完成之后,向所述FMC上的寄存器发送校验指令,通过所述寄存器控制所述待升级BMC完成升级校验。不同于现有技术socflash的块擦除,烧写,校验的模式,本发明实施例在BMC的flash烧写完成之后再进行校验操作,将升级程序写入flash之后,再对flash的内容和升级程序对比进行校验,从而缩短了BMC升级时间。

在上述各实施例的基础上,进一步地,所述待升级BMC上的寄存器还包括:所述待升级BMC上SCU的寄存器;

相应地,所述向所述FMC上的寄存器发送擦除指令之前,还包括:

控制所述待升级BMC上SCU的寄存器,以便关闭所述待升级BMC上的CPU使能。

具体地,为了防止BMC端去操作flash造成数据错乱,需要屏蔽掉BMC端CPU的所有操作,因此在升级之前,还需要控制待升级BMC上系统控制单元(System Control Unit,SCU)的寄存器,以便关闭待升级BMC上的CPU使能,SCU是BMC上的控制器,也是AHB的从机,AHB下的从机都是一个数据与地址线,每个从机的地址是不一样的,通过AHB内置的解码器来实现片选的功能,此处不再赘述。SCU主要用于控制BMC系统,具体地,将SCU的0x70寄存器的bit[0]置1来关闭待升级BMC上的CPU使能。

在上述各实施例的基础上,进一步地,所述向所述FMC上的寄存器发送擦除指令之前,还包括:

控制所述FMC的第一寄存器,以便开启FMC写使能。

具体地,在向FMC上的寄存器发送擦除指令之前,还需要开启FMC对flash的写使能,从而能够通过FMC向flash发送指令。开启FMC的写使能时,首先需要使能FMC的写地址过滤控制来解锁FMC写使能的保护,具体地,将FMC的0xA4寄存器置为0x2aa,然后使能FMC对flash写使能,具体地,将FMC的0x00寄存器的bit[18:16]置为0x7开启FMC对flash的写使能,实际升级过程中不需要开启写地址的过滤,开启写地址过滤只是为了打开FMC的写使能,写使能必须在写地址过滤开启的情况下才能进行操作,因此开启写使能之后,还需要关闭FMC的写使能保护,即将FMC的0xA4寄存器置为0。

在实际应用中,在开启FMC写使能之后,还要清除地址保护和非法命令的标志位,具体地,将FMC08寄存器的bit10,bit9写为0清除地址保护和非法命令的标志位。此外,还需要将数据模式改为四个字节,具体地,将FMC0C寄存器的值置为0配置FMC的SPI为4bytes模式,将FMC的0x1E620004寄存器中写入0x00000007配置Flash的SPI为4bytes模式。这样,就可以通过FMC向flash发送指令,从而操作flash。

在上述各实施例的基础上,进一步地,所述开启FMC写使能之后,还包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第一SPI写指令,并将所述第一SPI写指令发送至flash,以供所述flash开启flash写使能。

具体地,开启FMC使能之后,还需要通过FMC开启flash的写使能,这样才能操作flash进行擦除或烧写,具体地,FMC通过向flash发送SPI指令控制flash,SPI指令格式为:指令CMD、地址ADDRESS和数据DATA,即|CMD|ADDRESS|DATA|,CMD是具体的指令,ADDRESS是写操作flash的地址,DATA是写入的数据,当FMC控制flash开启写使能时,不需要写入具体的数据,因此此时,可使用数据模式,只需要配置CMD,开启flash写使能的时候就将ADDRESS与DATA关闭,只发送CMD命令。具体地,首先,通过AHB将FMC0C寄存器写入FF关闭SPI的DATA线与ADDRESS线,之后通过AHB将FMC10寄存器的bit[1:0]置为02,使FMC指令为写模式,其中,置为01为读模式,置为11用户模式,后续升级过程将会使用。flash的写使能通过对flash写入0xD8进行块擦除,写入0x60进行整片擦除,不同厂商的命令可能会有不同,可根据实际情况适应调整。因此,当需要开启flash写使能时,需要通过AHB向FMC10寄存器的bit[23:16]写入指令0xD8或0x60,之后FMC寄存器生成一条SPI写指令,记为第一SPI写指令,并将第一SPI写指令发送至flash,flash收到第一SPI写指令之后,根据指令中的CMD开启flash写使能。最后,通过AHB将FMC0C寄存器写入00开启SPI的DATA线与ADDRESS线。需要说明的是,在普通读写模式下,发送读/写命令之前需要关闭SPI的DATA线与ADDRESS线,发送命令之后,需要开启SPI的DATA线与ADDRESS线,后续不再赘述。

在上述各实施例的基础上,进一步地,所述开启flash写使能之后,还包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第一SPI读指令,并将所述第一SPI读指令发送至flash;

根据flash返回的第一数值对所述flash的写使能进行校验。

具体地,开启flash写使能之后,还需要校验写使能是否成功开启,首先通过AHB将FMC10寄存器的bit[1:0]置为01,使FMC指令为读模式,需要通过AHB向FMC10寄存器的bit[23:16]写入指令0x05,之后FMC寄存器生成一条SPI读指令,记为第一SPI读指令,并将第一SPI读指令发送至flash,flash收到第一SPI读指令之后,根据指令中的CMD可以读取到写使能校验位WEL的值,CPU从AHB的DATA线上读取到flash返回的数据,查看返回数据的bit1数值,若该值为1,则表明已经成功开启flash写使能。

在上述各实施例的基础上,进一步地,所述向所述FMC上的寄存器发送擦除指令,通过所述寄存器控制所述待升级BMC擦除flash中的原有程序,包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成SPI擦除指令,并将所述SPI擦除指令发送至flash,以便擦除所述flash中的原有程序;

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI读指令,并将所述第二SPI读指令发送至flash;

根据flash返回的第二数值校验所述flash的寄存器的写入过程标志位和擦除成功标志位,判断擦除是否成功。

具体地,校验flash已经成功开启写使能之后,就可以对flash进行擦除操作,擦除flash中的原有程序。首先,通过AHB将FMC10寄存器的bit[1:0]置为02,使FMC指令为写模式,需要通过AHB向FMC10寄存器的bit[23:16]写入指令0xd8,之后FMC寄存器生成一条SPI写指令,记为SPI擦除指令,并将SPI擦除指令发送至flash,flash收到SPI擦除指令,擦除原有程序。

之后还要校验flash的擦除操作是否成功。首先,通过AHB将FMC10寄存器的bit[1:0]置为01,使FMC指令为读模式,需要通过AHB向FMC10寄存器的bit[23:16]写入指令0x05,之后FMC寄存器生成一条SPI读指令,记为第二SPI读指令并发送至flash,flash收到第二SPI读指令之后,根据指令中的CMD可以读取到写入过程标志位(Write In Process,WIP)的值,CPU从AHB的DATA线上读取到flash返回的数据,查看返回数据的bit0数值,若该值为0,则表明当前没有在执行任务,即已经结束擦除操作。

之后,通过AHB将FMC10寄存器的bit[1:0]置为01,使FMC指令为读模式,需要通过AHB向FMC10寄存器的bit[23:16]写入指令0x2b,之后FMC寄存器生成一条SPI读指令,记为第三SPI读指令并发送至flash,flash收到第三SPI读指令之后,根据指令中的CMD可以读取到擦除成功标志位E_Fail的值,CPU从AHB的DATA线上读取到flash返回的数据,查看返回数据的bit6数值,若该值为1,则表明擦除失败,若为0,则表明擦除成功。

在上述各实施例的基础上,进一步地,所述擦除完成之后,向所述FMC上的寄存器发送烧写指令之前,还包括:

控制所述FMC的第二寄存器,将所述flash的烧写模式修改为用户模式。

具体地,擦除成功之后就要对flash进行烧写,由于SuperIO最多支持4字节的数据,如果选用普通的写入模式会导致烧写数据异常的慢。因为普通的烧写模式一次只能写入4个字节的数据且每次写入后都需要对标志位进行校验,这样就会导致对I/O端口的操作量增加且使用的烧写命令增加,最后就会造成烧写的速度非常慢。因此需要将烧写模式修改为用户模式,用户模式每次烧写的时候可以按最大的数据量(256字节)来进行烧写操作,从而减少对I/O端口的操作和命令的使用来提高烧写的速度。需要注意的是,不同于普通的写入和读取,用户模式下FMC的地址线仅用于片选的生成,SPI指令全部需要通过数据线来进行写入。具体地,通过AHB将FMC的10寄存器的bit[1:0]置为03,即可将flash的烧写模式修改为用户模式,修改为用户模式之后,擦除约1m20s~2m,烧写约3m30s,校验约3m10s,升级BMC大概需要7~8分钟左右,与现有技术相比能够极大地缩短从CPU端升级BMC的时间。

在上述各实施例的基础上,进一步地,所述向所述FMC上的寄存器发送烧写指令,包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI写指令,通过所述第二SPI写指令将待升级程序写入到所述flash中;

校验所述flash的寄存器的写入过程标志位和烧写成功标志位,判断烧写是否成功。

所述控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI写指令,通过所述第二SPI写指令将待升级程序写入到所述flash中,包括:

修改所述FMC的第二寄存器的值,以便所述FMC根据所述第二寄存器的值确定待发送的SPI指令为写指令;

通过所述AHB的数据线向所述FMC的第二寄存器发送待升级程序;

通过所述AHB的数据线向所述FMC的第二寄存器发送待写入flash的地址,以便所述FMC根据所述待升级程序和所述地址生成第二SPI写指令,并将所述第二SPI写指令发送至所述flash。

具体地,用户模式下,需要拼凑整条SPI命令,需要将CMD ADDRESS DATA按顺序写入AHB的DATA线,每条命令不一样,地址与数据也不一样,根据发送的命令进行配置,例如烧写的时候CMD就是烧写的命令码,ADDRESS就是要写入的flash的地址,DATA就是要写入flash的数据。

首先通过AHB将FMC10寄存器的bit[1:0]置为02,向FMC10寄存器的bit[23:16]写入烧写指令0x02,依次通过AHB的数据线向FMC发送待升级程序和待写入flash的地址,然后FMC生成包含|CMD|ADDRESS|DATA|的第二SPI写指令,将第二SPI写指令发送至flash,flash进行程序文件烧写。

之后,对flash的寄存器的写入过程标志位和烧写成功标志位,判断烧写是否成功。具体地,通过AHB将FMC10寄存器的bit[1:0]置为01,使FMC指令为读模式,需要通过AHB向FMC10寄存器的bit[23:16]写入指令0x05,之后FMC寄存器生成一条SPI读指令,并发送至flash,flash收到SPI读指令之后,根据指令中的CMD可以读取到写入过程标志位(Write InProcess,WIP)的值,CPU从AHB的DATA线上读取到flash返回的数据,查看返回数据的bit0数值,若该值为0,表明已经结束烧写操作。

之后,通过AHB将FMC10寄存器的bit[1:0]置为01,使FMC指令为读模式,通过AHB向FMC10寄存器的bit[23:16]写入指令0x2b,之后FMC寄存器生成一条SPI读指令,并发送至flash,flash收到SPI读指令之后,根据指令中的CMD可以读取到烧写成功标志位P_Fail的值,CPU从AHB的DATA线上读取到flash返回的数据,查看返回数据的bit5数值,若该值为1,则表明烧写失败,若为0,则表明烧写成功。

在上述各实施例的基础上,进一步地,所述向所述FMC上的寄存器发送校验指令,通过所述寄存器控制所述待升级BMC完成升级校验,包括:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第三SPI读指令,并将所述第三SPI读指令发送至flash;

判断flash返回的烧写程序与所述待升级程序是否相同,若相同,则校验成功。

具体地,在烧写成功之后,还需要对烧写程序进行校验,首先,通过AHB将FMC10寄存器的bit[1:0]置为02,然后通过AHB向FMC10的bit[23:16]写入读取指令0x02,读取烧写的程序,之后FMC根据寄存器值生成SPI指令,发送给flash,flash根据SPI指令返回读取的烧写程序,CPU根据读取值判断已经烧写的程序和下发的程序是否一致,若一致,则表示烧写正确,校验成功。

在上述各实施例的基础上,进一步地,通过所述寄存器控制所述待升级BMC完成升级过程之后,还包括:

重启所述BMC。

具体地,在开启LPC到AHB的通道之后,还需要通过BMC的看门狗控制器关闭BMC的看门狗程序。具体地,将AHB下的看门狗控制器的WDT2C寄存器的bit0置0关闭看门狗。当烧写校验成功之后,重置看门狗的计数器,通过AHB向WDT24寄存器写入计数器默认值,如写入0x014FB180,之后将WDT2C寄存器的bit0置1开启看门狗,在WDT28寄存器写入0x4755重新开启计数器,之后等待狗超时会自动重启BMC。

在上述各实施例的基础上,进一步地,所述重启所述BMC之后,还包括:

控制所述BMC上SCU的寄存器,以便开启所述待升级BMC上的CPU使能。

具体地,重启BMC之后,将SCU的0x70寄存器的bit[0]置0开启BMC上的CPU使能。

在上述各实施例的基础上,进一步地,所述重启所述BMC的看门狗程序之后,还包括:

关闭LPC到AHB的通道。

具体地,开启所述待升级BMC上的CPU使能,通过SuperIO关闭LPC到AHB的通道,此时就完成了BMC的升级过程。

本发明实施例提供的升级BMC的方法,开启LPC到AHB的通道,通过AHB控制待升级BMC上的SCU寄存器关闭BMC上的CPU使能,通过AHB控制FMC寄存器操作flash完成擦除、烧写和校验过程,一次性烧写完成之后再校验,且采用用户模式进行烧写,节省了烧写校验时间,提高了升级BMC的效率。

图2为本发明又一实施例提供的升级BMC的方法流程示意图,如图2所示,该方法包括:

步骤S201、升级BMC开始,通过SuperIO开启LPC到AHB的通道;将AHB下的看门狗控制器的WDT2C寄存器的bit0置0关闭BMC看门狗。

步骤S202、通过AHB将SCU的0x70寄存器的bit[0]置1实现控制关闭BMC端CPU使能,防止指令冲突;

步骤S203、通过AHB将FMC的0xA4寄存器置为0x2aa使能FMC的写地址过滤控制解锁写使能保护;

步骤S204、通过AHB将FMC的0x00寄存器的bit[18:16]置为0x7开启FMC对挂载的flash的写使能;

步骤S205、通过AHB将FMC的0xA4寄存器置为0x000关闭地址过滤写使能;

步骤S206、通过AHB将FMC08寄存器的bit10,bit9写为0清除地址保护和非法命令的标志位;

步骤S207、通过AHB将FMC0C寄存器的值置为0实现配置FMC的SPI为4bytes模式,将0x1E620004写0x00000007实现配置Flash的SPI为4bytes模式;

步骤S208、通过AHB操作FMC寄存器开启flash写使能,包括:

A1、向FMC的0C寄存器写FF,关闭SPI的DATA线与ADDRESS线;A2、将FMC10寄存器的bit[1:0]置为02,使SPI指令为写模式;A3、向FMC10的bit[23:16]写入指令,A4、FMC生成SPI写指令,发送至flash;A5、向FMC的0C寄存器写00,开启SPI的DATA线与ADDRESS线;

步骤S209、校验flash写使能,包括:

B1、向FMC的0C寄存器写FF,关闭SPI的DATA线与ADDRESS线;B2、通过AHB将FMC10寄存器的bit[1:0]置为01,使SPI指令为读指令;B3、通过AHB向FMC10的bit[23:16]写入读取指令0x05,读取flash写使能校验位WEL;B4、FMC生成SPI写指令,发送至flash;B5、向FMC的0C寄存器写00,开启SPI的DATA线与ADDRESS线;

步骤S210、从AHB的数据线获取flash返回的数值bit1,判断WEL是否为1,若为1表示正确开启写使能,直接进入步骤S211,若为0,则表示未正确开启flash写使能,跳转至步骤S208;

步骤S211、通过FMC对flash进行擦除,包括:

C1、向FMC的0C寄存器写FF,关闭SPI的DATA线与ADDRESS线;C2、通过AHB将FMC10寄存器的bit[1:0]置为02;C3、通过AHB向FMC10的bit[23:16]写入擦除指令0xd8;C4、FMC根据寄存器值生成SPI写指令,发送给flash;C5、向FMC的0C寄存器写00,开启SPI的DATA线与ADDRESS线;C6、flash根据SPI指令进行擦除;

步骤S212、等待擦除结束,包括:

D1、向FMC的0C寄存器写FF,关闭SPI的DATA线与ADDRESS线;D2、通过AHB将FMC10寄存器的bit[1:0]置为01;D3、AHB向FMC10的bit[23:16]写入读取指令0x05读取WIP值;D4、FMC根据寄存器值生成SPI指令,发送给flash;D5、向FMC的0C寄存器写00,开启SPI的DATA线与ADDRESS线;

步骤S213、获取flash返回的数值的bit0值,判断WIP是否为0,若为0,则表示当前没有执行任务,即擦除已完成,若为1,则继续步骤S212;

步骤S214、查看擦除成功标志位,具体包括:

E1、向FMC的0C寄存器写FF,关闭SPI的DATA线与ADDRESS线;E2、通过AHB将FMC10寄存器的bit[1:0]置为01;E3、通过AHB向FMC10的bit[23:16]写入读取指令0x2b读取E_Fail值;E4、FMC根据寄存器值生成SPI指令,发送给flash;E5、向FMC的0C寄存器写00,开启SPI的DATA线与ADDRESS线;

步骤S215、获取flash返回的数值的bit6数值,判断E_Fail是否为1,若为1,表示擦除失败,则跳转至步骤S211;若为0,则继续;

步骤S216、确定擦除成功;

步骤S217、判断是否还需要继续擦除,若是则跳转至步骤S208,否则继续;

步骤S218、发送烧写指令,包括:

F1、通过AHB将FMC的10寄存器的bit[1:0]置为0x3,将flash烧写模式修改为用户模式;F2、通过AHB将FMC10寄存器的bit[1:0]置为02,F3、向FMC10寄存器的bit[23:16]写入烧写指令0x02;F4、依次通过AHB的数据线向FMC发送待升级程序和待写入flash的地址;F5、FMC生成包含|CMD|ADDRESS|DATA|的第二SPI写指令;F6、FMC将第二SPI写指令发送至flash;F7、flash进行程序文件烧写;

步骤S219、等待烧写完成,包括:

G1、向FMC的0C寄存器写FF,关闭SPI的DATA线与ADDRESS线;G2、通过AHB将FMC10寄存器的bit[1:0]置为01,使SPI指令为读模式;G3、通过AHB向FMC10寄存器的bit[23:16]写入指令0x05;G4、FMC寄存器生成一条SPI读指令,并发送至flash;G5、向FMC的0C寄存器写00,开启SPI的DATA线与ADDRESS线;G6、flash收到SPI读指令之后,根据指令中的CMD可以读取到WIP的值;

步骤S220、通过AHB数据线读取到WIP值,判断烧写是否结束,若WIP为1,则继续步骤S219;

步骤S221、查看烧写成功标志位,包括:

H1、向FMC的0C寄存器写FF,关闭SPI的DATA线与ADDRESS线;H2、通过AHB将FMC10寄存器的bit[1:0]置为01,使FMC指令为读模式;H3、通过AHB向FMC10寄存器的bit[23:16]写入指令0x2b,H4、FMC寄存器生成一条SPI读指令,并发送至flash,H5、向FMC的0C寄存器写00,开启SPI的DATA线与ADDRESS线;H6、flash收到SPI读指令之后,根据指令中的CMD可以读取到烧写成功标志位P_Fail的值。

步骤S222、CPU从AHB的DATA线上读取到flash返回的数据,查看返回数据的bit5数值,若该值为1,则表明烧写失败,跳转至步骤S208,若为0,则表明烧写成功;

步骤S223、确认烧写成功;

步骤S224、判断是否需要继续烧写,若是,则跳转至步骤S208,否则继续;

步骤S225、校验flash,包括:

I1、向FMC的0C寄存器写FF,关闭SPI的DATA线与ADDRESS线;I2、通过AHB将FMC10寄存器的bit[1:0]置为02;I3、通过AHB向FMC10的bit[23:16]写入读取指令0x02读取烧写的程序;I4、FMC根据寄存器值生成SPI指令,发送给flash;I5、向FMC的0C寄存器写00,开启SPI的DATA线与ADDRESS线;I6、flash根据SPI指令返回读取的烧写程序;I7、CPU跟读取值判断已经烧写的程序和下发的程序是否一致,若一致,则表示烧写正确,校验成功;

步骤S226、当烧写校验成功之后,重置看门狗的计数器,通过AHB向WDT24寄存器写入计数器默认值,如写入0x014FB180,之后将WDT2C寄存器的bit0置1开启看门狗,在WDT28寄存器写入0x4755重新开启计数器,之后等待狗超时会自动重启BMC;

步骤S227、将SCU的0x70寄存器的bit[0]置0开启BMC上的CPU使能;

步骤S228、通过SuperIO关闭LPC到AHB的通道,完成BMC的升级过程。

本发明实施例提供的升级BMC的方法,开启LPC到AHB的通道,通过AHB控制待升级BMC上的SCU寄存器关闭BMC上的CPU使能,通过AHB控制FMC寄存器操作flash完成擦除、烧写和校验过程,一次性烧写完成之后再校验,且采用用户模式进行烧写,节省了烧写校验时间,提高了升级BMC的效率。

基于同样的发明构思,本发明实施例还提供一种升级BMC的装置,如图3所示,包括:开启模块31和发送模块32,其中:

开启模块31用于开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;发送模块32用于向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。

如上述装置,可选地,所述待升级BMC上的寄存器包括:所述待升级BMC上FMC的寄存器;

相应地,所述发送模块32包括:

擦除单元,用于向所述FMC上的寄存器发送擦除指令,通过所述寄存器控制所述待升级BMC擦除flash中的原有程序;

烧写单元,用于擦除完成之后,向所述FMC上的寄存器发送烧写指令,通过所述寄存器向所述flash中写入升级程序;

校验单元,用于写入完成之后,向所述FMC上的寄存器发送校验指令,通过所述寄存器控制所述待升级BMC完成升级校验。

如上述装置,可选地,所述待升级BMC上的寄存器还包括:所述待升级BMC上SCU的寄存器;

相应地,所述装置还包括:

第一控制模块,用于向所述FMC上的寄存器发送擦除指令之前,控制所述待升级BMC上SCU的寄存器,以便关闭所述待升级BMC上的CPU使能。

如上述装置,可选地,还包括:

第二控制模块,用于向所述FMC上的寄存器发送擦除指令之前,控制所述FMC的第一寄存器,以便开启FMC写使能。

如上述装置,可选地,还包括:

第三控制模块,用于开启FMC写使能之后,控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第一SPI写指令,并将所述第一SPI写指令发送至flash,以供所述flash开启flash写使能。

如上述装置,可选地,述第三控制模块还用于:

开启flash写使能之后,控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第一SPI读指令,并将所述第一SPI读指令发送至flash;

根据flash返回的第一数值对所述flash的写使能进行校验。

如上述装置,可选地,所述擦除单元具体用于:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成SPI擦除指令,并将所述SPI擦除指令发送至flash,以便擦除所述flash中的原有程序;

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI读指令,并将所述第二SPI读指令发送至flash;

根据flash返回的第二数值校验所述flash的寄存器的写入过程标志位和擦除成功标志位,判断擦除是否成功。

如上述装置,可选地,所述第三控制模块还用于:

擦除完成之后,向所述FMC上的寄存器发送烧写指令之前,控制所述FMC的第二寄存器,将所述flash的烧写模式修改为用户模式。

如上述装置,可选地,所述烧写单元具体包括:

指令生成子单元,用于控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第二SPI写指令,通过所述第二SPI写指令将待升级程序写入到所述flash中;

校验子单元,用于校验所述flash的寄存器的写入过程标志位和烧写成功标志位,判断烧写是否成功。

如上述装置,可选地,所述指令生成子单元具体用于:

修改所述FMC的第二寄存器的值,以便所述FMC根据所述第二寄存器的值确定待发送的SPI指令为写指令;

通过所述AHB的数据线向所述FMC的第二寄存器发送待升级程序;

通过所述AHB的数据线向所述FMC的第二寄存器发送待写入flash的地址,以便所述FMC根据所述待升级程序和所述地址生成第二SPI写指令,并将所述第二SPI写指令发送至所述flash。

如上述装置,可选地,所述校验单元具体用于:

控制所述FMC的第二寄存器,以便所述FMC根据所述第二寄存器生成第三SPI读指令,并将所述第三SPI读指令发送至flash;

判断flash返回的烧写程序与所述待升级程序是否相同,若相同,则校验成功。

如上述装置,可选地,还包括:

重启模块,用于通过所述寄存器控制所述待升级BMC完成升级过程之后,重启所述BMC。

如上述装置,可选地,还包括:

关闭模块,用于开启LPC到AHB的通道之后,关闭所述BMC的看门狗程序;

相应地,所述重启模块具体用于:

重启所述BMC的看门狗程序以便重启所述BMC。

如上述装置,可选地,还包括:

开启模块,用于重启所述BMC之后,控制所述BMC上SCU的寄存器,以便开启所述待升级BMC上的CPU使能。

如上述装置,可选地,所述关闭模块还用于:

重启所述BMC的看门狗程序之后,关闭LPC到AHB的通道。

本发明实施例提供的装置,用于实现上述方法,其功能具体参照上述方法实施例,此处不再赘述。

图4为本发明实施例提供的电子设备的结构示意图,如图4所示,所述设备包括:处理器(processor)41、存储器(memory)42和总线43;

其中,处理器41和存储器42通过所述总线43完成相互间的通信;

处理器41用于调用存储器42中的程序指令,以执行上述各方法实施例所提供的方法,例如包括:开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。

本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。

本发明实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法,例如包括:开启LPC到AHB的通道,以便通过所述AHB控制待升级BMC上的寄存器,其中所述待升级BMC上的寄存器为所述AHB的从机;向所述待升级BMC上的寄存器发送升级指令,通过所述寄存器控制所述待升级BMC完成升级过程。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的装置等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上各实施例仅用以说明本发明的实施例的技术方案,而非对其限制;尽管参照前述各实施例对本发明的实施例进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明的各实施例技术方案的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号