STC 下载 自动波特率 设计
来源:互联网 发布:篮球数据分析 编辑:程序博客网 时间:2024/04/29 20:05
虽然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并测量时钟50MCU选项信息
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 下载 自动波特率 设计
- STC15F104E的STC单片机自动下载系统设计
- STC单片机波特率计算
- 8051-stc冷启动自动下载线原理及DIY
- STC不断电下载
- STC单片机11.0592晶振实现115200波特率串口通信
- 51单片机波特率计算器(可以计算stc啊!)
- STC串口回传ID号,及波特率
- STC单片机的下载协议
- 使用STC-ISP下载程序
- STC
- stc
- 单片机STC-ISP下载线学习板
- STC单片机程序下载问题汇总
- STC单片机无法下载故障总结
- STC单片机程序下载失败总结
- stc单片机“全自动下载”(程序版)
- stc单片机不断电下载程序
- Access modifier 和 Non-access modifier的使用范围总结
- 绝对路径与相对路径(转)
- School Team Contest #2 ABCEH 解题报告
- FC系统的内存映射
- MySQL AUTO_INCREMENT 简介
- STC 下载 自动波特率 设计
- C++中的左值和右值
- LAMP(Linux+Apache+Mysql+PHP)优化技巧
- Set方法举例
- Linux PHP网站提速三大“软”招
- 构建高性能J2EE应用的十个技巧
- 40个迹象表明你还是PHP菜鸟
- 三方法优化MySQL数据库查询
- java 事件响应