在线升级微控制器烧录代码的方法及装置与流程

文档序号:22469737发布日期:2020-10-09 21:58阅读:206来源:国知局
在线升级微控制器烧录代码的方法及装置与流程

本发明涉及芯片在线升级技术领域,尤其涉及一种在线升级微控制器烧录代码的方法及装置。



背景技术:

工控机主板的控制芯片一般采用微控制器(mcu,microcontrollerunit)来实现,mcu可以是如m054等系列微控制器,m054烧录代码预烧录后,如需升级m054的烧录代码,常采用离线升级,即使用专用烧录器升级,如图1所示,烧录器通过usb数据线与pc端相连,m054通过jtag接口,遵循jtag协议与烧录器相连,之后,用pc端的应用程序对m054升级烧录代码。这种升级方式需要专用烧录器才能升级,整机状态时还需要拆机,工程维护不方便。



技术实现要素:

为解决上述问题,本发明提供一种在线升级微控制器烧录代码的方法及装置,能够实现微控制器的在线升级,不用拆机,便于工程维护。

第一方面,本发明提供一种在线升级微控制器烧录代码的方法,所述方法包括:

向微控制器发送复位信号,以使所述微控制器进入isp区并运行isp引导加载程序,其中所述微控制器支持在线系统编程功能;

基于smbus协议读取所述微控制器的flash中当前运行的烧录代码;

将新的烧录代码与所述微控制器的flash中当前运行的烧录代码进行比较,当两者不一致时,将所述新的烧录代码基于smbus协议传输至所述微控制器,以使所述微控制器在线接收所述新的烧录代码并将所述新的烧录代码加载到flash。

可选地,所述基于smbus协议读取所述微控制器的flash中当前运行的烧录代码,包括:

2-1)将读取地址设置为flash的起始地址;

2-2)发送读flash的第一交互命令,所述第一交互命令包括所述读取地址;

2-3)若读取成功,保存读取到的数据;

2-4)判断所述读取地址是否结束,若没有结束,则在当前读取地址上加16,得到新的读取地址,返回步骤2-2);

2-5)重复执行2-2)~2-4),直至所述读取地址结束。

可选地,所述将所述新的烧录代码基于smbus协议传输至所述微控制器,包括:

3-1)判断新的烧录代码的数据长度是否满足flash的大小要求;

3-2)若满足,将写地址设置为flash的起始地址;

3-3)从新的烧录代码中获取4个字节数据;

3-4)发送写flash的第二交互命令,所述第二交互命令包括所述写地址和4个字节数据;

3-5)若写成功,则判断新的烧录代码是否读取完毕,若没读完,则在当前写地址上加4,得到新的写地址,返回步骤3-3);

3-6)重复执行3-3)~3-5),直至读完所有新的烧录代码。

可选地,在基于smbus协议读取所述微控制器的flash中当前运行的烧录代码的步骤之前,所述方法还包括:

检测所述微控制器是否运行在isp区;

若是,则发送指令使所述微控制器继续停留在isp模式,以便执行后续的基于smbus协议读取所述微控制器的flash中当前运行的烧录代码的步骤,否则重新向所述微控制器发送复位信号。

第二方面,本发明提供一种在线升级微控制器烧录代码的装置,所述装置包括:

复位模块,用于向微控制器发送复位信号,以使所述微控制器进入isp区并运行isp引导加载程序,其中所述微控制器支持在线系统编程功能;

读模块,用于基于smbus协议读取所述微控制器的flash中当前运行的烧录代码;

比较模块,用于将新的烧录代码与所述微控制器的flash中当前运行的烧录代码进行比较;

写模块,用于当新的烧录代码与所述微控制器的flash中当前运行的烧录代码不一致时,将所述新的烧录代码基于smbus协议传输至所述微控制器,以使所述微控制器在线接收所述新的烧录代码并将所述新的烧录代码加载到flash。

可选地,所述读模块具体用于:

2-1)将读取地址设置为flash的起始地址;

2-2)发送读flash的第一交互命令,所述第一交互命令包括所述读取地址;

2-3)若读取成功,保存读取到的数据;

2-4)判断所述读取地址是否结束,若没有结束,则在当前读取地址上加16,得到新的读取地址,返回步骤2-2);

2-5)重复执行2-2)~2-4),直至所述读取地址结束。

可选地,所述写模块具体用于:

3-1)判断新的烧录代码的数据长度是否满足flash的大小要求;

3-2)若满足,将写地址设置为flash的起始地址;

3-3)从新的烧录代码中获取4个字节数据;

3-4)发送写flash的第二交互命令,所述第二交互命令包括所述写地址和4个字节数据;

3-5)若写成功,则判断新的烧录代码是否读取完毕,若没读完,则在当前写地址上加4,得到新的写地址,返回步骤3-3);

3-6)重复执行3-3)~3-5),直至读完所有新的烧录代码。

可选地,所述装置还包括:

检测模块,用于在基于smbus协议读取所述微控制器的flash中当前运行的烧录代码的步骤之前,检测所述微控制器是否运行在isp区;

