一种基于STM32的USB在线升级方法及系统与流程

文档序号:11133697阅读:1099来源:国知局
一种基于STM32的USB在线升级方法及系统与制造工艺

本发明涉及通信领域,特别涉及一种STM32的USB在线升级方法及系统。



背景技术:

目前,STM32F103RCT6只能支持ICP(在电路编程)下载(jtag方式下载)和ISP(在系统编程)下载方式(串口ISP下载模式),这在大批量生产和维护的情况下及其不方便,生产效率也不高。同时,由于ICP下载程序需要使用到JTAG(联合测试)工具,这对售后或用户更新程序相当的不方便;而ISP下载程序需要使用到串口,由于现在新的个人计算机有很多都没有配置串口功能,因此更新程序也相当的不方便。



技术实现要素:

本发明要解决的技术问题之一,在于提供一种STM32的USB在线升级方法,该方法可以实现利用集成电路本身带有的USB接口进行程序更新和维护。

本发明是这样实现技术问题之一的:一种STM32的USB在线升级方法,所述方法包括如下步骤:

步骤1、使用预烧工具将HID的boot程序烧写到芯片的程序加载区中;

步骤2、系统启动后,boot程序将USB设备初始化为HID高速设备;

步骤3、将USB设备与USB主机连接,USB主机枚举USB设备;

步骤4、枚举成功后,USB设备从USB主机接收APP程序数据包,并将APP程序数据包存储到USB设备的数据备份区中;

步骤5、重启USB设备,将APP程序数据包从数据备份区拷贝到APP数据区,并跳转至APP应用区运行APP程序。

进一步地,所述步骤2具体为:

启动系统,运行boot程序,初始化时钟,判断是否进入更新程序模式,若是,则将USB设备初始化为HID高速设备,并进入步骤3;

若否,则判断APP数据区中有无APP程序,若无,则将USB设备初始化为HID高速设备,并进入步骤3;

若有,则校验APP程序的CRC值是否正确,若正确,则跳转至APP应用区运行APP程序;若错误,则从数据备份区拷贝存储的APP程序数据包至APP数据区,并重启USB设备运行APP程序。

进一步地,在所述步骤3中,所述“将USB设备与USB主机连接”具体为:

将USB设备与USB主机连接,并在USB设备的数据线上接一1.5K的上拉电阻,使USB设备与USB主机之间产生3V电压;USB主机的集线器在检测到3V电压后,告知USB主机有USB设备接入,USB主机检测并连接USB设备。

进一步地,在所述步骤3中,所述“USB主机枚举USB设备”具体为:

USB主机对USB设备进行复位,复位后USB设备用端点0来传输数据;USB主机向USB设备发送获取设备描述符指令,USB设备收到指令后,通过端点0将设备描述符信息返回给USB主机,且若端点0中包含完整的18字节设备描述符信息,则将完整的设备描述符信息返回给USB主机;而若端点0中包含的设备描述符信息小于18字节,则将已包含的设备描述符信息返回给USB主机;其中,完整的设备描述符信息包括USB协议版本信息、厂家VID信息、数据包大小信息以及PID信息;

USB主机对USB设备进行再复位,并分配一唯一地址给USB设备作为新地址;USB主机再次向USB设备发送获取设备描述符指令,USB设备收到指令后,若端点0中包含完整的18字节设备描述符信息,则通过新地址将完整的18字节设备描述符信息返回给USB主机;若端点0中包含的设备描述符信息小于18字节,则通过新地址将已包含的设备描述符信息返回给USB主机,并继续向USB设备发送获取设备描述符指令,直至将完整的18字节设备描述符信息均返回给USB主机;

获取完设备描述符信息后,USB主机向USB设备发送获取配置描述符指令,USB设备收到指令后,通过新地址将配置描述符信息返回给USB主机;其中,配置描述符信息包括设备类型信息、总线供电方式信息、数据包大小信息、端点传输及接收数据的信息;

获取完配置描述符信息后,USB主机向USB设备发送获取报告描述符指令,USB设备收到指令后,通过新地址将报告描述符返回给USB主机,获取的报告描述符的数据信息包括设备类型信息、报告ID信息、数据位数信息、数据长度信息、逻辑最大值信息以及逻辑最小值信息。

进一步地,在所述步骤5中,所述“将APP程序数据包从数据备份区拷贝到APP数据区,并跳转至APP应用区运行APP程序”具体为:

