一种STM32跨单片机烧录程序的方法与流程

文档序号:18256869发布日期:2019-07-24 10:18阅读:1662来源:国知局
一种STM32跨单片机烧录程序的方法与流程

本发明涉及一种嵌入式领域单片机程序烧录的方法,尤其涉及的是一种STM32跨单片机烧录程序的方法。



背景技术:

目前对STM32单片机烧录的办法最常用的有三种:1.用MCUISP(网上很流行)软件通过串口1烧录。2.用STM官方软件通过串口1烧录;3.用仿真器下载程序。以上的方法都是直连的关系,即烧录设备直接连接到要烧录的目的单片机上,而且采用方法1或方法2通过串口烧录的话,官方文档明确写出只能通过串口1来进行烧录。而方法3用仿真器烧录需要专门的JTAG或者SWD接口,不能跨机烧录;上述无论是官方的软件还是网上流行的MCUISP都只能通过串口1来进行烧录,而且烧录的时候要用一个boot0脚辅助,也不能跨机烧录。

在一些产品中,内部不止一个单片机,每个单片机会有专门的程序来负责相应的功能;一旦程序更新可能要对产品里每个单片机的程序都要升级。某些产品会给用户预留一个串口与设备通信,这种情况下只能采用方法1或2更新与之相连的单片机程序(必须是串口1),若需要更新机器内的其他单片机程序必须要拆开机箱用电路板上预留的接口对其他单片机进行升级。如果在公共场合拆机会把机器内部结构暴露给用户,造成机密泄露;而且操作起来也比较麻烦。

因此,现有技术还有待于改进和发展。



技术实现要素:

本发明的目的在于提供一种STM32跨单片机烧录程序的方法,旨在解决现有的STM32单片机烧录方法不能实现跨机烧录的问题。

本发明的技术方案如下:

一种STM32跨单片机烧录程序的方法,其中,具体包括以下步骤:

步骤S1:烧录设备通过串口与需要烧录的单片机直接连接(下称该单片机为直连单片机);

步骤S2:烧录设备读取需要烧录的文件,若文件读取成功,把烧录文件的数据加载到内存并执行步骤S3,若文件读取失败,执行步骤S8;

步骤S3:烧录设备控制直连单片机进入boot模式,若直连单片机进入boot模式成功,执行步骤S4,若直连单片机进入boot模式失败,执行步骤S8;

步骤S4:烧录设备对直连单片机进行连通性测试,若测试成功,执行步骤S5,若测试失败,执行步骤S8;

步骤S5:烧录设备向直连单片机写入一帧数据,若写入成功,执行步骤S6,若写入失败,执行步骤S8;

步骤S6:烧录设备判断需烧录的数据是否已经全部烧录完毕,是,执行步骤S7,否,执行步骤S5;

步骤S7:烧录成功;

步骤S8:退出烧录。

所述的STM32跨单片机烧录程序的方法,其中,具体包括以下步骤:

步骤A1:烧录设备通过串口与任一单片机相连(与烧录设备直接连接的单片机简称直连单片机);

步骤A2:烧录设备读取需要烧录的文件,若文件读取成功,把烧录文件的数据加载到内存并执行步骤A3,若文件读取失败,执行步骤A9;

步骤A3:烧录设备对要烧录的单片机(目的单片机)进行线路选择,若选择成功,烧录设备与目的单片机直连,此时目的单片机变成直连单片机,执行步骤A4,若选择失败,执行步骤A9;

步骤A4:烧录设备控制直连单片机进入boot模式,直连单片机进入boot模式成功,执行步骤A5,直连单片机进入boot模式失败,执行步骤A9;

步骤A5:烧录设备对直连单片机进行连通性测试,若测试成功,执行步骤A6,若测试失败,执行步骤A9;

步骤A6:烧录设备向直连单片机写入一帧数据,若写入成功,执行步骤A7,若写入失败,执行步骤A9;

步骤A7:烧录设备判断需烧录的数据是否已经全部烧录完毕,否,执行步骤A6,是,执行步骤A8;

步骤A8:烧录成功。

步骤A9:退出烧录。

所述的STM32跨单片机烧录程序的方法,其中,所述步骤A2中,需要烧录的文件数据指二进制BIN文件。

