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

基于芯片usbhid升级固件的方法、终端设备及计算机可读存储介质

文献发布时间:2023-06-19 11:22:42


基于芯片usbhid升级固件的方法、终端设备及计算机可读存储介质

技术领域

本发明涉及嵌入式编程,特别是涉及一种基于芯片usbhid(Universal SerialBus-Human Interface Device,通用串行总线-人机接口设备)升级固件的方法、终端设备及计算机可读存储介质。

背景技术

一般地,在待升级固件的芯片中,例如单片机芯片,更具体地,例如stm32芯片中,这些芯片固件升级在研发阶段需要通过烧录器或者下载器来烧录固件,如果产品发到客户则需要携带相应的烧录器或下载器;有的设备还需要拆设备外壳才能更新固件,很不方便。

以上背景技术内容的公开仅用于辅助理解本发明的构思及技术方案,其并不必然属于本专利申请的现有技术,在没有明确的证据表明上述内容在本专利申请的申请日已经公开的情况下,上述背景技术不应当用于评价本申请的新颖性和创造性。

发明内容

为了弥补上述现有技术中的升级固件不便的问题,本发明提出一种基于芯片usbhid升级固件的方法、终端设备及计算机可读存储介质。

本发明的技术问题通过以下的技术方案予以解决:

本发明提出一种基于芯片usbhid升级固件的方法,包括如下步骤:S1:通过USB读取芯片的原固件版本号,读取成功则判断是否有需要升级的新版本;S2:如有,则通过USB向芯片发送芯片复位指令,指使芯片响应该指令,自动复位重启、运行芯片第一存储区的引导程序、等待接收固件数据包;S3:通过USB向芯片发送固件数据包;指使芯片中的引导程序判断固件数据包是否包含新固件数据;若是,则指使将新固件数据暂存在芯片的RAM区,暂存完后以写入FLASH的方式模拟烧录至第二存储区,写入完运行用户程序,并指使芯片更新升级后的固件版本号;若否,则跳转至第二存储区运行用户程序。

在一些实施例中,所述S3步骤中,根据RAM区的储存空间,设置固件数据包接收与写入新固件数据的分段数。

在一些实施例中,所述S3步骤中,发送固件数据包之前向芯片发送握手指令,包括第二存储区的起始地址、待升级新固件数据大小、分段每次写入数据的大小、CRC校验;促使芯片接收握手指令后,指使引导程序判断写入起始地址、待升级新固件数据大小、分段每次写入数据的大小、CRC校验是否正确;若握手失败,重新发送握手指令,直到促使芯片校验正确或检验超时退出升级;若握手成功,通过USB向芯片发送固件数据包。

在一些实施例中,所述S3步骤中,发送固件数据包包括:分帧每次发送升级流程的数据,每帧数据都经过CRC校验;若芯片校验不正确,则接收到芯片回送校验失败的应答信号,重复发送当前帧数据,直到校验正确或校验超时退出升级;若芯片校验正确,则接收到芯片回送校验成功的应答信号,指使将接收到的数据暂存在RAM中;接收到校验成功的应答信号,再发送下一帧数据。

在一些实施例中,所述S3步骤中,进一步地,接收完新固件数据或接收新固件数据达到握手指令规定的分段每次写入数据的大小后,指使将暂存在芯片RAM区的新固件数据写入到第二存储区;第二存储区写入的起始地址为握手指令对应的起始地址。

在一些实施例中,所述S3步骤中,指使引导程序判断固件数据包是否包含新固件数据时,若引导程序在自定义的预设时间内未接收到新固件数据则退出升级跳转至第二存储区运行用户程序。

在一些实施例中,所述S3步骤中,若在运行用户程序时芯片接收到升级固件信号,则发送复位指令,指使芯片成功接收到复位指令后复位重启,从引导程序开始运行;复位失败,则检测VID与PID是否设置正确,检测USB线是否连接好,提示用户重新正确设置VID与PID或连接好USB线。

在一些实施例中,所述S3步骤中,当用户程序运行中在usbhid程序初始化之前,先进行USB软件复位,以防止USB通讯失败;USB软件复位包括模拟拔插USB,即指使USB的D+引脚通过软件先拉低再拉高。