将APP程序数据包从数据备份区拷贝到APP数据区,并校验APP程序的CRC值是否正确,若正确,则跳转至APP应用区运行APP程序;若错误,则从数据备份区拷贝存储的APP程序数据包至APP应用区,并重启USB设备运行APP程序。

本发明要解决的技术问题之二,在于提供一种STM32的USB在线升级系统,该系统可以实现利用集成电路本身带有的USB接口进行程序更新和维护。

本发明是这样实现技术问题之二的:一种STM32的USB在线升级系统,所述系统包括预烧模块、初始化模块、设备枚举模块、数据包接收模块以及运行模块;

所述预烧模块,用于使用预烧工具将HID的boot程序烧写到芯片的程序加载区中;

所述初始化模块,用于系统启动后,boot程序将USB设备初始化为HID高速设备;

所述设备枚举模块,用于将USB设备与USB主机连接,USB主机枚举USB设备;

所述数据包接收模块,用于枚举成功后,USB设备从USB主机接收APP程序数据包,并将APP程序数据包存储到USB设备的数据备份区中;

所述运行模块,用于重启USB设备,将APP程序数据包从数据备份区拷贝到APP数据区,并跳转至APP应用区运行APP程序。

进一步地,所述初始化模块具体为:

启动系统,运行boot程序,初始化时钟,判断是否进入更新程序模式,若是,则将USB设备初始化为HID高速设备,并进入所述设备枚举模块;

若否,则判断APP数据区中有无APP程序,若无,则将USB设备初始化为HID高速设备,并进入所述设备枚举模块;

若有,则校验APP程序的CRC值是否正确,若正确,则跳转至APP应用区运行APP程序;若错误,则从数据备份区拷贝存储的APP程序数据包至APP数据区,并重启USB设备运行APP程序。

进一步地,在所述设备枚举模块中,所述“将USB设备与USB主机连接”具体为:

将USB设备与USB主机连接,并在USB设备的数据线上接一1.5K的上拉电阻,使USB设备与USB主机之间产生3V电压;USB主机的集线器在检测到3V电压后,告知USB主机有USB设备接入,USB主机检测并连接USB设备。

进一步地,在所述设备枚举模块中,所述“USB主机枚举USB设备”具体为:

USB主机对USB设备进行复位,复位后USB设备用端点0来传输数据;USB主机向USB设备发送获取设备描述符指令,USB设备收到指令后,通过端点0将设备描述符信息返回给USB主机,且若端点0中包含完整的18字节设备描述符信息,则将完整的设备描述符信息返回给USB主机;而若端点0中包含的设备描述符信息小于18字节,则将已包含的设备描述符信息返回给USB主机;其中,完整的设备描述符信息包括USB协议版本信息、厂家VID信息、数据包大小信息以及PID信息;

USB主机对USB设备进行再复位,并分配一唯一地址给USB设备作为新地址;USB主机再次向USB设备发送获取设备描述符指令,USB设备收到指令后,若端点0中包含完整的18字节设备描述符信息,则通过新地址将完整的18字节设备描述符信息返回给USB主机;若端点0中包含的设备描述符信息小于18字节,则通过新地址将已包含的设备描述符信息返回给USB主机,并继续向USB设备发送获取设备描述符指令,直至将完整的18字节设备描述符信息均返回给USB主机;

获取完设备描述符信息后,USB主机向USB设备发送获取配置描述符指令,USB设备收到指令后,通过新地址将配置描述符信息返回给USB主机;其中,配置描述符信息包括设备类型信息、总线供电方式信息、数据包大小信息、端点传输及接收数据的信息;

获取完配置描述符信息后,USB主机向USB设备发送获取报告描述符指令,USB设备收到指令后,通过新地址将报告描述符返回给USB主机,获取的报告描述符的数据信息包括设备类型信息、报告ID信息、数据位数信息、数据长度信息、逻辑最大值信息以及逻辑最小值信息。

进一步地,在所述运行模块中,所述“将APP程序数据包从数据备份区拷贝到APP数据区,并跳转至APP应用区运行APP程序”具体为:

将APP程序数据包从数据备份区拷贝到APP数据区,并校验APP程序的CRC值是否正确,若正确,则跳转至APP应用区运行APP程序;若错误,则从数据备份区拷贝存储的APP程序数据包至APP应用区,并重启USB设备运行APP程序。

本发明具有如下优点:1、由于USB接口的传输速度比串口快,电路易于实现,有助于实现电路的简化,可以大大提高STM32的生产效率;2、由于USB设备的集成电路本身就带有USB接口,不需要在外部设置USB芯片转换,可以降低生产成本;3、在实施时,由于将程序数据包先存储至数据备份区,当要运行时再拷贝至APP数据区,并对APP程序进行校验后才运行程序,可以提高升级成功率;4、售后可以直接通过个人计算机的USB接口进行更新维护,因此售后维护十分方便。