所述的STM32跨单片机烧录程序的方法,其中,所述步骤A4中,控制直连单片机进入boot模式,具体包括以下步骤:

步骤a41:烧录设备向直连单片机可靠发送命令帧—“reboot(重启)”,发送成功,直连单片机重启并执行步骤a42,发送失败,执行步骤A9;

步骤a42:等待一段时间,烧录设备向直连单片机可靠发送命令帧—“burn(烧录)”,若发送成功,直连单片机准备进入boot模式,并执行步骤a43,若发送失败,执行步骤A9;

步骤a43:烧录设备在规定时间内是否收到直连单片机发送的进入boot模式的提示信息,是,直连单片机进入boot模式成功,执行步骤A5,否,执行步骤A9。

所述的STM32跨单片机烧录程序的方法,其中,所述步骤a42中,一段时间指0.5s;所述步骤a44中,规定时间指0.5s。

其中,进一步的帧定义如下:

帧头+帧长度+帧ID+帧类型+命令编码+数据长度+数据+校验码;

其中,帧头,用来标识帧的起始;帧长度,表示整个帧的总长度;帧ID,表示帧当前发送帧的号码,每成功发送一次,该号码都会加一;帧类型,用来标识是命令帧,数据帧,还是应答帧;命令编码,用来识别该帧具体的功能,有写入Flash、短接串口、复位设备、进入boot模式等功能;数据长度,指明该帧携带数据的长度;数据,即该帧携带的数据;校验码,对帧长度,帧ID,帧类型,命令编码,数据长度,数据进行校验后生成的编码,本技术方案使用的是异或校验的办法。

进一步,上述涉及到的“可靠发送”具体步骤如下:

步骤m1:烧录设备向直连单片机发送一帧数据;

步骤m2:若直连单片机没有收到帧数据,执行步骤m4,若直连单片机收到帧数据,执行步骤m3;

步骤m3:如果直连单片机收到帧数据,对数据校验,校验正确,对烧录设备应答“ok”,校验失败,对烧录设应答“no”,并执行步骤步骤m4;

步骤m4:烧录设备等待直连单片机的应答是否超时,是,执行步骤m6,否,执行步骤m5;

步骤m5:如果烧录设备收到直连单片机应答“ok”执行步骤m7,如果烧录设备收到直连单片机应答“no”,执行步骤m6;

步骤m6:烧录设备判断向直连单片机发送的次数是否达到最大次数,是,执行步骤m8,否,执行步骤m1;

步骤m7:命令发送成功,跳过步骤m8;

步骤m8:命令发送失败;

其中,步骤m5中的最大次数指3次,步骤m3中的超时时间规定30ms。

所述的STM32跨单片机烧录程序的方法,其中,所述步骤A3中,烧录设备对要烧录的单片机进行线路选择(如图2中,通过M0的U2对M5进行烧录为例来选择线路),具体过程如下:

步骤a31:烧录设备控制直连单片机(M0)短接串口24,此时直连单片机(M0)被短接(旁路),M3变成直连单片机,短接失败,执行步骤A9;

步骤a32:烧录设备控制直连单片机(M3)短接串口13,此时直连单片机(M3)短接略(旁路),M5变成直连单片机,短接失败,执行步骤A9;

步骤a33:至此,烧录设备与M5单片机直连成功,执行步骤A4。

所述的STM32跨单片机烧录程序的方法,其中,所述烧录设备控制直连单片机短接串口AB,所述A、B指单片机上串口号1-5,具体包括以下步骤:

步骤b1:烧录设备控制直连单片机进入boot模式,进入成功,执行步骤b2,进入失败,执行步骤b5;

步骤b2:烧录设备向直连单片机可靠发送命令帧—“bypass(短接)”,参数分别为A串口号和B串口号,发送成功,执行步骤b3,发送失败,执行步骤b5;

步骤b3:直连单片机在串口A的接收中断函数中把串口A接收到的数据赋值给串口B的发送寄存器,在B串口的接收中断函数中把串口B接收到的数据赋值给串口A的发送寄存器;此时,直连单片机被短接(旁路),烧录设备绕过该单片机直接与该单片机的短接串口相连的单片机相连,相连的单片机升级为直连单片机;

步骤b4:短接成功,跳过步骤b5;

步骤b5:短接失败。

