原创 谈宏晶STC单片机的ISP功能 (芯片保密性) 原创

2008-8-4 14:29 14108 10 34 分类: MCU/ 嵌入式
转载请先联系,谢谢。觉得不错就帮忙顶下,呵呵。

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

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

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



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

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





 

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



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





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




Head



Sign



Reserved



Length



Frame



Data



Checkksum



Trail




   各个填充区详细说明:




名称



长度



功能



Head



2-Byte



包头 (0x46,0xB9)



Sign



1-Byte



标识 (0x6A0x68)



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)



标识 Sign0x6A表示下载的数据,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个字节为填入TL1TH1中的数据,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.53.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.基本概念 中的 校验和模块)。例如:如果上一包数据为0x800,则按照计算函数则得到0x01,最后减1,即校验值为0x00






3.5.结束帧(0x82)



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



 










PARTNER CONTENT

文章评论24条评论)

登录后参与讨论

用户377235 2014-4-18 17:22

我也**了stc12c5a整个系列的烧写时序,问题是不知道ISP怎么读出程序,应该是不支持读的,否则早就被**了,成本不要50元。

用户377235 2013-8-17 17:03

都是高手啊

用户377235 2013-1-2 20:03

有没有 STC12C5A60S2 ISP BIN

用户313632 2011-1-15 18:03

0x8D 是死亡指令嗎? 是 earse ISP 嗎? 試了, MCU 便死了 !!!

walnutcy_696810119 2009-10-30 17:35

已邮件答复,电路很简单, 在STC的手册上一般也有的。可自己手工搭建一个。

用户1487602 2009-10-30 10:43

详细阅读了你的文章,你的刻苦专研干劲和奉献精神令人难忘。我十年前只学过at89c51(2051),依赖老仿真器,汇编语言来编程和开发,可是从来没用过软件平台编程和烧写芯片,现在从网上得知STC12系列单片机有不少特点,如今想从操旧业玩玩STC我就是无从着手,几个月来一直在网上游荡,觉得硬件开发工具太贵,对此我深感困难,请问你的文章说的是不是如何自制ISP烧写器?其pcb电路的相关资料你能提供或指点吗?cgcjj@126.com

walnutcy_696810119 2008-10-29 19:19

呵呵,你的ISP如何写进去??你买了设备?? 可以考虑自己加啊,上位机也自己写一个,我就提供了一个可以与3.6d配合使用的上位机软件,

用户1324644 2008-10-28 08:31

STC12的ISP协议如果能修改了,能读数据就好了。

walnutcy_696810119 2008-10-15 19:00

http://blog.ednchina.com/walnutcy/169688/message.aspx

walnutcy_696810119 2008-10-15 18:59

to health, 请看《宏晶STC单片机的ISP的BIN文件 (芯片保密性) 原创》,里边给出了ISP功能的3K bin文件,Ver 3.7D的
相关推荐阅读
walnutcy_696810119 2012-11-21 08:37
Linux下使用smartCOM调试串口
在Windows下的串口调试一直使用sscom,在Linux下只找到一个cutecom,用了几次,很不喜欢,就着手开发了一款自己的串口调试工具,smartCOM。 smartCOM介绍:http...
walnutcy_696810119 2012-03-29 18:12
【博客大赛】原创--测量基础:什么是测量
写在正文之前: 适逢EDNChina搞活动,而我本人也算在测量业工作,就一起作下笔记吧。若有错误,请大家一起斧正。笔者写本文一方面是梳理知识,另一方面也希望与大家探讨有关测量的知识、应用等,希...
walnutcy_696810119 2011-12-20 18:29
GLONASS 15年来,首次实现24颗星在轨可用
  EDN的博客改版后,不太好用,在SINA重开一个,不过重点改为关注GNSS行业新闻 http://blog.sina.com.cn/s/blog_7420cd1701012en9....
walnutcy_696810119 2011-12-20 17:49
逆向工程第一步:通信协议分析
工程中常有这样的事,想分析下其他知名公司产品中的通信协议,以便生产设计兼容产品。 1) 逆向工程,首先要了解产品,知己知彼,百战不怠;     去年受命想仿一款GARMIN的导航盒,但无法...
walnutcy_696810119 2011-11-14 11:30
通用代码调试方法 (Keil, VCC)
调试代码一般需要定位问题,这里给出一个解决方案, 一般的编译器均支持这些宏指令。   #define DEBUG_WALT_1113     1 extern void log_t...
EE直播间
更多
我要评论
24
10
关闭 站长推荐上一条 /3 下一条