附图说明

下面参照附图结合实施例对本发明作进一步的说明。

图1为本发明一种STM32的USB在线升级方法的一较佳实施例的执行流程图。

图2为本发明一种STM32的USB在线升级系统的一较佳实施例的结构框图。

具体实施方式

请参照图1所示,本发明一种STM32的USB在线升级方法的一较佳实施例,所述方法包括如下步骤:

步骤1、使用预烧工具将HID的boot程序烧写到芯片的程序加载区中;在具体实施时,需要将boot程序烧到STM32F103RCT6的0x08000000区,因为0x08000000区是flash启动时的程序加载区。

步骤2、系统启动后,boot程序将USB设备初始化为HID高速设备;该步骤2具体为:

集成电路上电成功后,启动系统(程序从0x08000000区这个地址开始启动),运行boot程序,初始化时钟,判断是否进入更新程序模式(ISP模式),若是,则将USB设备初始化为HID高速设备,并进入步骤3;

若否,则判断APP数据区中有无APP程序,若无,则将USB设备初始化为HID高速设备,并进入步骤3;

若有,则校验APP程序的CRC值是否正确,若正确,则跳转至APP应用区运行APP程序;若错误,则从数据备份区拷贝存储的APP程序数据包至APP数据区,并重启USB设备运行APP程序,即如果CRC值错误,则说明程序出现异常,此时就要重新拷贝APP程序数据包。

步骤3、将USB设备与USB主机连接,USB主机枚举USB设备。枚举就是从设备读取各种描述符信息,以知道要加载什么类型的驱动,如何进行通信。USB HID高速设备采用的是中断传输,中断传输是一种保证查询频率的传输,中断端点在端点描述符中要报告它的查询间隔,USB主机可以保证在小于这个时间间隔的周期内安排一次传输,中断传输通常是在数据量不大,但对时间要求严格的地方使用;当然,中断传输也可以用来不断的检测某个状态,当条件满足后使用批量传输,以保证数据的实时,准确性。

在所述步骤3中,所述“将USB设备与USB主机连接”具体为:

将USB设备与USB主机连接,并在USB设备的数据线上接一1.5K的上拉电阻,使USB设备与USB主机之间产生3V电压,由于USB正常有四根线,分别为VCC电源线、D+数据正、D-数据负和GND接地线,在USB主机的集线器上,集线器的D+和D-都通过一个15k的电阻接地,在正常情况下,集线器USB口悬空,D+和D-均为低电平;当在USB设备的数据线上接一1.5K的上拉电阻后(对于全速或者高速设备接在D+上,低速设备接在D-),USB设备与USB主机之间就可以产生3V电压。USB主机的集线器在检测到3V电压后,会判断为高电平,并告知USB主机有USB设备接入,USB主机检测并连接USB设备。

在所述步骤3中,所述“USB主机枚举USB设备”具体为:

USB主机对USB设备进行复位,复位后USB设备用端点0来传输数据;USB主机向USB设备发送获取设备描述符指令(80 06 00 01 00 00 12 00),USB设备收到指令后,通过端点0将设备描述符信息返回给USB主机,且若端点0中包含完整的18字节设备描述符信息,则将完整的设备描述符信息返回给USB主机;而若端点0中包含的设备描述符信息小于18字节,则将已包含的设备描述符信息返回给USB主机;例如,有些USB设备的端点0大小不足18字节(至少8字节),在这种情况下USB主机就只发送一次指令获取,多余的数据将不再发送指令获取,也就是第一次获取设备描述符时,只需返回一次数据,不要再等待USB主机继续获取剩余的数据,最小的设备描述符信息至少包含8字节的数据包大小信息。其中,完整的设备描述符信息包括USB协议版本信息、厂家VID信息、数据包大小信息以及PID信息;USB主机对USB设备进行第一次复位后,就可以知道USB设备的端点0一次可以传输的最长字节数。

