




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
STC单片机的下载协议关于STC的下载在Linux平台下面一直是一个老大难的问题。我最近一段时间去ourdev网站,和数码之家,包括有一些热心人的协助。以及一些前人开发的开源软件,类似gSTC-ISP之类的软件。才让我完全的搞懂了STC的ISP协议。本文以GPLv3条款发布。但是切勿胡乱传播。影响宏晶的利益。这个逆向工程做的并不妥当。望宏晶包涵,毕竟你并未公开协议。导致我们使用Linux的人痛苦不堪。现在先放出用Gambas写的两个ISP软件。分别对应89系列和12系列。15系列正在分析。别的系列因为不常用暂无协议。SerialPortkSTC89-ISP那么呢,我就先从STC89系列的讲起。大同小异的。STC89系列的单片机在上电的时候会执行在ISPFLASH的ISP程序。只要在串口上收到连续的0x7f,便会进入ISP模式。老姚选择0x7f的理由是里面没有连续的低电平。这样的话就可以让单片机来调整自身UART的时钟到计算机的时钟,让波特率同步。但是若频率太高,则测不准。所以启动波特率要控制在9600以下为宜。而且均有时间限制。如果不在超时时间内连接MCU。MCU会自动断开,跑用户程序。这就是为什么某些芯片,类似PL2303打开关闭速度慢的芯片下载容易出问题的原因。切入正题:STC的数据包格式为:包头2BYTE+标识2BYTE+长度1BYTE+包类型1BYTE+数据nnBYTE+校验码1BYTE+包尾1BYTE。包头固定0×46,0xb9.(但是在信息帧中不包含包头标识来自单片机的是6800而来自计算机的是6A00包尾固定0×16.至于我这里捕获的标识,在89系列里大概有0×00——信息(注意,这里没有包头)0×00——数据(这个是切换波特率以后的0x8F——新波特率实验0x8E——波特率正式更改0×84——擦除芯片0×80——校验返回0x8D——设置选项并且结束编程0×80——(结束时,上位机)结束编程,通知MCU复位。0×80——暂时未知(交互中的,不影响下载)通讯的交互过程PC二》开启0x7fMCUMCU=》信息PCPC二》计算重载值,波特率测试MCU(发送完立马要切换波特率到计算值)MCUMCU=》确认波特率测试二》PCPC二》(切换回原波特率)波特率正式改变MCUMCU=》(切换到计算值)确认PC二》未知MCU=》确认PC=》擦除MCU=》确认PC=》写入数据包MCU二》确认PC二》设置选项MCU二》确认PC=〉〉退出编程MCU二》返回。校验和的算法就是除了包头,包尾,校验和,其他统统加起来,取低八位(STC89)或者低16位(STC12)。—————————–大致的通讯过程如上,现在从信息帧讲起—————————-信息帧是类似这个的信息(注意,没有包头):68003B0014DA14DA14DA14DA14DA14DA14DA14DA4343FDF00282000000000000000000000000000000000000000000000000000000000000000A16其中数据部分的Byte4~19均为测量PC的脉宽,而按照脉宽计算CPU的速度的公式为:fOSC二脉宽*波特率*12/7,依次可以计算出MCU可以用的最高波特率。后面的0×430×43代表MCU固件是4.3C.紧跟的0xFD代表选项信息:xxxxxxxx876543213=需要短接P1.0/P1.1才能下载1=关闭,0=开启6=ALE脚,0=P4.5,1二ALE8=停止看门狗,1=复位关,0=停电关7=允许访问内部AUXRAM,1=允许,0=不允许4=下次下载擦DATAFLASH,0=开,1=管5=时钟增益,1=高,0=氐1=时钟倍速,1=12T,0=6T然后,PC需要计算出MCU最高可用波特率。但是这里STC89系列比较的奇怪。因为在11.0592M的晶振下,居然能跑到115200的波特率。但是用传统公式计算。最多就57600.似乎是倍频再倍频,也就是原来是/16的现在/8了。实在是奇怪。PUBLICFUNCTIONCalculate_load(BaudASInteger,CrystalASLong)ASString'Crystal以HZ计单位'12T函数DIMreloadASByteDIMBaud0ASIntegerDIMvASLong'使用12T模式,加倍STC超级波特率v=Baud*32reload=Int(256-(crystal/v)+0.5)baud0=((crystal/2)/(256-reload)/16)TRYcalc_error=Abs((Baud/baud0)-1)*10000RETURNChr(reload)END看起来这个玩意的实现应该是*软件模拟的。但是具体的实现的话。我还是不清楚。毕竟现在老姚学聪明了。MOVC读FLASH以外的地方均会导致复位……所以具体实现方式实在弄不清楚。波特率实验帧的数据部分是FF重载值000006等待回应值ISP定时常数重载值的上面已经贴出GAMBAS的计算方式。对于PL2303芯片这种打开和关闭速度比较慢的串口,等待回应值我喜欢用0xE0。因为可以在比较快的速度下不出错。ISP定时常数推荐使用0×81。我测试到50M的外部时钟都不出问题。然后PC必须在规定的时间内切换到新的波特率上,等待MCU的回应。MCU的回应PC的帧一模一样,只是标识和校验和有差别。然后再次重复。只不过不发送ISP定时值。接着一番交互以后:Sent:46B96A000C8002003601F00221162recv:46B968000680EE16这一段代码似乎是固定的。PC就会向MCU发送擦除命令。很简单,直接顺序发出去即可:146B96A000D84023333333333332F16然后接受到MCU的回应后。发送ROM数据包:ROM数据包的格式很简单0×00(标识)+0×000×00(填充)+高八位地址+低八位地址+0×00+长度(一般固定0×80,后面填充就OK了)+数据然后MCU的回应也比较简单:146B9680007807968160×80是标识。至于0×7
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 跟谁学叶武滨时间管理
- 人教陕西 九年级 下册 语文 第一单元《 短诗五首》习题课 课
- 人教陕西 九年级 下册 语文 第二单元《 变色龙》习题课 课件
- 鲁教版高中语文必修5六国论 同步练习语言运用
- 二年级下册数学口算练习题(下载)
- 劳动合同范例封皮
- 丙方供应材料三方合同范例
- 余杭发货合同范例
- 住房借贷抵押合同范本
- 劳务合同范例随机服务
- 遥感的物理基础 课件 第二章 遥感的物理基础
- 艾梅乙母婴传播知识课件
- 胃大部切除术护理常规
- 2025体育单招英语备考100个高频名词精讲(精校打印版)
- 2025年皖北卫生职业学院单招职业适应性测试题库审定版
- 台球馆装修合同模板及明细
- 数学-湖北省鄂东新领先协作体2025届高三下学期2月调考(二模)试题和答案
- 二手房“带押过户”三方协议书年
- 建筑工程施工资料填写范本
- GB/T 44994-2024声学助听器验配管理
- 装卸车程序及人员管理规章制度范文(2篇)
评论
0/150
提交评论