本发明还提出一种基于芯片usbhid升级固件的终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上任一所述方法的步骤。

本发明还提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上任一所述方法的步骤。

本发明与现有技术对比的有益效果包括:本发明用FLASH的写入来模拟固件烧录,可以不需要配置研发人员才使用的烧录器或下载器,只需一台PC跟芯片通过USB连接来操作更新用户固件;特别针对有些设备,芯片本来就与电脑通过USB交互信息,这样只要在PC上操作固件升级的界面就可非常方便地进行固件升级,节省维护成本;本发明使用usbhid不要安装驱动,插在PC上就能用,很方便;其次,本发明的引导程序与要升级的用户固件不是储存在一个区,升级过程不会擦除引导程序,故升级失败后可重新再升级,保证安全。

附图说明

图1是本发明实施例的基于芯片usbhid升级固件的方法的流程关系图;

图2是本发明实施例的基于芯片usbhid升级固件的方法的存储升级图;

图3是本发明实施例的基于芯片usbhid升级固件的方法的升级操作流程图;

图4是本发明实施例的基于芯片usbhid升级固件的方法的引导程序处理流程图;

图5是本发明实施例的基于芯片usbhid升级固件的方法的PC操作界面图;

图6是本发明实施例的基于芯片usbhid升级固件的方法的握手过程图;

图7是本发明实施例的基于芯片usbhid升级固件的方法的接收固件数据及烧录的过程图。

具体实施方式

下面对照附图并结合优选的实施方式对本发明作进一步说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

本发明实施例包含三个部分:引导程序、用户程序、PC端程序,这三部分的时序关系如下,如图1所示:

HID设备是直接与人交互的设备,usbhid是通用串行总线-人机接口设备的缩写,例如键盘、鼠标与游戏杆等,无需安装驱动就能进行交互。本发明PC与待升级固件的芯片(如stm32单片机芯片)的通讯采取usbhid协议。

PC端程序通过USB发送指令或数据给引导程序与用户程序,引导程序与用户程序接收到PC端发来的指令可以通过USB应答。

引导程序是为了升级用户固件,引导程序里判断条件满足自动通过一个跳转指令跳到用户程序中运行。

用户程序主要是实现客户要求的功能,为了配合固件升级加入了一些功能。运行用户程序时要升级固件需要返回到引导程序中,除了断电重启芯片外可以通过PC端发送下位机复位指令让芯片复位再进入到引导程序。

PC端程序通过USB读取芯片的原固件版本号,读取成功则判断是否有需要升级的新版本;读取失败,则检测VID(Vendor ID,供应商识别码)与PID(Product ID,产品识别码)是否设置正确,USB线是否连接好,提示用户重新正确设置VID与PID或连接好USB线。

通过USB向芯片发送芯片复位指令,指使芯片响应该指令,自动复位重启、运行芯片第一存储区的引导程序、等待接收固件数据包;打开固件数据包;通过USB向芯片发送固件数据包;指使芯片中的引导程序判断固件数据包是否包含新固件数据;若是,则指使将新固件数据暂存在芯片的RAM区,暂存完后以写入FLASH的方式模拟烧录至第二存储区,写入完运行用户程序,并指使芯片更新升级后的固件版本号;若否,则跳转至第二存储区运行用户程序。

优选地,根据RAM区的储存空间,设置固件数据包接收与写入新固件数据的分段数;若RAM区的储存空间比新固件数据小,则设置每次接收与写入数据的大小(要小于RAM的大小),分段写入,记录每次最后写入的地址。接收到的下一块数据紧接着写入到上一块数据最后写入的地址后面,重复接收与写入直到将数据写入完毕。

优选地,写入第二存储区,包括:接收的数据暂存在RAM中,然后写入第二储存区中,见图5;sm32芯片与电脑通过USB通讯,sm32芯片接收到要升级的固件暂存到RAM区,再从RAM区读取后写入到0x80004000后的flash块,64k flash包括16k存储有引导程序的第一存储区,以及48k存储有用户程序的第二存储区(具体的内存分配可以根据芯片大小,引导程序与用户固件大小做调整,不限于此处所列举的内存分配)。

