两年前,曾经用过STC的单片机,当时对他的那个ISP下载功能很是感兴趣,且当时也想实现一个IAP升级办法,又不想占用他现有的flash空间,毕竟还是有点小。

就想办法着手研究了一下,就写了一段代码在8051内核的64K空间依次读取所有的数据,最后得到了一个2k多一点的ISP所用的bin文件,反汇编得到汇编文件,就在那花功夫细细地看了看实现方法,

分析得出了基本的下载协议,两年后,我觉得这些东西可以考虑公开了,让再选用STC的兄弟提前参考下,毕竟在某种情况下STC很易被解,(STC的ISP被写坏后还可再升回去,说明非ROM型,这个是不是突破点呢?有设备的兄弟可想想办法,找个工具把ISP部分写掉,然后把程序区的程序读出来,这个需要验证,偶不做这些事,只是在想:我们应该想办法避免掉这种问题。)

注意:如果被宏晶科技的员工看到这份协议,请见谅。因为错误也有你们的一半,是你们激发我去开发这份协议得,详见文档后边的《后话》小节。同时这也说明一个问题,你自己的保密工作做得不够。因为我做矛的技术并不高明,只是你们的盾太弱了。

当年我想从你们那得到协议,未果,于是便有了下边的这些。

强调:请各位阅读者不要胡乱传播,以免损害了宏晶科技的利益。建议各位购买宏晶专用的ISP烧写器。

附协议简介:该版本协议现已通过在ISP版本为3.5和3.6上的测试,可以实现可靠下载。

http://space.ednchina.com/Upload/Blog/2008/8/4/0307d6b8-47cb-4c30-8bcf-887609ee6dd7.rar

协议帧简介:主要构成如下

Head

Sign

Reserved

Length

Frame

Data

Checkksum

Trail

各个填充区详细说明:

名称

长度

功能

Head

2-Byte

包头 (0x46,0xB9)

Sign

1-Byte

标识 (0x6A或0x68)

Reserved

1-Byte

预留区 (填充0x00)

Length

1-Byte

(Head + Length + Data)的总长

Frame

1-Byte

用以区分不同的帧

Data

0~0x8A Bytes

数据

Checksum

1 Byte

校验和

Trail

1 Byte

包尾 (0x16)

包头Head:(0x46,0xB9)

标识 Sign:0x6A表示下载的数据,0x68表示4052返回的数据

预留 Reserved:填充0x00

包长Length:是包头区,包长区,数据区的总长度

帧类型Frame:区分不同的帧

值Value

帧类型描述

0x00

数据帧:包内存放要写入Flash的数据

0x80

确认帧,没有数据

0x81

错误帧,没有数据

0x82

结束帧

0x84

准备帧,准备开始传送数据

0x8E

波特率更改

0x8F

波特率检验

0x30,0x50,0x86,0x8D,0x52

暂时不需要(未详解)

数据区Data:用以存放要传送的数据

校验和Checksum:仅计算包头区,包长区,数据区

计算方式为:以字节为单位进行加计算,计算出三个区的总和后,再加1,取低8位。  激活帧就一个字节,是固定的,不使用协议格式,值为0x7F。通过这个来协商实现ISP下载所用波特率选择,内部有办法测晶振,所以用外部晶振也可以下载,新出厂的芯片用内部RC振荡下载。

波特率检验帧(0x8F)和波特率更改帧(0x8E)

波特率检验帧(0x8F):

SetBaud

Reserved

ISPWrite

各个填充区详细说明:

名称

长度

功能

SetBaud

2-Byte

