1. 程式人生 > 實用技巧 >基於Ymodem協議的STM32串列埠IAP的實現(IAP + APP + 上位機)

基於Ymodem協議的STM32串列埠IAP的實現(IAP + APP + 上位機)

基於Ymodem協議的STM32串列埠IAP的實現(IAP + APP + 上位機)

HavenXie關注

0.1832017.06.05 00:35:09字數 1,373閱讀 10,038

1.什麼是IAP?

IAP:In Application Programming 是指在應用程式設計,即在程式執行中程式設計,就是片子提供一系列的機制(硬體/軟體上的)當片子在執行程式的時候可以提供一種改變flash資料的方法。通俗點講,也就是說程式自己可以往程式儲存器裡寫資料或修改程式。這種方式的典型應用就是用一小段程式碼來實現程式的下載,實際上微控制器的ISP功能就是通過IAP技術來實現的,即片子在出廠前就已經有一段小的bootloader程式在裡面,片子上電後,開始執行這段程式,當檢測到上位機有下載要求時,便和上位機通訊,然後下載資料到儲存區。

2.與ISP的區別

線上程式設計目前有兩種實現方法:在系統程式設計(ISP)和在應用程式設計(IAP)。ISP一般是通過微控制器專用的序列程式設計介面對微控制器內部的Flash儲存器進行程式設計,而IAP技術是從結構上將Flash儲存器對映為兩個儲存體,當執行一個儲存體上的使用者程式時,可對另一個儲存體重新程式設計,之後將控制從一個儲存體轉向另一個。ISP的實現一般需要很少的外部電路輔助實現,而IAP的實現更加靈活,通常可利用微控制器的序列口接到計算機的RS232口,通過專門設計的韌體程式來程式設計內部儲存器。

3.為什麼要用IAP

STM32F1XX微控制器在出廠前,固化了ISP自舉程式,挺強悍的,至少我覺得,因為人家還自適應波特率呢,才2KByteROM+512ByteRAM。上位機下載軟體現成的,也不用自己操心了。不過呢,需要boot0跳線進入,詳見文件 RM0008晶片參考手冊第2章 和 AN2606系統記憶體引導模式。那我就要在我明亮的殼子上打個白米粒大的洞,然後就像路由器那樣,拿牙籤捅啊捅的。還有,就是把HEX檔案釋出讓客戶自己升級,感覺不像回事,老闆也會擔心他們抄東西(其實沒有什麼是安全的啦)。所以,不需要拆機就能對產品進行韌體升級是很多人想要的效果,不僅方便而且節省精力和成本。

4.如何設計IAP

經過上面的介紹我們知道完整的IAP應該包括三個部分:1.boot 2.user app 3.上位機控制端。

在做之前在網上查了很多資料,要不就是空空而談如何如何實現要不就是隻有一個boot程式碼,就是找不到整套的資料,這可能與整個電子行業的封閉有關。在這方面真的要學學網際網路的開源精神。

當然啦,也有很多優秀的文章,這裡給大家傳送門:

基於Ymodem協議的IAP上位機(C#)

獻醜之STM32F微控制器IAP方法

所以我決定將這個專案開源出來,整個專案包括三套程式碼。

  1. boot部分:可用於stm32f1xx平臺,幾乎不需要修改程式碼,只需要根據你的MCU簡單的配置一下工程檔案就好了。(我的平臺是stm32f103ze)

  2. app部分:其實就是你需要實現產品功能的部分。我這裡採用了usmart框架,用它的原因主要是方便和boot部分以及上位機部分進行通訊。這部分目前做的比較少,之後會將他抽象出來。

  3. 上位機部分:前面兩個部分執行在MCU內部用的是C程式設計。這部分執行在windows平臺用的是C#,基於 .net4.0。你可以很方便的將它移植到你的專案中。

5.乾貨在哪裡

說了這麼多,是時候show my code了。我把程式碼都託管在github上了(之後會放到csdn上面),每套程式碼都有說明文件(請按照下述編號看起)。但是文件不夠詳細,之後會豐富。目前測試的平臺比較少,希望大家可以一起來測試提交bug,一起來完善。

  1. boot部分程式碼

  2. app部分程式碼(支援usmart的重量版)
    app部分程式碼(簡潔的輕量版)

  3. 上位機程式碼

6.還需要去做什麼

  • 實現aes檔案加密

  • 實現一邊接收資料一邊寫入資料

  • 實現可更改每包資料大小(目前每包是1024位元組)

    • 已經實現32Byte、64Byte、128Byte、256Byte、512Byte、1KByte可選(2017.6.11更新)
  • 實現藍芽串列埠iap

    • 我採用HC-08藍芽透傳模組(BLE型別),在32Byte和64Byte的情況下可以實現藍芽串列埠iap(跟藍芽模組有關,建議不要使用BLE型別的,它的延時較高。2017.6.11)
  • 增加spi介面和i2c介面的iap(目前是uart介面)

7.誠邀有興趣的小夥伴一起來。。。

更新時間20170605

更新時間20170611

9人點贊

日記本