当前位置:首页 > 电子 > 正文内容

stc-isp烧录 下载 协议 过程分析

admin8年前 (2018-06-22)电子8710

一、数据封装格式

包头

标示

数据包长度

命令字

内容

校验

包尾

1.  包头:2字节,固定为:0x46,0xB9。

2. 标示:1字节,分两种,ARM发给MCU :0x6A;MCU回复给ARM :0x68。

3.   数据包长度:2字节,除包头外数据包总长度。

4.   命令:1字节。

5.   内容:可以为空,最长134字节。

6.   校验:1字节,为包头之后,校验之前所有字节相加的值,不计进位。

7.   包尾:1字节,固定为:0x16。

二、命令列表

命令字

说明

回复

说明

0x7F

引导MCU进入ISP模式。

0x00

内容中携带MCU自身配置信息。

0x8F

测试波特率指令。

0x8F

内容是与波特率相关的信息。

0x8E

设置波特率指令。

0x8E

内容是与波特率相关的信息。

0x80

握手指令。

0x80 握手回复,内容为空。

0x84

文件大小指令。

0x80

文件大小回复,内容为空。

0x00

发送文件指令。   

0x80

发送文件回复,内容为1个字节。

0x8D

设置选项指令。

0x8D

设置选项应答

0x50

MCU选项信息。

0x10

MCU选项信息应答。

0x82

退出ISP模式指令。

0x80

退出应答。

三、通信流程

1.      ARM首先连续给MCU发送0x7F,引导MCU进入ISP模式。

2.      MCU上电,收到0x7F后,进入ISP模式,回复自身配置信息,这条数据有点特殊,因为它没有包头,以0x68(MCU给ARM回复的标示)开头,其余都符合该协议的数据封装格式。

3.      ARM收到MCU自身配置参数后,会给MCU发送测试波特率的指令。

4.      MCU收到测试波特率指令后,以相同的命令字回复给ARM。

5.      ARM收到测试应答后,给MCU发送设置波特率的命令。

6.      MCU收到设置波特率指令后,以相同的命令字给ARM回复。

7.      ARM收到设置波特率应答后,给MCU发送握手指令,MCU以相同的命令字给ARM回复。如此,重复5次,握手结束。

PS:由于时间关系,以上流程数据包中携带的内容,具体是什么含义,没有仔细研究。

8.      握手结束后,ARM会给MCU发送文件大小,擦除芯片的指令,此数据包中的内容为写入MCU的文件大小,占7个字节,不足7个字节的用0x33补齐。

  文件大小计算方法:

在MCU中,以512B为单位,把存储空间分为若干份,此处文件大小的含义为写入文件占存储空间的份数, 不足一份的按一份计算:

        file_copies= file_size >> 9;

    file_copies = ((file_copies << 9) ==file_size) ? file_copies : (file_copies + 1);

    file_size为写入bin文件的大小。

9.      MCU收到上述指令后,会根据写入文件的大小,擦除芯片,并给ARM回复。

10.   ARM收到文件大小的回复后,开始向MCU发生文件,封装格式:

预留位

写入地址

内容长度

文件内容

             1.        预留位:2字节,0x00, 0x00。

              2.        写入地址:2字节,相邻两个数据包的地址以0x80递增。

             3.        内容长度:2字节,固定长度为:0x00, 0x80。

             4.        文件内容:0x80(128)字节,为实际读到的bin文件内容。

    注意:写入文件的大小必须为0x80×4的倍数。

11.  文件发送完毕后,ARM会向发送设置选项信息(具体什么含义,不清楚),MCU会给予回复。

12.  收到上述回复后,ARM再次向MCU发送MCU选项信息(具体什么含义,不清楚),MCU会给予回复。

13.  最后,ARM向MCU发送退出ISP模式指令,MCU收到指令后,给予回复,程序写入成功。

扫描二维码推送至手机访问。

版权声明:本文由视觉博客发布,如需转载请注明出处。

本文链接:https://feelsight.cn/post/66.html

“stc-isp烧录 下载 协议 过程分析” 的相关文章

STM32 中断向量表的位置 、重定向

STM32 中断向量表的位置 、重定向

这篇文章已经说了STM32的启动过程: https://feelsight.cn/post/39.html 我们也知道怎么跳到main函数了,那么,中断发生后,又是怎么跑到中断入口地址的呢? 从stm32f10x.s可以看到,已经定义好了一大堆...

ESP8266在Eclipse下设置编译模式(有boot和无boot)

ESP8266在Eclipse下设置编译模式(有boot和无boot)

更改编译模式可以更改Makefile文件中的 BOOT?=new APP?=1 SPI_SPEED?=40 SPI_MODE?=QIO SPI_SIZE_MAP?=2 可以根据2A-ESP8266__IOT_SDK_User_Manual__CN_...

物联网 WIFI 一键配置原理(smartconfig) ESP8266/QCA4004

物联网 WIFI 一键配置原理(smartconfig) ESP8266/QCA4004

物联网 WIFI 一键配置原理(smartconfig) ESP8266/QCA4004 自从物联网问世以来,如何使得物 能够联网有了很多的方式,目前运用非常广的WIFI,今天就总结下自这个方面,也对于有需要的盆友也希望有抛砖引玉之效果。 来看个知乎...

内存堆和栈的区别

内存堆和栈的区别

在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到。但对于很多的初学着来说,堆栈是一个很模糊的概念。 堆栈:一种数据结构、一个在程序运行时用于存放的地方,这可能是很多初学者的认识,因为我曾经就是这么想的和汇编语言中的堆栈一词混为一谈。我身边的一些编程的朋友以...

开关电源拓扑结构概述(降压,升压,反激、正激)

开关电源拓扑结构概述(降压,升压,反激、正激)

主回路—开关电源中,功率电流流经的通路。主回路一般包含了开关电源中的开关器件、储能器件、脉冲变压器、滤波器、输出整流器、等所有功率器件,以及供电输入端和负载端。   开关电源(直流变换器)的类型很多,在研究开发或者维修电源系统时,全面了解开关电源主回路的...

单片机时钟周期,机器周期,指令周期的区别

单片机时钟周期,机器周期,指令周期的区别

时钟周期        时钟周期也称为振荡周期,定义为时钟脉冲的倒数(时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时钟周期就是1/12us),是计算机中的最基本的、最小的时间单位。       在一...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。