新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STC12C系列的協(xié)議分析

STC12C系列的協(xié)議分析

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

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

本文引用地址:http://m.butianyuan.cn/article/201611/323423.htm

協(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 ASString, start ASInteger, endchr ASInteger) ASString返回兩個字
02DIM i ASInteger
03DIM chkSum ASLong
04DIM lo ASByte
05DIM hi ASByte
06DIM tempStr ASString
07chksum = 0
08FOR i = start TO endchr
09chksum = chksum + Asc(Mid(buff, i, 1))
10NEXT
11hi = Shr(chksum AND &HFF00, 8)
12lo = chksum AND &H00FF
13tempStr = Chr(hi) & Chr(lo)
14RETURN 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。


上一頁 1 2 下一頁

評論


技術專區(qū)

關閉