用以设置MCU的波特率参数,填充为:(##xx xxxxB,##H)

其中第1个字节中##是需要填充的,依次代表4052芯片中的SMOD位和T1x12位,第2个字节为填入TL1和TH1中的数据,Timer1使用方式2—AutoReload。

Reserved

2-Byte

预留区(填充0x00)

ISPWrite

1-Byte

设置ISP写,应为0x8#,其中#的范围为0~7,用以设置ISP擦写的等待时间,与晶振速率有关,具体请参照《STC12C2052AD.pdf》的p40。

波特率更新帧(0x8E):

SetBaud

Reserved

填充方法与波特率检验(0x8F)帧中的一样,且要求数据一样。

返回值:返回接收到的数据和命令。并且在接收到波特率更新帧后采用新的波特率发送数据。

3.3.准备帧(0x80)和引导帧(0x84)

准备帧(0x80):可以不带数据。

引导帧(0x84) :可以不带数据,至少在3.5和3.6版中,可以不用去管。

返回值:准备帧(0x80)和引导帧(0x84)的返回值相同,均返回准备帧。

 

3.4.数据帧(0x00)

用以下格式填充协议包中的数据区

Res 1

Address

Res 2

Len

FlashData

名称

长度

功能

Res 1

3-Byte

预留区1 (填充0x00)

Address

2-Byte

地址区

Res 2

1-Byte

预留区2 (填充0x00)

Len

1-Byte

Flash数据长度

FlashData

1-0x80 Bytes

存放Flash数据

例如:将0x80个数据写入地址:0x8080,则填充如下:

00,00,00,08,80,00,80,########(表示0x80字节数据)

返回值:返回准备帧(0x80),带一字节数据,该数据为上一帧Flash数据的校验和。

其中校验和计算方式与整包的计算方式相同,但应强调的是,计算的结果再减1,详见(2.基本概念 中的 校验和模块)。例如:如果上一包数据为0x80个0,则按照计算函数则得到0x01,最后减1,即校验值为0x00。

3.5.结束帧(0x82)

该帧用于结束ISP下载,可以不带数据。接收到该帧后,ISP会先返回数据,然后清空RAM,继而Reset进入用户程序空间。

转自http://bbs.ednchina.com/BLOG_ARTICLE_143061.HTM

谈宏晶STC单片机的ISP功能 (芯片保密性)转相关推荐

  1. STC单片机在线ISP IAP OTA

    作者 QQ群:852283276 微信:arm80x86 微信公众号:青儿创客基地 B站:主页 https://space.bilibili.com/208826118 参考 STC15单片机功能和应 ...

  2. 浅谈英飞凌XMC1xxx系列单片机的BMI功能

    文章目录 前言 一.BMI是什么? 二.BMI的作用? 1. 为什么要有BMI这个东西? 2. BMI可以选择哪些启动模式? 三.BMI怎么用? 1. 每种启动模式对应的BMI值 2. BMI值的修改 ...

  3. i2c stc8a 从设备_2016宏晶(STC8A8K64S4A12)单片机:1T/8K RAM/12位ADC/I2C/SPI/4串口/8PWM(转载)...

    STC-ISP 升级了很多功能...  (1572) STC-ISP Ver6.85S (2017-3-13) 1. 由于客户的强烈要求,特将快捷键Enter的下载/编程功能取消 恢复串口助手等界面E ...

  4. 芯片STC89C52 (宏晶STC)

    Universal experiment board

  5. STC单片机学习------DS1302时钟芯片

    把DS1302调试出来了,写个记录吧,下次用着时候省得再重新满大街的找资料. 芯片介绍就不写了,度娘一搜一大把,写几点笔记: 1.向寄存器写入数据前,要先关闭写保护,即向 0x8E 写入 0x00,开 ...

  6. C语言单片机数码管a段亮,宏晶单片机设置强上拉模式让数码管更亮!

    STC(宏晶)系列单片机的I/O口具有强上拉模式,何为强上拉模式? 宏晶单片机I/O口可以设置成四种模式:准双向口/弱上接,推挽/强上拉,输入/高阻,设置成推挽/强上拉,无论输出1和0时能承受的电流都 ...

  7. 通过WiFi对STC单片机程序下载和调试

    简 介: 设计了基于WiFi-UART的STC单片机下载调试模块,这样便于对嵌入式系统进行远程调试开发,特别是在一些具有移动功能的平台,强电平台以及需要实时监视和修改程序的应用场合. 关键词: STC ...

  8. STC单片机自动下载调试器设计

    目录 简介 改进方案 1. 解决思路 2. 电路设计 3. 软件 测试结果 参考文献 简介 在推文<全自动STC下载电路设计>中给出了利用STC单片机的ISP程序自动下载调试板的是设计.使 ...

  9. stc8g1k08程序范例_通过WiFi对STC单片机程序下载和调试

    简介 本文设计了基于WiFi-UART的STC单片机下载调试模块,这样便于对嵌入式系统进行远程调试开发,特别是在一些具有移动功能的平台,强电平台以及需要实时监视和修改程序的应用场合. 本文相关的下载资 ...

  10. Keil uVision5软件同时使用C51、ARM、Nuvoton单片机和STC单片机的安装和配置方法

    一.安装工具 1.Keil uVision5软件的C51安装包及破解软件 2.Keil uVision5软件的MDK(ARM)安装包及破解软件 3.新唐(Nuvoton)单片机关于Keil uVisi ...

最新文章

  1. 64位win7安装vs2010出现“组件安装失败...”等问题的解决方法
  2. JVM GC 日志详解
  3. LVS (一) 原理
  4. 一起学设计模式-策略模式
  5. 打印完全二叉树java_java 完全二叉树的构建与四种遍历方法示例
  6. (计算机组成原理)第二章数据的表示和运算-第一节5:本章习题
  7. Teigha4.0数据结构和读取
  8. [架构之路-42]:目标系统 - 系统软件 - Linux下的网络通信-2-无线局域网WIFI原理、WIFI与3G/4G/以太网/蓝牙的协议转换
  9. (Mysql)跨表查询和跨库查询
  10. 【爬虫Practice2】爬取豆瓣高分电影
  11. Ruby_01_环境安装
  12. js 编写一个程序实现统计一串字符串中的英文小写字母个数!
  13. 【diannaoxitong】高手分享:最新版Office2013的全面介绍
  14. 二、lintcode刷题记录--二叉树的路径和
  15. 3.1 Linux 支持的文件系统类型
  16. python多进程和进程池
  17. JS正则表达式数字、字母、特殊符号第一弹
  18. UMLChina建模竞赛第3赛季第10轮:汽车、EA
  19. java程序员找工作前需要做什么准备?
  20. 【软件安装】SPSS22.0安装

热门文章

  1. 如何用两个栈模拟实现一个队列
  2. 四款好用的免费直播编码推流软件
  3. 微信小程序UI框架之【weui】怎样使用
  4. Teststand 界面打不开问题解决
  5. 微信小程序轮播图点击跳转页面
  6. 第十一届 蓝桥杯 省 模拟赛 试题+题解 C/C++描述
  7. SpringBoot2.0学习第四篇之拦截器过滤器配置
  8. 万科java_万科面试总结
  9. mac上有哪些好用的图表软件?
  10. 分布式集群中网络分区问题