所述的STM32跨单片机烧录程序的方法,其中,所述步骤A5中,具体包括以下步骤:

步骤a51:烧录设备向直连单片机可靠发送1KB大小的随机数据,发送成功,统计数加一,发送失败,统计数不变;

步骤a52:重复执行10次步骤a51后执行步骤a53;

步骤a53:如果统计数大于7,测试成功,执行步骤A6,否则,测试失败,执行步骤A9。

所述的STM32跨单片机烧录程序的方法,其中,所述步骤A6中,具体包括以下步骤:

步骤a61:烧录设备向直连单片机可靠发送一帧需烧录的程序数据,发送成功,执行步骤a62,发送失败,执行步骤A9;

步骤a62:直连单片机解析数据帧,比较帧ID与Flash的写入ID大小,等于,表示当前帧正要写入Flash,执行步骤a63,小于,表示当前帧已经完成写入Flash,执行步骤A7,大于,表示前面一些帧已经丢失,执行步骤A9;

步骤a63:直连单片机把接收到的程序数据写入到Flash中,写入完成后再把刚刚写入Flash的程序数据读出来与写入前的数据做比较,若读出来的程序数据与写入前的数据一致,执行步骤a65,若读出来的程序数据与写入前的数据不一致,执行步骤a64;

步骤a64:直连单片机判断写入Flash的次数是否达到预设次数,是,执行步骤A9,否,执行步骤a63;

步骤a65:直连单片机把flash的写入指针往后移动预设值,把flash的写入ID增1,并执行步骤A7。

其中,所述步骤a61中,发送的需烧录的程序数据为1K;所述步骤a65中,flash的写入指针往后移动1K,flash的起始写入地址为0x8008000,所述步骤a64中,所述预设次数为3次。

所述的STM32跨单片机烧录程序的方法,其中,所述步骤A7“烧录设备判断需烧录的数据是否已经全部烧录完毕”中,具体包括以下步骤:

步骤a71:烧录设备把烧录过的程序数据从内存中移除掉;

步骤a72:烧录设备把数据帧的ID增加1;

步骤a73:烧录设备判断内存中是否有剩余的数据,有,执行步骤a74,无,执行步骤A8;

步骤a74:烧录设备判断内存中剩余的数据是否大于一帧数据,大于等于,则执行步骤A6;小于,则加载剩余的数据后用0xFF补齐一帧,并执行步骤A6。

所述步骤a74中,一帧数据的长度为1K。

所述的STM32跨单片机烧录程序的方法,其中,在任一单片机内均预先烧录BootLoader,所述BootLoader具体设计步骤如下:

步骤L1:单片机上电后,初始化单片机上的所有串口,等待1s让烧录设备连接;

步骤L2:如果在这1s内无烧录设备连接,单片机程序跳转到main函数的入口处,执行用户的APP程序,进入正常启动模式;如果在这1s内有烧录设备连接,则执行步骤L3;

步骤L3:单片机进入boot模式,向烧录软件发送进入boot模式的提示信息;

步骤L4:单片机程序等待串口中断被触发来接收烧录设备的命令,若无接收到烧录设备的命令,执行步骤L4,若有接收到烧录设备的命令,执行步骤L5;

步骤L5:单片机程序解析串口信息,并执行相应的串口命令;

步骤L6:单片机程序判断执行的命令是否是重启设备,是,执行步骤L1,否,执行步骤L4;

其中,步骤L1中,初始化所有的串口,每个串口配置为8位数据位,无奇偶校验,一位停止位,波特率为115200bps,并为每一个串口配置好中断处理函数,这样所有串口均可以烧录,解除了只能从串口1烧录的限制。

其中,步骤L4中,任何一个串口在接收数据期间都禁用其他串口的接收功能,防止在烧录途中其他串口的干扰,提高烧录的稳定性。

其中,步骤L6中,执行的命令有:重启设备、短接AB串口、写入Flash数据,进入boot模式;所述A、B指单片机上串口号1-5。

