找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5636|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

[轉(zhuǎn)帖]我自己小站上的對STC12系列下載協(xié)議的分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:43499 發(fā)表于 2012-8-2 21:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 

這篇文章主要介紹STC12C系列的下載協(xié)議。

這個版本的協(xié)議和以前已經(jīng)有了比較大的改變,包括包頭等等。但是STC有一個千年不變的開啟幀:0x7F,在STC15系列的MCU,仍然使用著這個ISP的開啟幀。原因我不說大家也明白。

那么進(jìn)入主題:STC12系列下載的幀格式:

協(xié)議幀簡介:主要構(gòu)成如下

Head

Sign

Reserved

Length

Frame

 Data

Checksum

Trail

   各個填充區(qū)詳細(xì)說明:

名稱

長度

功能

Head

2-Byte

包頭 (0×46,0xB9)

Sign

1-Byte

標(biāo)識 (0x6A或0×68)

Reserved

1-Byte

預(yù)留區(qū) (填充0×00)

Length

1-Byte

(Head + Length + Frame+Data)的總長

Frame

1-Byte

用以區(qū)分不同的幀

Data

0~0x8A Bytes

數(shù)據(jù)

Checksum

2 Byte

校驗和

Trail

1 Byte

包尾 (0×16)

至于Cmd的協(xié)議應(yīng)答之類的:

命令        說明            MCU回應(yīng)
7F    引導(dǎo)MCU進(jìn)入ISP并測量時鐘        50    MCU選項信息

50    設(shè)置MCU型號等            8F    應(yīng)答

8F    新波特率測試            8F    測試應(yīng)答

8E    正式修改波特率            84    修改波特率應(yīng)答

84    文件容量,擦除芯片        00    應(yīng)答

00    下載程序            00/30    應(yīng)答校驗和,成功或失敗

30    重新下載程序            00/30    應(yīng)答校驗和

69    型號等                8D    應(yīng)答

8D    設(shè)置選項            50    應(yīng)答選項

82    退出                重啟進(jìn)用戶程序

至于交互過程,也算是簡單的,就是看你的設(shè)備反應(yīng)速度了。這就是為什么某些PL2303線下載老出錯的原因無視,不過我這里至少用的挺好。

PC ->0x7f ->MCU

MCU ->信息 ->PC

PC -> 核對?MCU型號 -> MCU

MCU ->波特率變更請求 ->PC