优选地,发送固件数据包之前向芯片发送握手指令,包括第二存储区的起始地址、待升级新固件数据大小、分段每次写入数据的大小、CRC校验;促使芯片接收握手指令后,指使引导程序判断写入起始地址、待升级新固件数据大小、分段每次写入数据的大小、CRC校验是否正确;若握手失败,重新发送握手指令,直到促使芯片校验正确或检验超时退出升级;若握手成功,通过USB向芯片发送固件数据包。握手过程如图6所示,判断握手是否正确包括:判断CRC是否正确、判断烧录地址是否正确、判断新固件数据包是否过大、判断RAM内存是否够储存一次要烧录的数据。

优选地,发送固件数据包包括:分帧每次发送升级流程的数据,每帧数据都经过CRC校验;若芯片校验不正确,则接收到芯片回送校验失败的应答信号,重复发送当前帧数据,直到校验正确或校验超时退出升级;若芯片校验正确,则接收到芯片回送校验成功的应答信号,指使将接收到的数据暂存在RAM中;接收到校验成功的应答信号,再发送下一帧数据。

进一步地,接收完新固件数据或接收新固件数据达到握手指令规定的分段每次写入数据的大小后,指使将暂存在芯片RAM区的新固件数据写入到第二存储区;第二存储区写入的起始地址为握手指令对应的起始地址。

优选地,指使引导程序判断固件数据包是否包含新固件数据时,若引导程序在自定义的预设时间内(比如预设时间为5s)未接收到新固件数据则退出升级跳转至第二存储区运行用户程序。

优选地,若在运行用户程序时芯片接收到升级固件信号,则发送复位指令,指使芯片成功接收到复位指令后复位重启,从引导程序开始运行;复位失败,则检测VID与PID是否设置正确,检测USB线是否连接好,提示用户重新正确设置VID与PID或连接好USB线。

优选地,当用户程序运行中在usbhid初始化之前,先进行USB软件复位,以防止USB通讯失败;USB软件复位包括模拟拔插USB,即指使USB的D+引脚通过软件先拉低再拉高。

升级操作流程图如图3所示。运行用户程序,点击“固件版本”,读取用户固件版本号,读取成功则显示当前用户固件版本号,读取失败则检测USB连线与USB的VID及PID是否设置正确;点击“打开文件”,选择要升级的固件并打开;点击“下位机复位”,复位成功则进入到引导程序,复位失败则检测USB连线与USB的VID及PID是否设置正确;点击“开始升级”,先发送握手信号,收到正确的应答信号即握手成功后再将打开的固件数据包发送给芯片。

具体地:

1.引导程序

引导程序需出厂烧写到芯片。

此程序分配到芯片(如stm32)的一个存储区(flash区的一部分)。此程序包含:

(1)usbhid通讯部分;

(2)处理接收PC端发过来的数据(判断是否接收到有效的用户固件,有则将接受的数据暂存RAM,没有则等待几秒,超时后跳至用户程序运行);

(3)将接收到的用户固件数据包写入相应的flash区;

(4)跳转到储存用户程序的flash区运行。

引导程序处理流程如图4所示。芯片复位后会运行引导程序,5s(等待时间可自己定义)内判断USB是否接收到数据,接收到则检测是否是有效的固件数据,是则接收数据并且写入flash,升级成功后则跳转运行新程序,升级失败则跳转运行原来程序。

2.用户程序

此程序是客户功能的实现,为了配合USB升级,需要作相应的处理:

(1)用户程序储存的falsh块需要配置成不能跟引导程序所储存的flash块重叠;

(2)用户程序也需要usbhid通讯部分;

(3)添加USB软件复位功能。当用户程序在初始化usbhid前先执行USB软件复位代码,让USB先复位以保证USB通讯正常。因为用户程序与引导程序都会用到usbhid协议,在引导程序跳转到用户程序后需要拔插下USB让USB主设备重新枚举连接控制卡,否则可能运行用户程序时USB通讯不了。但是有时候可能控制卡与PC端USB连接封在设备里面不方便拔插,可以模拟拔插,即进行USB软件复位,只要将USB的D+引脚通过软件先拉低再拉高即可实现;