若是,则发送指令使所述微控制器继续停留在isp模式,以便所述读模块执行后续的基于smbus协议读取所述微控制器的flash中当前运行的烧录代码的步骤,否则重新向所述微控制器发送复位信号。

第三方面,本发明提供一种工控机主板,包括微控制器,还包括:处理器、存储器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述在线升级微控制器烧录代码的方法。

第四方面,本发明提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述在线升级微控制器烧录代码的方法。

本发明提供的在线升级微控制器烧录代码的方法及装置,处理器与微控制器直接通过smbus总线通信,通过处理器对微控制器实现在线升级,不用拆机,便于工程维护。

附图说明

图1为现有的微控制器代码升级的系统示意图;

图2为本发明一实施例的在线升级微控制器烧录代码的方法的流程示意图;

图3为本发明另一实施例的在线升级微控制器烧录代码的方法的流程示意图;

图4为本发明一实施例的读flash的流程示意图;

图5为本发明一实施例的写flash的流程示意图;

图6为本发明一实施例的在线升级微控制器烧录代码的装置的示意图;

图7为本发明另一实施例的在线升级微控制器烧录代码的装置的示意图;

图8为本发明一实施例的工控机主板的示意图。

具体实施方式

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

本发明实施例提供一种在线升级微控制器烧录代码的方法,该方法基于处理器实现,处理器通过系统管理总线(systemmanagementbus,smbus)与微控制器连接,如图2所示,该方法包括:

s201、向微控制器发送复位信号,以使微控制器进入isp区并运行isp引导加载程序,其中微控制器支持isp功能。

支持isp(in-systemprogrammability,在线系统编程)功能的微控制器,通常都是运行应用程序存储区的应用程序,只有在复位后,才会运行isp区的isp引导加载程序。本实施例中,isp区指存储isp引导加载程序的区域。isp引导加载程序指实现isp功能预先在微控制器isp区烧录的程序。处理器先向smbus发送0xee选中微控制器,其中0xee的微控制器地址,然后再发送0x55使aprom复位。接着,读取i2cstat和i2crxsign的值,其中i2cstat为smbus控制器的状态值,根据此值判断是否适合进行下一步操作,取值为0或者1。i2crxsign为smbus读信号的状态值,取值为0或者1。判断i2cstat和i2crxsign的值是否都为0,若是,则置updatesign为1,其中updatesign为代码更新状态值,取值为0或者1。若否,则等待0xee重新发送0x55使aprom重新复位。只有当updatesign为1时,再次读取i2cstat和i2crxsign的值;判断i2cstat和i2crxsign的值是否都为0,若是,复位成功,则进入下一步,开始执行基于smbus协议读取微控制器的flash中当前运行的烧录代码的步骤,否则结束升级。

执行完s201之后,进入步骤s204。

s204、基于smbus协议读取微控制器的flash中当前运行的烧录代码。

s205、将新的烧录代码与微控制器的flash中当前运行的烧录代码进行比较,当两者不一致时,进入步骤s206;

s206、将新的烧录代码基于smbus协议传输至微控制器,以使微控制器在线接收新的烧录代码并将新的烧录代码加载到flash。

根据上述的方法实施例,处理器首先向微控制器发送复位信号,以使微控制器进入isp区并运行isp引导加载程序,发送复位信号之后,如图3所示,所述方法还包括:

s202、检测微控制器是否运行在isp区,若是,则继续执行步骤s203,否则返回步骤s201;

s203、发送指令使微控制器继续停留在isp模式。

执行步骤s203之后,继续执行步骤s204~s206。

作为一种实施方式,可以将m054作为本实施例中的微控制器,m054是一款支持在线系统编程(in-systemprogrammability,isp)功能的微控制器。m054包括三部分flash区域,分别为16kb的应用程序存储空间(aprom)、4kb在线系统编程(isp)空间(ldrom)、4kb的dataflash,另外还包括4字节的用户配置区(config)。m054的ldrom(即isp区)预先烧录isp引导加载程序。

m054正常工作时运行在aprom,在升级烧录代码时需要先复位m054,使m054运行到ldrom(即isp区),然后m054自身的cpu执行存储在ldrom(即isp区)中的isp引导加载程序,在i/o口接收来自处理器传输的新的烧录代码并进行烧写动作。

处理器与m054之间使用smbus连接,二者之间采用smbus协议进行通信,交互过程大致如下:

处理器读数据时,发送写请求命令到m054,发送起始条件(起始位和地址),m054将信息发送给处理器,读取完成后由处理器发送nack结束;

处理器写数据时,在发送m054地址后,再发送写入位,m054响应ack,处理器再次发送命令码给m054,m054再次响应ack,处理器发送数据,ack响应每一个字节,传输在收到停止位后结束。

根据本公开的一个实施例,步骤s204:基于smbus协议读取微控制器的flash中当前运行的烧录代码,可以按下面的流程实现,如图4所示,包括:

s2041、将读取地址设置为flash的起始地址。