本发明的有益效果:本发明通过提供一种STM32跨单片机烧录程序的方法,通过Bootloader的串口短接功能(让单片机的两个串口进行协议透传,使烧录设备绕过该单片机直接连到下一个单片机),当烧录设备和烧录目的单片机中间间隔1个或者多个单片机,短接中间的这些单片机,让烧录设备与要烧录的单片机达到直连的效果,然后烧录软件再把烧录文件通过串口下载到单片机的Flash中的指定地址处,实现跨单片机烧录;如果多块单片机通过串口互联,无论是星型连接还是树型连接,可通过其中任一单片机往其他的任一单片机里烧录程序,实现单片机的跨机烧录;另外在往直连单片机烧录程序时,可以是单片机上的任意一个串口,解除了只能从串口1烧录的限制。

附图说明

图1是本发明中STM32跨单片机烧录程序的方法的步骤流程图。

图2是本发明中烧录设备的接线与单片机的内部连线图。

具体实施方式

下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。

在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“长度”、“宽度”、“厚度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”、“顺时针”、“逆时针”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个所述特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。

在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接或可以相互通讯;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

在本发明中,除非另有明确的规定和限定,第一特征在第二特征之“上”或之“下”可以包括第一和第二特征直接接触,也可以包括第一和第二特征不是直接接触而是通过它们之间的另外的特征接触。而且,第一特征在第二特征“之上”、“上方”和“上面”包括第一特征在第二特征正上方和斜上方,或仅仅表示第一特征水平高度高于第二特征。第一特征在第二特征“之下”、“下方”和“下面”包括第一特征在第二特征正下方和斜下方,或仅仅表示第一特征水平高度小于第二特征。

下文的公开提供了许多不同的实施方式或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。当然,它们仅仅为示例,并且目的不在于限制本发明。此外,本发明可以在不同例子中重复参考数字和/或参考字母,这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施方式和/或设置之间的关系。此外,本发明提供了的各种特定的工艺和材料的例子,但是本领域普通技术人员可以意识到其他工艺的应用和/或其他材料的使用。

如图1所示,一种STM32跨单片机烧录程序的方法,具体包括以下步骤:

步骤S1:烧录设备通过串口与需要烧录的单片机直接连接(下称该单片机为直连单片机);

步骤S2:烧录设备(烧录设备指的是PC机上的一个软件)读取需要烧录的文件,若文件读取成功,把烧录文件的数据加载到内存并执行步骤S3,若文件读取失败,执行步骤S8;

步骤S3:烧录设备控制直连单片机进入boot模式,若直连单片机进入boot模式成功,执行步骤S4,若直连单片机进入boot模式失败,执行步骤S8;

步骤S4:烧录设备对直连单片机进行连通性测试,若测试成功,执行步骤S5,若测试失败,执行步骤S8;

步骤S5:烧录设备向直连单片机写入一帧数据,若写入成功,执行步骤S6,若写入失败,执行步骤S8;

步骤S6:烧录设备判断需烧录的数据是否已经全部烧录完毕,是,执行步骤S7,否,执行步骤S5;

步骤S7:烧录成功;

步骤S8:退出烧录。

其中,如图2所示为烧录设备的接线与单片机的内部连线图,烧录设备一般指电脑端的烧录软件;M0-M5为单片机,每块单片机都提前烧录了BootLoader;Ux为单片机对应的串口(Ux中x的取值为串口1到串口5,对应U1-U5)需要烧录的单片机可以是M0-M5中的任意一片;所述对某一片单片机的烧录可以有多种线路选择,例如对M1烧录可以通过短接M0的U2和U3口,通过M1的U1口烧录;也可以通过短接M0的U2和U4口,再短接M3的U1和U4口,通过M1的U2口烧录。

直连单片机上电后,首先是Bootloader开始运行,如果在Bootloader的等待时间内没有被烧录设备终端中断,则直连单片机程序跳转到main函数的入口处,执行用户的APP程序,进入正常启动模式;当Bootloader在等待的期间被烧录设备终端,直连单片机则进入boot模式;而Bootloader被中断的方式有很多种,比如串口中断(本技术方案使用的方法),按键中断等等。图2中的M0-M5单片机内都有Bootloader程序,这些单片机的Bootloader在装机前通过普通烧录单片机程序的方法先烧录进去,后面通过烧录设备更新程序不会影响BootLoader的正常工作。

具体地,所述BootLoader的具体设计步骤如下:

步骤L1:单片机上电后,初始化单片机上的所有串口,等待1s让烧录设备连接;

