久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4156|回復: 1
打印 上一主題 下一主題
收起左側

[轉帖]我自己小站上的對STC89系列下載協議的分析

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

這篇文章主要介紹STC單片機的下載協議。

關于STC的下載在Linux平臺下面一直是一個老大難的問題。我最近一段時間去ourdev網站,和數碼之家,包括有一些熱心人的協助。以及一些前人開發的開源軟件,類似gSTC-ISP之類的軟件。才讓我完全的搞懂了STC的ISP協議。

本文以GPL v3條款發布。但是切勿胡亂傳播。影響宏晶的利益。這個逆向工程做的并不妥當。望宏晶包涵,畢竟你并未公開協議。導致我們使用Linux的人痛苦不堪。

現在先放出用Gambas寫的兩個ISP軟件。分別對應89系列和12系列。15系列正在分析。別的系列因為不常用暫無協議。

SerialPort  kSTC89-ISP

那么呢,我就先從STC89系列的講起。大同小異的。

STC89系列的單片機在上電的時候會執行在ISP FLASH的ISP程序。只要在串口上收到連續的0x7f,便會進入ISP模式。老姚選擇 0x7f的理由是里面沒有連續的低電平。這樣的話就可以讓單片機來調整自身UART的時鐘到計算機的時鐘,讓波特率同步。但是若頻率太高,則測不準。所以 啟動波特率要控制在9600以下為宜。

而且均有時間限制。如果不在超時時間內連接MCU。MCU會自動斷開,跑用戶程序。這就是為什么某些芯片,類似PL2303打開關閉速度慢的芯片下載容易出問題的原因。

切入正題:

STC的數據包格式為:

包頭 2BYTE+標識 2BYTE +長度 1BYTE +包類型1 BYTE+數據 nnBYTE+校驗碼 1BYTE+包尾1BYTE。

