STC12C系列的協(xié)議分析
那么進入主題: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+Da |
Frame | 1-Byte | 用以區(qū)分不同的幀 |
Da | 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)加起來,取低十六位,看程序:
01 | PUBLIC FUNCTION CheckSum(buff ASString, start ASInteger, endchr ASInteger) ASString返回兩個字 |
02 | DIM i ASInteger |
03 | DIM chkSum ASLong |
04 | DIM lo ASByte |
05 | DIM hi ASByte |
06 | DIM tempStr ASString |
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 |
15 | END |
關于STC12C5Ax系列的信息幀,這里有一張別人分析的圖:
至于固件版本我這里測試的有:
1 | 6.6I : 66 49 |
2 | 6.2I : 62 49 |
關于晶振速度的計算:
如果是標準12M時鐘,1200Kps波特率,則計數(shù)值為1/1200*7 = 5833uS,數(shù)值也為5833。將八次技術求平均(假設為18 94=6292),則此時單片機時鐘頻率=6292*12M/5833 = 12.994MHz。
評論