相信很多人都希望,不開蓋就可以對固件進行升級吧,就像手機那些。下文中的bootload就來實現這樣的功能。
前段時間有項目關于Bootload設計。所以就仔細的去了研究了一翻。以前都是用的stm32官方的,沒有去深入了解。這次做完了過后,發現官方的版本存在一些問題。比如說YModem傳送過程中,完全沒有對數據區進行效驗,只是核對了下編號,就進行燒寫。整個程序完全為阻塞式,浪費了大量的cpu做無用功。當然這在升級程序方面也用不了多少時間。有一個重要的問題,官方代碼只可以用超級終端進行傳輸。這樣如果你用的是64位的win7,那就沒有辦法升級。因為只有xp或32位的win7才可以使用 超級終端。64位的win7下超級終端沒辦法使用。 不過SecureCRT工具到是可以在64位win7使用,但是官方代碼不對其支持。SecureCRT下支持的是最原始的YModem協議,第一幀數據包中不包含總字節數。超級終端下的YModem應該是改進版的,所以官方的dome只可以在超級終端下傳輸。下面會對YModem進行詳細說明。就會知道其中的原因。
首先奉上一個精簡的Bootloader工程。
http://pan.baidu.com/share/link?shareid=373630&uk=118334538
支持協議:YModem, YModem-G。
所支持的PC軟件:超級終端,SecureCRT。
http://pan.baidu.com/share/link?shareid=373637&uk=118334538
YModem協議: YModem協議是由XModem協議演變而來的,每包數據可以達到1024字節,是一個非常高效的文件傳輸協議。下面有一些相關的文檔。這里要感謝關注我微博的一些朋友提供的資料。省去了不少時間。
下面先看下YModem協議傳輸的完整的握手過程:先看下圖
SENDER:發送方。
RECEIVER:接收方。
第一步先由接收方,發送一個字符'C'
發送方收到'C'后,發送第一幀數據包,內容如下:
SOH 00 FF Foo.c NUL[123] CRC CRC
第1字節SOH:表示本包數據區大小有128字節。如果頭為STX表示本包數據區大小為1024
第2字節00: 編號,第一包為00,第二包為01,第三包為02依次累加。到FF后繼續從0循環遞增。
第3字節FF: 編號的反碼。 編號為00 對應FF,為01對應FE,以此類推。
第4字節到最后兩字節:若第1字節為SOH時有128字節,為STX時有1024字節,這部分為數據區。“Foo.c” 文件名, 超級終端下,在文件名后還有文件大小。官方dome也是因為使用了這個文件大小進行比對。這就是為什么用SecureCRT中的YMODEM協議而無**確傳輸的原因。
在文件名和文件大小之后,如果不滿128字節,以0補滿。
最后兩字節:這里需要注意,只有數據部分參與了效CRC驗,不包括頭和編碼部分。
16位CRC效驗,高字節在前,低字節在后。
接收方收到第一幀數據包后,發送ACK正確應答。
然后再發送一個字符'C'。
發送方收到'C'后,開始發送第二幀,第二幀中的數據存放的是第一包數據。
接收方收到數據后,發送一個ACK然后等待下一包數據傳送完畢,繼續ACK應答。直到所有數據傳輸完畢。
數據傳輸完畢后,發送方發EOT,第一次接收方以NAK應答,進行二次確認。
發送方收到NAK后,重發EOT,接收方第二次收到結束符,就以ACK應答。
最后接收方再發送一個'C',發送方在沒有第二個文件要傳輸的情況下,
發送如下數據
SOH 00 FF 00~00(共128個) CRCH CRCL
接收方應答ACK后,正式結束數據傳輸。
以上部分,為YMODEM協議的基本操作流程。
STM32 Bootloader軟件設計
筆者一開始軟件的基本思想,串口接收數據,和寫數據到ROM中,兩者可以同步進行。這樣可以讓cpu得到最大程度的有效利用。
比如說接收一幀1024的數據,所用的時間= 當前波特率單字符所用時間 * (1024 + 1頭 + 2編碼 + 2CRC)= (1/115200 * 10) * (1024 + 1 + 2 + 2) = 89.323ms
也是就是,在接收的這90ms左右的時間里,在接收下一幀結束這一期間內,可以把上一幀的數據寫入到ROM中。 串口接收數據是中斷的方式,所以收寫操作基本上算同步運行。程序流程如下
STM32 Bootloader使用方法:
這個STM32 Bootloader程序使用起來很簡單,如果你以前沒有用過IAP升級方式,也沒關系下面會詳細說明。
準備工作:
硬件:有串口目標板1,串口連接線。
軟件:PC工具:超級終端 或SecureCRT,stm32目標板程序.bin,stm32 Bootloader。
1) 先把上面的工程stm32 Bootloader下載到目標板中;
2) 打開超級終端 或SecureCRT,設置波特特115200,停止位1,數據位8,效驗無。
3) 先按下‘C’再給目標板上電;(注意先后順序)
4) 選擇1,然后使用YModem, YModem-G協議發送"stm32目標板程序.bin"文件。
5) 傳輸完畢后,會自動運行。
注意:以下兩處根據自己的需求調整
stm32 Bootloader修改:
找到工程下的common.h文件:
以下三個宏定義根據自己目標板的需求來定:
#define ApplicationAddress 0x8002000 //程序首地址
#define ApplicationSize 120000 //目標程序預留空間
#define STM32F10X_HD //目標板芯片類型
stm32目標板程序.bin偏移地址修改:
有兩個地方:
1找到system_stm32f10x.c
#define VECT_TAB_OFFSET 0x2000 /*!< Vector Table base offset field.
上一篇:STM32 YMODEM實現bootloader
下一篇:STM32串口IAP(YModem)
推薦閱讀
史海拾趣
進入21世紀后,隨著信息化和智能化技術的快速發展,Eagle Plastic Devices公司開始積極推動數字化轉型和智能制造。公司引入了先進的信息化管理系統和智能生產設備,實現了生產過程的自動化和智能化。這不僅提高了生產效率和產品質量,還降低了生產成本和人力資源投入。同時,公司還利用大數據和人工智能技術優化供應鏈管理、市場營銷等方面的工作,進一步提升了公司的綜合競爭力。
Fanstel公司自成立以來,一直將技術創新視為發展的核心驅動力。在成立初期,公司面臨技術瓶頸,產品性能難以滿足市場需求。然而,公司研發團隊通過不懈努力,成功突破了一項關鍵技術,推出了一款具有行業領先水平的新型通信設備。這款產品的推出不僅為公司贏得了大量訂單,也奠定了Fanstel在電子行業的技術領先地位。
Elite公司成立于20世紀90年代末,由一群熱衷于電子技術的年輕人創立。在初創階段,Elite面臨著資金短缺、市場競爭激烈的挑戰。然而,公司憑借其獨特的創新理念和過硬的技術實力,成功研發出一款具有高性價比的智能手機,迅速在市場上獲得認可。這款產品不僅幫助Elite實現了初步盈利,更為公司后續發展奠定了堅實基礎。
隨著科技的不斷發展,電池行業也在經歷著深刻的變革。B.B. Battery公司緊跟時代步伐,不斷加大技術創新力度。他們引進先進的生產設備和技術,研發出更高效、更環保的電池產品。同時,公司還注重與高校、科研機構的合作,共同推動電池技術的創新與發展。這些努力使得B.B. Battery公司的產品在市場上具有更強的競爭力。
DILABS公司成立于XX世紀初,由一群熱衷于電子技術的工程師創立。在公司初創時期,他們面臨了資金短缺、技術瓶頸和市場競爭等多重挑戰。然而,他們堅持創新,經過無數次實驗,終于在芯片封裝技術上取得了突破。這一突破性的技術為DILABS贏得了業界的關注,也為公司的發展奠定了堅實的基礎。
隨著國內市場的飽和,Engelking Elektronik開始尋求海外市場的發展。公司制定了詳細的國際化戰略,包括參加國際電子展會、拓展海外銷售渠道以及建立海外生產基地等。通過不斷努力,Engelking Elektronik成功進入了歐洲、北美和亞洲等多個國家和地區的市場。同時,公司還積極適應不同地區的文化和市場需求,提供定制化的產品和服務。
這里介紹一個設計小巧、線路簡單但性能不錯的三管音頻放大器。其電路見附圖。也許你在一些袖珍晶體管收音機可以看到一些與此類似的電路。 原理分析: 電路如圖所示,輸入極(9014)的基極工作電壓等于兩輸出極三極管的中點電壓,一般為電源電 ...… 查看全部問答∨ |
|
我用51控制8253進行計數工作,片選接P24,A1A0通過373接P00P01,以下是我的總線方式 #define cnt0_8253 XBYTE[0xe0f0] #define cnt1_8253 XBYTE[0xe0f1] #define cnt2_8253 XBYTE[0xe0f2] #define ctrl_8253 XBYTE[0xe0f3] 我的計數器可以選到, ...… 查看全部問答∨ |
我的電腦(臺式)上裝progisp167的USB驅動裝不上,為什么? 我是從www.zhifengsoft.com上下載的,解壓后不管是直接右擊usbprog.inf安裝還是插設備在向導里安裝,都裝不上。可是,同事的筆記本就能裝! www.zhifengsoft.com的網站上也沒有說怎么回 ...… 查看全部問答∨ |
我想買一臺2440的GPS用來改裝其他用途,要使用到幾個IO和串口。大家覺得行得通嗎? 還有,是不是把JTAG接口找出來,使用并口將win ce的bootLoader寫入,然后用USB寫入win ce系統就可以了。… 查看全部問答∨ |
|
尋找商業投資戰略合作伙伴,目前有大量國際資本操作 ,已經在國內。擬項目:擬在廣西南寧市建立國內外匯市場投資機構。模式是以核心固定交易模式技術與交通銀進行合作,運用核心技術和私募國際資本獨立進行全球金融-外匯市場投資,也涉及黃金 股指 ...… 查看全部問答∨ |
發送\"at\\r\\n\",讀取的是\"at\\r\\n\\r\\nOK\\r\\n\",不僅是\"\\r\\nOK\\r\\n\",讀取的包括寫入的,at指令都是這個原理的嗎?… 查看全部問答∨ |