包頭固定0×46,0xb9.(但是在信息幀中不包含包頭

標識來自單片機的是68 00

而來自計算機的是6A 00

包尾固定0×16.

至于我這里捕獲的標識,在89系列里大概有

0×00 ——信息(注意,這里沒有包頭)

0×00 ——數據(這個是切換波特率以后的

0x8F ——新波特率實驗

0x8E ——波特率正式更改

0×84 ——擦除芯片

0×80 ——校驗返回

0x8D ——設置選項并且結束編程

0×80 ——(結束時,上位機)結束編程,通知MCU復位。

0×80 ——暫時未知(交互中的,不影響下載)

通訊的交互過程

PC =》開啟0x7f MCU

MCU=》信息 PC

PC=》計算重載值,波特率測試 MCU(發送完立馬要切換波特率到計算值) MCU

MCU =》確認波特率測試 =》PC

PC=》(切換回原波特率)波特率正式改變 MCU

MCU =》(切換到計算值)確認

PC=》未知

MCU=》確認

PC=》擦除

MCU =》 確認

PC=》寫入數據包

MCU =》確認

PC =》設置選項

MCU =》確認

PC=》退出編程

MCU =》返回。

校驗和的算法就是除了包頭,包尾,校驗和,其他統統加起來,取低八位(STC89)或者低16位(STC12)。

—————————–大致的通訊過程如上,現在從信息幀講起—————————-

信息幀是類似這個的信息(注意,沒有包頭):

68 00 3B 00 14 DA 14 DA 14 DA 14 DA 14 DA 14 DA 14 DA 14 DA 43 43 FD F0 02 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 16

其中數據部分的Byte 4 ~ 19均為測量PC的脈寬,而按照脈寬計算CPU的速度的公式為:

fOSC=脈寬 *波特率 * 12 /7,依次可以計算出MCU可以用的最高波特率。

后面的0×43 0×43代表MCU固件是4.3C.

緊跟的0xFD代表選項信息:

x x x x x x x x
8 7 6 5 4 3 2 1
3=需要短接P1.0/P1.1 才能下載 1=關閉,0=開啟
6=ALE腳,0=P4.5,1=ALE
8=停止看門狗,1=復位關,0=停電關
7=允許訪問內部AUX RAM,1=允許,0=不允許
4=下次下載擦DATAFLASH,0=開,1=管
5=時鐘增益,1=高,0=低
1=時鐘倍速,1=12T,0=6T

然后,PC需要計算出MCU最高可用波特率。但是這里STC89系列比較的奇怪。因為在11.0592M的晶振下,居然能跑到115200的波特率。但是用傳統公式計算。最多就57600.
似乎是倍頻再倍頻,也就是原來是/16的現在/8了。實在是奇怪。

01PUBLIC FUNCTION Calculate_load(Baud AS Integer, Crystal AS Long) AS String
02  'Crystal以HZ計單位
03  '12T函數
04  DIM reload AS Byte
05  DIM Baud0 AS Integer
06  DIM v AS Long
07  '使用12T模式,加倍STC超級波特率
08  v = Baud * 32
09  reload = Int(256 - (crystal / v) + 0.5)
10  baud0 = ((crystal / 2) / (256 - reload) / 16)
11  TRY calc_error = Abs((Baud / baud0) - 1) * 10000
12  RETURN Chr(reload)
13END

看起來這個玩意的實現應該是靠軟件模擬的。但是具體的實現的話。我還是不清楚。畢竟現在老姚學聰明了。MOVC讀FLASH以外的地方均會導致復位……所以具體實現方式實在弄不清楚。

波特率實驗幀的數據部分是

FF 重載值 00 00 06 等待回應值 ISP定時常數

重載值的上面已經貼出GAMBAS的計算方式。對于PL2303芯片這種打開和關閉速度比較慢的串口,等待回應值我喜歡用0xE0。因為可以在比較快的速度下不出錯。ISP定時常數推薦使用0×81。我測試到50M的外部時鐘都不出問題。

然后PC必須在規定的時間內切換到新的波特率上,等待MCU的回應。

MCU的回應PC的幀一模一樣,只是標識和校驗和有差別。

然后再次重復。只不過不發送ISP定時值。

接著一番交互以后:

1Sent:46 B9 6A 00 0C 80 02 00 36 01 F0 02 21 16
2recv:46 B9 68 00 06 80 EE 16

 

這一段代碼似乎是固定的。

PC就會向MCU發送擦除命令。很簡單,直接順序發出去即可:

146 B9 6A 00 0D 84 02 33 33 33 33 33 33 2F 16

然后接受到MCU的回應后。發送ROM數據包:

ROM數據包的格式很簡單

0×00(標識)+0×00 0×00(填充) +高八位地址+低八位地址+0×00+長度(一般固定0×80,后面填充就OK了)+數據

然后MCU的回應也比較簡單:

146 B9 68 00 07 80 79 68 16

0×80是標識。

至于0×79就是寫入的時候返回的校驗和了。算法就是把上一次發送的數據部分用一次加法校驗和。

循環到終點,就發送設置選項命令:

146 B9 6A 00 0A 8D FD FF F4 FF F0 16

其中的0xFD君就是選項信息了。參見信息幀的介紹章。

等待MCU回應后,發送退出幀讓MCU復位。執行用戶程序。

STC89系列的先介紹到這里。


 萬致遠原創,轉載注明出處:http://www.rwzy.co.cc
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:276663 發表于 2018-3-2 10:17 | 只看該作者
看完還是頭大,可能是看的不仔細。
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美综合精品久久成人 | 盗摄精品av一区二区三区 | 国产区一区 | h视频免费在线观看 | 99久热在线精品视频观看 | 国产精品久久久久影院色老大 | 久久狠狠| 日本精品一区二区三区视频 | 国产精品久久久久久吹潮 | 日韩高清国产一区在线 | 91中文在线观看 | 日韩和的一区二区 | 日本福利在线观看 | 91一区二区三区 | 国产男女猛烈无遮掩视频免费网站 | 一级免费看 | 日韩区 | 91伊人网 | 在线免费观看成人 | 国产91成人| 精品国产乱码久久久久久图片 | 黑人精品欧美一区二区蜜桃 | 中文字幕一区二区在线观看 | 国产激情视频网址 | 欧美精品网站 | 国产精品av久久久久久毛片 | 亚洲综合色自拍一区 | 亚洲成人免费观看 | 午夜欧美日韩 | 影音av | 99综合 | 日本午夜免费福利视频 | 日韩视频一区二区 | 久久久久一区二区三区四区 | 成人日韩精品 | 欧美一区不卡 | 无码一区二区三区视频 | 久久精品亚洲精品国产欧美 | 亚洲三区视频 | 亚洲欧美综合精品久久成人 | 亚洲v日韩v综合v精品v |