虽然STC的资料和网站土了一点,但是单片机用起来还可以的。 
由于下载软件STC-ISP界面十分丑陋,并且不稳定,经常下载失败,所以产生了分析下载协议,重新编写软件,以及制作脱机下载器的想法。 
第一步当然是截取PC机和MCU之间的通讯内容分析, 
经过几天几夜的奋斗,取得了一点成果,但仍有相当一部分内容无法研究明白,现在决定暂时停止了,将前期得出的一些结论_公布与此。 
以下所有信息均是在STC12C5604上得出,与早年某些型号比较变化较大。 
数据包格式: 
包头 + 标识 + 数据包长度 + 命令 + 数据 + 校验和 + 包尾 
包头为两个字节,0x46,0xb9 
标识分两种,PC机发送给MCU的为0x6A,MCU回应给PC的是0x68,标识后面还有一个字节固定为0x00。 
数据包长度为除包头外的数据包总长。 
命令为一个字节。 
数据可以有也可以无,最多时有100多个字节。 
校验和为两字节,为包头之后,校验和之前所有字节相加的值。 
包尾固定为0x16 
举个例子说明: 
PC机发送:46 B9 6A 00 0D 50 05 00 36 01 E6 04 01 ED 16 
MCU回应: 46 B9 68 00 07 8F 00 FE 16

大体工作流程: 
PC机以最低波特率(默认1200bps)连续不断发送字节流 0x7F 0x7F 0x7F...... 
MCU上电后检测到RXD引脚上的脉冲变化后,用定时器测量0脉冲的宽度,并且根据测量值将自身波特率设置为与PC机相同(1200bps),然后发送一包数据,包含脉冲宽度的测量值,MCU固件版本,型号,配置选项等。 
PC机收到后,判断型号是否匹配,根据MCU回应的脉宽值计算出MCU的时钟频率,然后计算出MCU可用的最大波特率,然后向MCU发送设置新波特率的命令。 
经过几次来回交互后 
PC机发送芯片容量和要下载程序文件的大小,MCU收到后据此擦除片内Flash。 
然后PC机以128个字节为单位,带有写入地址等信息发送至MCU,MCU收到后回应128个字节校验和,校验成功或失败。 
最后有需要的话,PC机还要发送配置选项信息。 
最后发送完成命令,MCU收到后立即复位运行用户程序,不再回应数据。

命令列表: 
命令 说明                      MCU回应
7F 引导MCU进入ISP并测量时钟 50 MCU选项信息 
50 型号等                       8F 应答 
8F 新波特率测试            8F 测试应答 
8E 正式修改波特率            84 修改波特率应答 
84 文件容量,擦除芯片              00 应答 
00 下载程序                      00/30 应答校验和,成功或失败 
30 重新下载程序           00/30 应答校验和 
69 型号等                      8D 应答 
8D 设置选项                       50 应答选项 
82 退出                      Reset

由于篇幅有限,上面只是简单的一个流程。 
目前所有的工作流程和命令都搞清楚了,不了解的是个别命令携带的数据所表示的意义。 
例如,MCU回应自身选项数据内容为 
16 BF 16 BF 16 BF 16 C0 16 C0 16 BF 16 BF 16 BF  
60 47 00 E6 04 8E FF FF F7 FF FF FF BF FF FF FF  
F7 FF 00 00 00 00 00 00 00 00 
前16个字节为进行8次脉宽测量的结果,60 47表示固件版本为6.0G,E6 04表示单片机型号为5604,后面还有一些字节表示时钟选择,复位电压,看门狗等等,不一一详述。

再一个是设置波特率命令 
携带数据 C0 F3 3F 1A 28 83 
C0即二进制1100 0000其中两个1分别表示的是串口二倍速和定时器T1 12倍速,F3是波特率发生器T1的重装值,12M晶振,F3重装正好是57600波特率。中间的两个字节3F 1A至今未搞明白是什么含义,只知道1A这个值随波特率不同而变化,后面的28字节是个延时值,表示切换波特率后多长时间回应,83是IAP功能的定时参数,这个值与晶振有关,83这个值适合12M晶振时使用。

下载数据的命令就很简单了 
00 00 00 00 00 00 80 (128HEX) 
前面两个固定00 00,后面的 00 00 是写入地址,再后面的00 80是数据量大小。