步骤L2:如果在这1s内无烧录设备连接,单片机程序跳转到main函数的入口处,执行用户的APP程序,进入正常启动模式;如果在这1s内有烧录设备连接,则执行步骤L3;

步骤L3:单片机进入boot模式,向烧录软件发送进入boot模式的提示信息;

步骤L4:单片机程序等待串口中断被触发来接收烧录设备的命令,若无接收到烧录设备的命令,执行步骤L4,若有接收到烧录设备的命令,执行步骤L5;

步骤L5:单片机程序解析串口信息,并执行相应的串口命令;

步骤L6:单片机程序判断执行的命令是否是重启设备,是,执行步骤L1,否,执行步骤L4;

其中,步骤L1中,初始化所有的串口,每个串口配置为8位数据位,无奇偶校验,一位停止位,波特率为115200bps,并为每一个串口配置好中断处理函数,这样所有串口均可以烧录,解除了只能从串口1烧录的限制。

其中,步骤L4中,任何一个串口在接收数据期间都禁用其他串口的接收功能,防止在烧录途中其他串口的干扰,提高烧录的稳定性。

其中,步骤L6中,执行的命令有:重启设备、短接AB串口、写入Flash数据,进入boot模式;进一步的,A、B指单片机上串口号1-5。

其中,所谓程序烧录,实质就是通过串口、USB、JTAG接口或者其他接口,把程序文件写入到单片机flash中的某个位置。本技术方案具体指的是把烧录设备(PC电脑)上的二进制BIN文件通过串口写入到直连单片机的Flash中的指定地址处。跨机烧录的核心就是利用BootLoader的短接功能,通过短接(让单片机的两个串口进行协议透传,使烧录设备绕过该单片机直接连到下一个单片机)烧录设备与要烧录单片机中间夹杂的单片机,让烧录设备与要烧录的单片机达到直连的效果,然后烧录软件再把烧录文件通过串口下载到单片机的Flash中的指定地址(如0x8008000)处。

其中,所述步骤S2中,需要烧录的文件数据指二进制BIN文件。

其中,所述步骤S3中,使直连单片机进入boot模式,具体包括以下步骤:

步骤s31:烧录设备向直连单片机可靠发送命令帧—“reboot(重启)”,若发送成功,直连单片机重启冰执行步骤s32,若发送失败,执行步骤S8;

步骤s32:等待一段时间,烧录设备向直连单片机可靠发送命令帧—“burn(烧录)”,若发送成功,直连单片机准备进入boot模式,执行步骤s33,若发送失败,执行步骤S8;

步骤s33:烧录设备在规定时间内是否收到直连单片机进入boot模式的提示信息,是,直连单片机进入boot模式成功,执行步骤S4,否,执行步骤S8。

进一步地,所述步骤s32中,一段时间指0.5s;所述步骤s34中,规定时间指0.5s。

其中帧定义如下:

帧头+帧长度+帧ID+帧类型+命令编码+数据长度+数据+校验码。

其中,帧头,用来标识帧的起始;帧长度,表示整个帧的总长度;帧ID,表示帧当前发送帧的号码,每成功发送一次,该号码都会加一;帧类型,用来标识是命令帧,数据帧,还是应答帧;命令编码,用来识别该帧具体的功能,有写入Flash、短接串口、复位设备、进入boot模式等功能;数据长度,指明该帧携带数据的长度;数据,即该帧携带的数据;校验码,对帧长度,帧ID,帧类型,命令编码,数据长度,数据进行校验后生成的编码,本技术方案使用的是异或校验的办法。

其中,所述步骤S4中,具体包括以下步骤:

步骤s41:烧录设备向直连单片机可靠发送1KB大小的随机数据,发送成功,统计数加一,发送失败,统计数不变;

步骤s42:重复执行10次步骤s41后执行步骤s43;

步骤s43:如果统计数大于7,测试成功,执行步骤S5,反之测试失败,执行步骤S8。

其中,所述步骤S5中,具体包括以下步骤:

步骤s51:烧录设备向直连单片机可靠发送一帧需烧录的程序数据,发送成功,执行步骤a52,发送失败,执行步骤S8;

步骤s52:直连单片机解析数据帧,比较帧ID与Flash的写入ID大小,等于,表示当前帧正要写入Flash,执行步骤s53,小于,表示当前帧已经完成写入Flash,执行步骤S6,大于,表示前面一些帧已经丢失,执行步骤S8;