以m054为例,m054的aprom地址空间为0x0000_0000到0x0000_3fff,ldrom地址空间为0x0010_0000到0x0010_0fff,dataflash地址空间为0x0001_f000到0x0001_ffff,config的地址为0x0030_0000。

s2042、按命令格式初始化要发送的数据。

s2043、发送读flsah的isp交互命令。

s2044、判断是否读取成功,若读取成功,执行步骤s2045,否则退出读flash。

s2045、保存读取数据到bin文件。

s2046、判断读取地址是否结束,若读取地址结束则完成读取,否则在读取地址上加16,得到新的读取地址,返回步骤s2042,继续读取flash数据,直至读取地址结束。

根据本公开的一个实施例,步骤s206:将新的烧录代码基于smbus协议传输至微控制器,可以按下面的流程实现,如图5所示,包括:

s2061、判断新的烧录代码的数据长度是否满足flash的大小要求。若满足,则继续执行步骤s2062,否则直接退出写flash的流程。

以m054为例,m054的aprom大小为16kb,ldrom大小为4kb,dataflash大小为4kb,config大小为4字节。写入的烧录文件数据长度不能大于flash大小。m054运行在ldrom时,不能写ldrom;运行在aprom时,不能写aprom。

s2062、将写地址设置为flash的起始地址。

s2063、从新的烧录代码中读取4个字节数据。

s2064、按命令格式初始化发送数据。

s2065、发送写flash的交互命令。

s2066、判断是否写成功,若写成功,进入步骤s2067,否则退出写flash的流程。

s2067、判断新的烧录代码是否读取完毕,若读取完毕则结束写flash,否则在写地址上加4,得到新的写地址,返回步骤s2063,继续从新的烧录代码中读取4个字节数据,直至读完所有新的烧录代码。

将新的烧录代码全部发送到微处理器之后,再次向微处理器发送复位信号,微处理器接收到复位信号之后,进行复位,重新加载用户配置位(config),然后执行新的烧录代码,整个升级流程结束。

本发明实施例提供的在线升级微控制器烧录代码的方法,通过smbus总线实现处理器和微处理器的数据交互,代码升级操作简便,不用拆机,便于工程维护。

本发明另一实施例提供一种在线升级微控制器烧录代码的装置,如图6所示,该装置包括:

复位模块601,用于向微控制器发送复位信号,以使微控制器进入isp区并运行isp引导加载程序,其中微控制器支持在线系统编程(isp)功能;

读模块603,用于基于smbus协议读取微控制器的flash中当前运行的烧录代码;

比较模块604,用于将新的烧录代码与微控制器的flash中当前运行的烧录代码进行比较;

写模块605,用于当新的烧录代码与微控制器的flash中当前运行的烧录代码不一致时,将新的烧录代码基于smbus协议传输至微控制器,以使微控制器在线接收新的烧录代码并将新的烧录代码加载到flash。

进一步地,在上述装置实施例的基础上,所述读模块603具体用于:

2-1)将读取地址设置为flash的起始地址;

2-2)发送读flash的第一交互命令,所述第一交互命令包括所述读取地址;

2-3)若读取成功,保存读取到的数据;

2-4)判断所述读取地址是否结束,若没有结束,则在当前读取地址上加16,得到新的读取地址,返回步骤2-2);

2-5)重复执行2-2)~2-4),直至所述读取地址结束。

进一步地,在上述装置实施例的基础上,所述写模块605具体用于:

3-1)判断新的烧录代码的数据长度是否满足flash的大小要求;

3-2)若满足,将写地址设置为flash的起始地址;

3-3)从新的烧录代码中获取4个字节数据;

3-4)发送写flash的第二交互命令,所述第二交互命令包括所述写地址和4个字节数据;

3-5)若写成功,则判断新的烧录代码是否读取完毕,若没读完,则在当前写地址上加4,得到新的写地址,返回步骤3-3);

3-6)重复执行3-3)~3-5),直至读完所有新的烧录代码。

进一步地,在上述装置实施例的基础上,如图7所示,所述装置还包括:

检测模块602,用于在基于smbus协议读取所述微控制器的flash中当前运行的烧录代码的步骤之前,检测所述微控制器是否运行在isp区;

若是,则发送指令使所述微控制器继续停留在isp模式,以便所述读模块执行后续的基于smbus协议读取所述微控制器的flash中当前运行的烧录代码的步骤,否则重新向所述微控制器发送复位信号。

本实施例所述的在线升级微控制器烧录代码的装置可以用于执行上述在线升级微控制器烧录代码的方法实施例,其原理和技术效果类似,此处不再赘述。

本实施例提供一种工控机主板,如图8所示,包括:微控制器801、处理器802和存储器803,存储器803存储程序指令,

其中,微控制器801和处理器802通过smbus连接,所述处理器802用于执行存储器803中的程序指令,以实现上述方法实施例所提供的在线升级微控制器烧录代码的方法。

本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机程序,所述计算机程序被处理器执行时实现上述方法实施例所提供的在线升级微控制器烧录代码的方法。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1