STC 下载 自动波特率 设计相关推荐

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

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

  2. stc单片机自动下载程序原理和代码实现

    1/stc单片机下载程序的原理 首先我们要理解stc单片机下载程序的原理.在stc单片机中有两个程序区:用户程序区和ISP监控程序区. 这是stc89c52单片机数据手册中的内容. 根据数据手册,我们 ...

  3. 全自动STC下载电路设计

    本文介绍了STC下载的过程,并设计全自动STC下载电路,使得整个下载过程不需要人工干预,这就大大提高的程序的开发效率,使得通过下载-运行-测试 模式完成程序的开发. STC下载模式介绍 STC单片机I ...

  4. 测试几款STC下载电路

    对于手边的一盒STC单片机,测试一下它们使用相同的ISP方案在下载过程中是否都可以按照相同的方式完成程序的下载.同时对它们建立各自的元器件库,以便于后期的应用. ▲ STC单片机 1. STC15W4 ...

  5. 痞子衡嵌入式:嵌入式里串口(UART)自动波特率识别程序设计与实现

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式里串口(UART)自动波特率识别程序设计与实现. 串口(UART)是嵌入式里最基础最常用也最简单的一种通讯(数据传输)方式,可以说 ...

  6. android自动打开软件下载,自动跳过app下载-自动跳过 安卓版v3.4.5-PC6安卓网

    自动跳过app是款针对去广告的辅助应用,用户可以用自动跳过屏蔽掉视频或是影视上的广告,实用又便捷,快来下载自动跳过app吧! 软件介绍 自动跳过app是一款过这款软件,可以帮助用户快速的去除广告,包括 ...

  7. EF Core 数据变更自动审计设计

    EF Core 数据变更自动审计设计 Intro 有的时候我们需要知道每个数据表的变更记录以便做一些数据审计,数据恢复以及数据同步等之类的事情, EF 自带了对象追踪,使得我们可以很方便的做一些审计工 ...

  8. android版 点击下载,自动点击器最新版

    <自动点击器 最新版>是一款非常实用的连点工具应用.有些朋友可能时常抱怨抢不到红包,还有些游戏操做需要不断的点击,非常的麻烦,但是有了这款应用,只需要设置好点击的间隔频率,就能帮助你放开双 ...

  9. (100)Verilog HDL:UART波特率设计

    (100)Verilog HDL:UART波特率设计 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL:UART波特率设计 5)结语 1.2 FPG ...

最新文章

  1. JavaWeb中连接数据库的一般方式与通过JNDI连接池的方式
  2. AP(无线访问接入点(WirelessAccessPoint))
  3. undocumented windows nt pdf_我用Python写了一个PDF转换器!
  4. 数据结构-串操作应用之词索引表
  5. 【Python】Python的类和对象(长文系列第⑤篇)
  6. Effective Java之for-each循环优先于for循环(四十六)
  7. 10.4 使用instanceof操作符判断对象类型
  8. PHP秒杀截流原理,节流阀和去抖动的基本实现方法介绍
  9. python import如何使用_python之import引用
  10. 有符号数与无符号数间的转换
  11. android BaseAdapter优化
  12. Linux下,Pycharm到期,源不好使,无法安装pyqt5及pyqy5-tools的解决办法
  13. 微信小程序开发者工具
  14. 捻花成佛:成为股市高手需要读多少书
  15. 单片机蜂鸣器发出叮咚c语言程序,单片机门铃程序设计 按键按下触发蜂鸣器门铃“叮咚”响...
  16. win7网络发现启用后找不到网络计算机,网络发现启用不了|无法启用网络发现的解决方法...
  17. string.class是什么意思?
  18. 新唐M251 CORTEX-M23内核移植TencentOS tiny教程
  19. 三年打造AI芯片黑科技,IBM“狩猎女神之矛”将撬动企业混合云
  20. 免费好用的IPv6之远程管理路由器-OpenWrt上uhttpd的使用介绍

热门文章

  1. 如何测试光盘的质量?
  2. 系统辨识理论及MATLAB仿真——学习笔记(1)
  3. “系统建模与辨识数据库”系统辨识-伊利湖问题建模
  4. EDA(Quartus II)——乐曲硬件演奏电路设计
  5. Ubuntu下怎么退出vim编辑器
  6. cglib库Enhancer、Callback的使用
  7. Linux 文件/目录管理
  8. Kaggle注册方法
  9. mysql 数据表的复制
  10. js 中的this指针