標題: [轉帖]我自己小站上的對STC12系列下載協(xié)議的分析 [打印本頁]

作者: rgwan    時間: 2012-8-2 21:35
標題: [轉帖]我自己小站上的對STC12系列下載協(xié)議的分析
 

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

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

那么進入主題:STC12系列下載的幀格式:

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

Head

Sign

Reserved

Length

Frame

 Data

Checksum

Trail

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

名稱

長度

功能

Head

2-Byte

包頭 (0×46,0xB9)

Sign

1-Byte

標識 (0x6A或0×68)

Reserved

1-Byte

預留區(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é)議應答之類的:

命令        說明            MCU回應
7F    引導MCU進入ISP并測量時鐘        50    MCU選項信息

50    設置MCU型號等            8F    應答

8F    新波特率測試            8F    測試應答

8E    正式修改波特率            84    修改波特率應答

84    文件容量,擦除芯片        00    應答

00    下載程序            00/30    應答校驗和,成功或失敗

30    重新下載程序            00/30    應答校驗和

69    型號等                8D    應答

8D    設置選項            50    應答選項

82    退出                重啟進用戶程序

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

PC ->0x7f ->MCU

MCU ->信息 ->PC

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

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

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

MCU ->成功/無回應 -> PC

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

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

PC -> 擦除芯片 -> MCU

MCU ->成功/無回應 ->PC

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

MCU -> 校驗碼 ->PC

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

PC ->設置?型號 ->MCU

MCU ->成功/無回應  -> PC

PC ->設置選項 ->MCU

MCU ->成功/無回應 -> PC

PC ->編程結束 ->MCU

校驗和算法是將標識到數(shù)據(jù)區(qū)的內容統(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

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

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

16.6I : 66 49
26.2I : 62 49

關于晶振速度的計算:

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

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

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

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

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

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

——————-波特率實驗幀—————————–

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

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

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

zz=設置校驗值,計算方式是 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

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

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

8F xx yy zz aa dd 83

—————————–波特率確認幀

發(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

回應:

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補足

回應 07 ChkSum

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

——————設置型號幀:

69 07 00 36 01 MCU_MODEL

MCU_MODEL是MCU型號

回應就一個字 8D

——————-設置選項幀

發(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

沒有回應。

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

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

[此貼子已經(jīng)被作者于2012-8-2 21:36:48編輯過]

作者: rgwan    時間: 2012-8-2 21:36
 貌似這個論壇沒有代碼高亮功能。
粘貼過來格式變得亂七八糟了

作者: admin    時間: 2012-8-3 01:47

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


作者: rgwan    時間: 2012-8-3 13:33
 在Linux下面ies4linux可不好用……
作者: IdeaMing    時間: 2018-3-2 10:21
也想做個離線下載器玩,樓主寫的有參考價值。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1