USB主机对USB设备进行再复位,并分配一唯一地址给USB设备作为新地址,这样,USB设备有了唯一地址,就可以利用唯一地址跟USB主机进行数据交互了;USB主机再次向USB设备发送获取设备描述符指令,USB设备收到指令后,若端点0中包含完整的18字节设备描述符信息,则通过新地址将完整的18字节设备描述符信息返回给USB主机;若端点0中包含的设备描述符信息小于18字节,则通过新地址将已包含的设备描述符信息返回给USB主机,并继续向USB设备发送获取设备描述符指令,直至将完整的18字节设备描述符信息均返回给USB主机;在USB主机对USB设备进行再次复位后,就可以确定数据传输的唯一地址,并可以知道USB设备的完整描述符信息。

获取完设备描述符信息后,USB主机向USB设备发送获取配置描述符指令,USB设备收到指令后,通过新地址将配置描述符信息返回给USB主机,配置描述符信息的总长度为9字节;其中,配置描述符信息包括设备类型信息、总线供电方式信息、数据包大小信息、端点传输及接收数据的信息;

获取完配置描述符信息后,USB主机向USB设备发送获取报告描述符指令,USB设备收到指令后,通过新地址将报告描述符返回给USB主机,获取的报告描述符的数据信息包括设备类型信息、报告ID信息、数据位数信息(一般为8bit一个字节)、数据长度信息、逻辑最大值信息以及逻辑最小值信息。报告描述符获取完成后,整个枚举过程也就成功了,此时就可以按HID高速设备的传输方式来进行数据通信了。

步骤4、枚举成功后,USB设备从USB主机接收APP程序数据包,并将APP程序数据包存储到USB设备的数据备份区中;USB设备在接收APP程序数据包时,每接收一个数据包,就给USB主机应答一次接收正常,在接收完完整的APP程序数据包后,就应答USB主机接收完成。

步骤5、重启USB设备,将APP程序数据包从数据备份区拷贝到APP数据区,并跳转至APP应用区运行APP程序;

在所述步骤5中,所述“将APP程序数据包从数据备份区拷贝到APP数据区,并跳转至APP应用区运行APP程序”具体为:

将APP程序数据包从数据备份区拷贝到APP数据区,并校验APP程序的CRC值是否正确,若正确,则跳转至APP应用区运行APP程序;若错误,则从数据备份区拷贝存储的APP程序数据包至APP应用区,并重启USB设备运行APP程序,即如果CRC值错误,则说明程序出现异常,此时就要重新拷贝APP程序数据包。

请参照图2所示,本发明一种STM32的USB在线升级系统的一较佳实施例,所述系统包括预烧模块、初始化模块、设备枚举模块、数据包接收模块以及运行模块;

所述预烧模块,用于使用预烧工具将HID的boot程序烧写到芯片的程序加载区中;在具体实施时,需要将boot程序烧到STM32F103RCT6的0x08000000区,因为0x08000000区是flash启动时的程序加载区。

所述初始化模块,用于系统启动后,boot程序将USB设备初始化为HID高速设备;该初始化模块具体为:

集成电路上电成功后,启动系统(程序从0x08000000区这个地址开始启动),运行boot程序,初始化时钟,判断是否进入更新程序模式(ISP模式),若是,则将USB设备初始化为HID高速设备,并进入所述设备枚举模块;

若否,则判断APP数据区中有无APP程序,若无,则将USB设备初始化为HID高速设备,并进入所述设备枚举模块;

若有,则校验APP程序的CRC值是否正确,若正确,则跳转至APP应用区运行APP程序;若错误,则从数据备份区拷贝存储的APP程序数据包至APP数据区,并重启USB设备运行APP程序,即如果CRC值错误,则说明程序出现异常,此时就要重新拷贝APP程序数据包。

所述设备枚举模块,用于将USB设备与USB主机连接,USB主机枚举USB设备。枚举就是从设备读取各种描述符信息,以知道要加载什么类型的驱动,如何进行通信。USB HID高速设备采用的是中断传输,中断传输是一种保证查询频率的传输,中断端点在端点描述符中要报告它的查询间隔,USB主机可以保证在小于这个时间间隔的周期内安排一次传输,中断传输通常是在数据量不大,但对时间要求严格的地方使用;当然,中断传输也可以用来不断的检测某个状态,当条件满足后使用批量传输,以保证数据的实时,准确性。

在所述设备枚举模块中,所述“将USB设备与USB主机连接”具体为:

将USB设备与USB主机连接,并在USB设备的数据线上接一1.5K的上拉电阻,使USB设备与USB主机之间产生3V电压,由于USB正常有四根线,分别为VCC电源线、D+数据正、D-数据负和GND接地线,在USB主机的集线器上,集线器的D+和D-都通过一个15k的电阻接地,在正常情况下,集线器USB口悬空,D+和D-均为低电平;当在USB设备的数据线上接一1.5K的上拉电阻后(对于全速或者高速设备接在D+上,低速设备接在D-),USB设备与USB主机之间就可以产生3V电压。USB主机的集线器在检测到3V电压后,会判断为高电平,并告知USB主机有USB设备接入,USB主机检测并连接USB设备。