(4)添加芯片软件复位功能。对芯片的复位是因为升级需要在运行引导程序中进行,一般是运行完引导程序就跳到用户程序中运行,如果在用户程序中运行时需要对USB升级需要让芯片返回到引导程序中运行。对芯片进行上电重启后可以进入到引导程序中运行,但有局限性或不方便,所以需要对芯片进行复位;

(5)添加当前固件版本号,方便识别。

3.PC端程序

此程序用来操作选择打开要升级的用户固件包,当stm32在运行引导程序时通过USB将选择的固件数据包发送到stm32中,PC操作界面如图5所示。此程序包含:

(1)“打开文件”操作;点击“打开文件”(A处),打开要升级的固件,打开后在界面显示固件路径(见1);

(2)“开始升级”操作;在打开文件选择好要升级的固件,设置好VID与PID(D处),然后点击固件版本确定需要升级后,点击“下位机复位”(C处)。在显示复位成功(见2,表示芯片重启运行了引导程序)后马上点击开始升级(B处)(不能等太久,不然超时跳过了引导程序就升级不了);然后会显示等待发送握手信号(见3),接着会发送固件数据(见4,显示当前发送了多少数据),写入好后会提示是否写入成功(见5),最后跳转运行用户程序(见6),图5中7、8提示了写入花了多长时间与写入了多少数据量,9显示当前固件版本信息;此时点击固件版本(F处)会显示升级后的固件版本号;H处显示进度条;

(3)控制stm32复位;点击下位机复位(C处),可以控制芯片复位重启运行引导程序;

(4)查询固件版本号;点击固件版本号(F处)就可以读出与当前通讯的板卡的固件号。

PC操作界面还包括:

(1)VID、PID配置;一台电脑可以同时与多块板卡进行USB通讯,要对哪个板卡升级就需要修改VID与PID为此板卡对应的VID与PID(D处);

(2)分段大小调整;有时RAM内存不够,不能一次性储存固件数据包,则需要设置分段大小(G处);如设置8192,则表示接收到8192byte字节后先写入到flash再接着接收,假如程序有40000btye,要求写入5次(40000/8192=4.8,前四次都是写入8192byte,最后一次写入40000-8192*4=7232byte);

(3)“清屏”操作;点击清屏(E处),可清除当前屏幕信息。

本发明提供的思路关键点在于:

(1)引导程序与用户程序储存在不同的flash块,升级用户程序失败也可以重新复原,避免风险;

(2)每次接收数据都加CRC校验与重发机制,降低通讯不稳定导致升级失败;

(3)USB软件复位,以防不方便拔插USB;

(4)PC通过USB发送指令控制芯片复位,避免需要重新上电重启;

(5)RAM暂存升级固件的数据包,如果RAM内存不够,支持分段接收写入;

(6)如果连接多个USB设备,可以通过电脑操作界面通过设置VID与PID来选择升级指定的设备,方便操作。

若在运行用户程序时需要升级固件,运行用户程序时芯片接收到升级固件信号,则要先发送复位指令,指使芯片成功接收到复位指令后会复位重启,然后从引导程序开始运行;复位失败,则检测USB的VID与PID是否设置正确,USB线是否插好,提示用户重新正确设置VID与PID或连接好USB线。因为升级固件需要先进入引导程序中,一般操作是重新给芯片上电,但是有的设备控制卡与电脑共用电源,重上电比较麻烦,并且引导程序设计一般运行几秒未接收到固件数据包则跳至用户固件中运行,这样重上电后,PC还没开机,更来不及发送固件数据包给芯片,芯片就运行完引导程序造成升级失败。通过USB发指令重启芯片,不需要断电重启就能进入引导程序。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。

相关技术
  • 基于芯片usbhid升级固件的方法、终端设备及计算机可读存储介质
  • 基于窄带物联网的固件升级方法、终端设备及计算机可读存储介质
技术分类

06120112901636