PC ->波特率測試 ->MCU[此時,計算重載值切換波特率】

MCU ->成功/無回應(yīng) -> PC

PC ->波特率設(shè)置 ->MCU [切換到最低波特率上去

MCU ->成功/無回應(yīng) ->PC [切換到數(shù)據(jù)波特率上去

PC -> 擦除芯片 -> MCU

MCU ->成功/無回應(yīng) ->PC

PC -> 0x80個字節(jié)數(shù)據(jù) ->MCU

MCU -> 校驗碼 ->PC

循環(huán)到文件結(jié)束

PC ->設(shè)置?型號 ->MCU

MCU ->成功/無回應(yīng)  -> PC

PC ->設(shè)置選項 ->MCU

MCU ->成功/無回應(yīng) -> PC

PC ->編程結(jié)束 ->MCU

校驗和算法是將標(biāo)識到數(shù)據(jù)區(qū)的內(nèi)容統(tǒng)統(tǒng)加起來,取低十六位,看程序:

01PUBLIC FUNCTION CheckSum(buff AS String, start AS Integer, endchr AS Integer) AS String '返回兩個字
02  DIM i AS Integer
03  DIM chkSum AS Long
04  DIM lo AS Byte
05  DIM hi AS Byte
06  DIM tempStr AS String
07  chksum = 0
08  FOR i = start TO endchr
09  chksum = chksum + Asc(Mid(buff, i, 1))
10  NEXT
11  hi = Shr(chksum AND &HFF00, 8)
12  lo = chksum AND &H00FF
13  tempStr = Chr(hi) & Chr(lo)
14  RETURN tempStr
15END

關(guān)于STC12C5Ax系列的信息幀,這里有一張別人分析的圖:

至于固件版本我這里測試的有:

16.6I : 66 49
26.2I : 62 49

關(guān)于晶振速度的計算:

如果是標(biāo)準(zhǔn)12M時鐘,1200Kps波特率,則計數(shù)值為1/1200*7 = 5833uS,數(shù)值也為5833。將八次技術(shù)求平均(假設(shè)為18 94=6292),則此時單片機(jī)時鐘頻率=6292*12M/5833 = 12.994MHz。

我正在想,那么C級別的單片機(jī)是不是xx 43呢~無視

以下數(shù)據(jù)幀省略幀頭幀尾幀長度校驗碼

——————–核對MCU型號幀————————-

發(fā)送數(shù)據(jù) 50 07 00 36 01 MCU型號

接收數(shù)據(jù) 8F

——————-波特率實(shí)驗幀—————————–

發(fā)送數(shù)據(jù) 8F xx yy zz aa dd 83

xx=0xC0 (C0=1100 0000,意思就是T1x12,波特率加倍)

yy=定時器重載值,按照加倍/1T計算。

zz=設(shè)置校驗值,計算方式是 ff=xx

aa=波特率校驗值,計算方式是aa=2 * (0×100 -yy)

dd=延時值,延時多少時間片切換

83為ISP定時常數(shù),這個值適用于12M晶振,在STC手冊中有不明顯的描述:

1//#define   ENABLE_IAP   0x80//if SYSCLK<30MHz
2//#define   ENABLE_IAP   0x81//if SYSCLK<24MHz
3//#define       ENABLE_IAP   0x82//if SYSCLK<20MHz
4//#define   ENABLE_IAP   0x83//if SYSCLK<12MHz
5//#define   ENABLE_IAP   0x84//if SYSCLK<6MHz
6//#define   ENABLE_IAP   0x85//if SYSCLK<3MHz
7//#define   ENABLE_IAP   0x86//if SYSCLK<2MHz
8//#define       ENABLE_IAP    0x87//if SYSCLK<1MHz

但是實(shí)際上測試似乎83這個值在40M都沒有問題。

接受數(shù)據(jù):

8F xx yy zz aa dd 83

—————————–波特率確認(rèn)幀

發(fā)送數(shù)據(jù) 8E xx yy zz dd 83

接收數(shù)據(jù) 同上

——————————擦除幀:

這里我有充分的理由懷疑老妖是有毛病的。都到了下載程序的地步了還搞這么詭異的擦除命令:

184 FF 00 F0 00 00 F0 00 00 00 00 00 00 00 00 00 00 00
200 80 7F 7E 7D 7C 7B 7A 79 78 77 76 75 74 73 72 71 70 6F 6E 6D 6C 6B
36A 69 68 67 66 65 64 63 62 61 60 5F 5E 5D 5C 5B 5A 59 58 57 56 55 54
453 52 51 50 4F 4E 4D 4C
54B 4A 49 48 47 46 45 44 43 42 41 40 3F 3E 3D 3C 3B 3A 39 38 37 36 35
634 33 32 31 30 2F 2E 2D 2C 2B 2A 29 28 27 26 25 24 23 22 21 20 1F 1E
71D 1C 1B 1A 19 18 17 16 15 14 13 12 11 10 0F 0E

回應(yīng):

00 00

———————數(shù)據(jù)幀

發(fā)送 00 00 00 ADDR 00 LEN EF 0×80 bytes數(shù)據(jù)

ADDR = 2BYTE 的地址,高位在前低位在后

LEN  似乎是數(shù)據(jù)長度

數(shù)據(jù)字段如果不足80 bytes填ff補(bǔ)足

回應(yīng) 07 ChkSum

ChkSum的算法和前面介紹的一樣,只不過只是針對數(shù)據(jù)部分的校驗

——————設(shè)置型號幀:

69 07 00 36 01 MCU_MODEL

MCU_MODEL是MCU型號

回應(yīng)就一個字 8D

——————-設(shè)置選項幀

發(fā)送:8D FF x1 x2 FF FF FF FF FF x3 FF FF FF FF FF FF 00 A9 0A A6

x1,x2,x3參見前面的選項信息

接受:50 FF x1 x2 FF x3 03 FF 固件版本 FF x1 x2 FF x3 FF 00 A9 00 03 00 9A 04 79 1A 00 AD FF 00 62

——————RESET幀

發(fā)送:82 00 00

沒有回應(yīng)。

具體實(shí)現(xiàn)可以看kSTC12-ISP的實(shí)現(xiàn)方式

萬致遠(yuǎn)原創(chuàng),轉(zhuǎn)載注明出處:http://www.rwzy.co.cc

[此貼子已經(jīng)被作者于2012-8-2 21:36:48編輯過]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:43499 發(fā)表于 2012-8-2 21:36 | 只看該作者
 貌似這個論壇沒有代碼高亮功能。
粘貼過來格式變得亂七八糟了
回復(fù)

使用道具 舉報

板凳
ID:1 發(fā)表于 2012-8-3 01:47 | 只看該作者

用ie發(fā)帖應(yīng)該沒有問題的

回復(fù)

使用道具 舉報

地板
ID:43499 發(fā)表于 2012-8-3 13:33 | 只看該作者
 在Linux下面ies4linux可不好用……
回復(fù)

使用道具 舉報

5#
ID:276663 發(fā)表于 2018-3-2 10:21 | 只看該作者
也想做個離線下載器玩,樓主寫的有參考價值。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表