步骤s53:直连单片机把接收到的程序数据写入到Flash中,写入完成后再把刚刚写入Flash的程序数据读出来与写入前的数据做比较,若读出来的程序数据与写入前的数据一致,执行步骤s55,若读出来的程序数据与写入前的数据不一致,执行步骤s54;

步骤s54:直连单片机判断写入Flash的次数是否达到预设次数,是,执行步骤S8,否,执行步骤s53;

步骤s55:直连单片机把flash的写入指针往后移动预设值,把flash的写入ID增1,并执行步骤S7。

进一步地,所述步骤s51中,发送的需烧录的程序数据为1K;所述步骤s55中,flash的写入指针往后移动1K,flash的起始写入地址为0x8008000。

其中,所述步骤s54中,所述预设次数为3次;

其中,所述步骤S6中,烧录设备判断需烧录的数据是否已经全部烧录完毕,具体包括以下步骤:

步骤s61:烧录设备把烧录过的程序数据从内存中移除掉;

步骤s62:烧录设备把数据帧的ID增加1;

步骤a63:烧录设备判断内存中是否有剩余的数据,有,执行步骤a64,无,执行步骤S7;

步骤s64:烧录设备判断内存中剩余的数据是否大于一帧数据,大于等于,则执行步骤S6;小于,则加载剩余的数据后用0xFF补齐一帧,执行步骤S6;

其中步骤a64中,一帧数据的长度为1K。

其中,上述步骤中涉及到的“可靠发送”(如步骤s31,步骤s32,步骤s41,步骤s51),具体步骤如下:

步骤m1:烧录设备向直连单片机发送一帧数据;

步骤m2:若直连单片机没有收到帧数据,执行步骤m4,若直连单片机收到帧数据,执行步骤m3;

步骤m3:如果直连单片机收到帧数据,对数据校验,校验正确,对烧录设备应答“ok”,校验失败,对烧录设应答“no”,并执行步骤步骤m4;

步骤m4:烧录设备等待直连单片机的应答是否超时,是,执行步骤m6,否,执行步骤m5;

步骤m5:如果烧录设备收到直连单片机应答“ok”执行步骤m7,如果烧录设备收到直连单片机应答“no”,执行步骤m6;

步骤m6:烧录设备判断向直连单片机发送的次数是否达到最大次数,是,执行步骤m8,否,执行步骤m1;

步骤m7:命令发送成功,跳过步骤m8;

步骤m8:命令发送失败。

其中,步骤m5中的最大次数指3次,步骤m3中的超时时间规定30ms。

具体地,当需要烧录的目的单片机为直连单片机(该单片机直接与烧录设备相连),直接采用上述方法对单片机进行烧录即可。当需要烧录的目的单片机没有与烧录设备直接相连,而是中间通过串口间隔了几个单片机时,此时,先要通过短接功能,把中间间隔的单片机短接了,然后再通过上述烧录直连单片机的方法进行烧录,具体包括以下步骤:

步骤A1:烧录设备通过串口与任一单片机相连(与烧录设备直接连接的单片机简称直连单片机);

步骤A2:烧录设备读取需要烧录的文件,若文件读取成功,把烧录文件的数据加载到内存并执行步骤A3,若文件读取失败,执行步骤A9;

步骤A3:烧录设备对要烧录的单片机(目的单片机)进行线路选择,若选择成功,烧录设备与目的单片机直连,此时目的单片机变成直连单片机,执行步骤A4,若选择失败,执行步骤A9;

步骤A4:烧录设备控制直连单片机进入boot模式(boot模式,也即烧录模式,此时直连单片机运行的是BootLoader的程序),直连单片机进入boot模式成功,执行步骤A5,直连单片机进入boot模式失败,执行步骤A9;

步骤A5:烧录设备对直连单片机进行连通性测试,若测试成功,执行步骤A6,若测试失败,执行步骤A9;

步骤A6:烧录设备向直连单片机写入一帧数据,若写入成功,执行步骤A7,若写入失败,执行步骤A9;

步骤A7:烧录设备判断需烧录的数据是否已经全部烧录完毕,否,执行步骤A6,是,执行步骤A8;

步骤A8:烧录成功。