在所述设备枚举模块中,所述“USB主机枚举USB设备”具体为:

USB主机对USB设备进行复位,复位后USB设备用端点0来传输数据;USB主机向USB设备发送获取设备描述符指令(80 06 00 01 00 00 12 00),USB设备收到指令后,通过端点0将设备描述符信息返回给USB主机,且若端点0中包含完整的18字节设备描述符信息,则将完整的设备描述符信息返回给USB主机;而若端点0中包含的设备描述符信息小于18字节,则将已包含的设备描述符信息返回给USB主机;例如,有些USB设备的端点0大小不足18字节(至少8字节),在这种情况下USB主机就只发送一次指令获取,多余的数据将不再发送指令获取,也就是第一次获取设备描述符时,只需返回一次数据,不要再等待USB主机继续获取剩余的数据,最小的设备描述符信息至少包含8字节的数据包大小信息。其中,完整的设备描述符信息包括USB协议版本信息、厂家VID信息、数据包大小信息以及PID信息;USB主机对USB设备进行第一次复位后,就可以知道USB设备的端点0一次可以传输的最长字节数。

USB主机对USB设备进行再复位,并分配一唯一地址给USB设备作为新地址,这样,USB设备有了唯一地址,就可以利用唯一地址跟USB主机进行数据交互了;USB主机再次向USB设备发送获取设备描述符指令,USB设备收到指令后,若端点0中包含完整的18字节设备描述符信息,则通过新地址将完整的18字节设备描述符信息返回给USB主机;若端点0中包含的设备描述符信息小于18字节,则通过新地址将已包含的设备描述符信息返回给USB主机,并继续向USB设备发送获取设备描述符指令,直至将完整的18字节设备描述符信息均返回给USB主机;在USB主机对USB设备进行再次复位后,就可以确定数据传输的唯一地址,并可以知道USB设备的完整描述符信息。

获取完设备描述符信息后,USB主机向USB设备发送获取配置描述符指令,USB设备收到指令后,通过新地址将配置描述符信息返回给USB主机,配置描述符信息的总长度为9字节;其中,配置描述符信息包括设备类型信息、总线供电方式信息、数据包大小信息、端点传输及接收数据的信息;

获取完配置描述符信息后,USB主机向USB设备发送获取报告描述符指令,USB设备收到指令后,通过新地址将报告描述符返回给USB主机,获取的报告描述符的数据信息包括设备类型信息、报告ID信息、数据位数信息(一般为8bit一个字节)、数据长度信息、逻辑最大值信息以及逻辑最小值信息。报告描述符获取完成后,整个枚举过程也就成功了,此时就可以按HID高速设备的传输方式来进行数据通信了。

所述数据包接收模块,用于枚举成功后,USB设备从USB主机接收APP程序数据包,并将APP程序数据包存储到USB设备的数据备份区中;USB设备在接收APP程序数据包时,每接收一个数据包,就给USB主机应答一次接收正常,在接收完完整的APP程序数据包后,就应答USB主机接收完成;

所述运行模块,用于重启USB设备,将APP程序数据包从数据备份区拷贝到APP数据区,并跳转至APP应用区运行APP程序;

在所述运行模块中,所述“将APP程序数据包从数据备份区拷贝到APP数据区,并跳转至APP应用区运行APP程序”具体为:

将APP程序数据包从数据备份区拷贝到APP数据区,并校验APP程序的CRC值是否正确,若正确,则跳转至APP应用区运行APP程序;若错误,则从数据备份区拷贝存储的APP程序数据包至APP应用区,并重启USB设备运行APP程序,即如果CRC值错误,则说明程序出现异常,此时就要重新拷贝APP程序数据包。

本发明具有如下优点:1、由于USB接口的传输速度比串口快,电路易于实现,有助于实现电路的简化,可以大大提高STM32的生产效率;2、由于USB设备的集成电路本身就带有USB接口,不需要在外部设置USB芯片转换,可以降低生产成本;3、在实施时,由于将程序数据包先存储至数据备份区,当要运行时再拷贝至APP数据区,并对APP程序进行校验后才运行程序,可以提高升级成功率;4、售后可以直接通过个人计算机的USB接口进行更新维护,因此售后维护十分方便。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

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