步骤A9:退出烧录。

其中,所述步骤A2中,需要烧录的文件数据指二进制BIN文件。

其中,所述步骤A4中,控制直连单片机进入boot模式,具体包括以下步骤:

步骤a41:烧录设备向直连单片机可靠发送命令帧—“reboot(重启)”,发送成功,直连单片机重启并执行步骤a42,发送失败,执行步骤A9;

步骤a42:等待一段时间,烧录设备向直连单片机可靠发送命令帧—“burn(烧录)”,若发送成功,直连单片机准备进入boot模式,并执行步骤a43,若发送失败,执行步骤A9;

步骤a43:烧录设备在规定时间内是否收到直连单片机发送的进入boot模式的提示信息,是,直连单片机进入boot模式成功,执行步骤A5,否,执行步骤A9。

其中,所述步骤a42中,一段时间指0.5s;步骤a43中,规定时间为0.5s。

其中,进一步的帧定义如下:

帧头+帧长度+帧ID+帧类型+命令编码+数据长度+数据+校验码。

其中,帧头,用来标识帧的起始;帧长度,表示整个帧的总长度;帧ID,表示帧当前发送帧的号码,每成功发送一次,该号码都会加一;帧类型,用来标识是命令帧,数据帧,还是应答帧;命令编码,用来识别该帧具体的功能,有写入Flash、短接串口、复位设备、进入boot模式等功能;数据长度,指明该帧携带数据的长度;数据,即该帧携带的数据;校验码,对帧长度,帧ID,帧类型,命令编码,数据长度,数据进行校验后生成的编码,本技术方案使用的是异或校验的办法。

其中,上述步骤中涉及到的“可靠发送”(如步骤a41,步骤a42,步骤a51,步骤a61),具体步骤如下:

步骤m1:烧录设备向直连单片机发送一帧数据;

步骤m2:若直连单片机没有收到帧数据,执行步骤m4,若直连单片机收到帧数据,执行步骤m3;

步骤m3:如果直连单片机收到帧数据,对数据校验,校验正确,对烧录设备应答“ok”,校验失败,对烧录设应答“no”,并执行步骤步骤m4;

步骤m4:烧录设备等待直连单片机的应答是否超时,是,执行步骤m6,否,执行步骤m5;

步骤m5:如果烧录设备收到直连单片机应答“ok”执行步骤m7,如果烧录设备收到直连单片机应答“no”,执行步骤m6;

步骤m6:烧录设备判断向直连单片机发送的次数是否达到最大次数,是,执行步骤m8,否,执行步骤m1;

步骤m7:命令发送成功,跳过步骤m8;

步骤m8:命令发送失败。

其中,步骤m5中的最大次数指3次,步骤m3中的超时时间规定30ms。

其中,所述步骤A3中,烧录设备对要烧录的单片机进行线路选择(如图2中,通过M0的U2对M5进行烧录为例来选择线路),具体过程如下:

步骤a31:烧录设备控制直连单片机(M0)短接串口24,若短接成功,此时直连单片机(M0)被忽略(旁路),执行步骤a32,若短接失败,执行步骤A9;

步骤a32:烧录设备控制直连单片机(M3)短接串口13,若短接成功,此时直连单片机(M3)被忽略(旁路)),执行步骤a33,若短接失败,执行步骤A9;

步骤a33:至此,烧录设备与M5单片机直连成功,执行步骤A4。

其中,所述烧录设备控制直连单片机短接串口AB(具体地,A、B指单片机上串口号1-5),具体包括以下步骤:

步骤b1:烧录设备控制直连单片机进入boot模式,进入成功,执行步骤b2,进入失败,执行步骤b5;

步骤b2:烧录设备向直连单片机可靠发送命令帧—“bypass(短接)”,参数分别为A串口号和B串口号,发送成功,执行步骤b3,发送失败,执行步骤b5;

步骤b3:直连单片机在串口A的接收中断函数中把串口A接收到的数据赋值给串口B的发送寄存器,在B串口的接收中断函数中把串口B接收到的数据赋值给串口A的发送寄存器;此时,直连单片机被短接(旁路),烧录设备绕过该单片机直接与该单片机的短接串口相连的单片机相连,相连的单片机升级为直连单片机;

步骤b4:短接成功,跳过步骤b5;

步骤b5:短接失败。

其中,所述步骤A5中,具体包括以下步骤:

步骤a51:烧录设备向直连单片机可靠发送1KB大小的随机数据,发送成功,统计数加一,发送失败,统计数不变;

步骤a52:重复执行10次步骤a51后执行步骤a53;

步骤a53:如果统计数大于7,测试成功,执行步骤A6,否则,测试失败,执行步骤A9。

其中,所述步骤A6中,具体包括以下步骤:

步骤a61:烧录设备向直连单片机可靠发送一帧需烧录的程序数据,发送成功,执行步骤a62,发送失败,执行步骤A9;

步骤a62:直连单片机解析数据帧,比较帧ID与Flash的写入ID大小,等于,表示当前帧正要写入Flash,执行步骤a63,小于,表示当前帧已经完成写入Flash,执行步骤A7,大于,表示前面一些帧已经丢失,执行步骤A9;

步骤a63:直连单片机把接收到的程序数据写入到Flash中,写入完成后再把刚刚写入Flash的程序数据读出来与写入前的数据做比较,若读出来的程序数据与写入前的数据一致,执行步骤a65,若读出来的程序数据与写入前的数据不一致,执行步骤a64;

步骤a64:直连单片机判断写入Flash的次数是否达到预设次数,是,执行步骤A9,否,执行步骤a63;

步骤a65:直连单片机把flash的写入指针往后移动预设值,把flash的写入ID增1,并执行步骤A7。

其中,所述步骤a61中,发送的需烧录的程序数据为1K;所述步骤a65中,flash的写入指针往后移动1K,flash的起始写入地址为0x8008000,所述步骤a64中,所述预设次数为3次。

其中,所述步骤A7中,具体包括以下步骤:

步骤a71:烧录设备把烧录过的程序数据从内存中移除掉;

步骤a72:烧录设备把数据帧的ID增加1;

步骤a73:烧录设备判断内存中是否有剩余的数据,有,执行步骤a74,无,执行步骤A8;

步骤a74:烧录设备判断内存中剩余的数据是否大于一帧数据,大于等于,则执行步骤A6;小于,则加载剩余的数据后用0xFF补齐一帧,并执行步骤A6。

所述步骤a74中,一帧数据的长度为1K。

例如,图2中通过M0的U2(假设设备中只有该接口开放给用户)对M5进行烧录,步骤A1-步骤A9具体过程如下:

步骤1:烧录设备通过串口与M0的U2相连;

步骤2:烧录设备读取需要烧录的文件并加载到内存,文件读取失败,执行步骤10;

步骤3:烧录设备控制M0单片机短接串口24,短接成功(此时烧录设备就会与M3的U1直连),执行步骤4,短接失败,执行步骤10;

步骤4:烧录设备控制M3单片机短接串口13,短接成功(此时烧录设备就会与M5直连),执行步骤5,短接失败,执行步骤10;

步骤5:烧录设备控制M5单片机进入boot模式,进入成功,执行步骤6,进入失败,执行步骤10;

步骤6:烧录设备对M5单片机进行连通性测试,测试成功,执行步骤7,测试失败,执行步骤10;

步骤7:烧录设备向M5单片机写一帧程序数据,写入成功,执行步骤8,写入失败,执行步骤10;

步骤8:烧录设备判断要烧录的数据是否已经全部烧录完毕,否,执行步骤7,是,执行步骤9;

步骤9:烧录成功。

步骤10:退出烧录。

同样的,用上述方法,可以对M0-M5中的任一单片机进行升级,因为每个MCU的BootLoader是一样的,所以每个单片机都可以被短接,短接后该单片机就可以被忽略,通过选择短接的线路,来达到烧录设备与网络中的任意一个单片机直连,进而可以对该单片机轻而易举的进行升级。

本技术方案中,通过串口短接技术,让串口网络中的某些单片机被短接(旁路),这样可以通过选择短接的线路,让烧录软件与要烧录的目的单片机达到直连的效果,实现跨单片机烧录。

在本说明书的描述中,参考术语“一个实施方式”、“某些实施方式”、“示意性实施方式”、“示例”、“具体示例”、或“一些示例”等的描述意指结合所述实施方式或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施方式或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施方式或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施方式或示例中以合适的方式结合。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

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