STM32 USB DFU設備固件升級 工程講解


說到STM32 USB的UDF,其實就是我們常說的IAP(In Application Programming)在應用編程。IAP有很多方法,我之前就用過串口IAP,網絡IAP。而這里我們使用的是USB IAP,就是通過USB更新代碼。所以這里有必要線了解IAP。

IAP是In Application Programming的首字母縮寫,IAP是用戶自己的程序在運行過程中對User Flash的部分區域進行燒寫,目的是為了在產品發布后可以方便地通過預留的通信口對產品中的 固件 程序進行更新升級。
通常在用戶需要實現IAP功能時,即用戶程序運行中作自身的更新操作,需要在設計固件程序時編寫兩個項目代碼,第一個項目程序不執行正常的功能操作,而只是通過某種通信管道(如USB、UART)接收程序或數據,執行對第二部分代碼的更新;第二個項目代碼才是真正的功能代碼。這兩部分項目代碼都同時燒錄在User Flash中,當芯片上電后,首先是第一個項目代碼開始運行,它作如下操作:
1)檢查是否需要對第二部分代碼進行更新
2)如果不需要更新則轉到4)
3)執行更新操作
4)跳轉到第二部分代碼執行
第一部分代碼必須通過其它手段,如JTAG或ISP燒入;第二部分代碼可以使用第一部分代碼IAP功能燒入,也可以和第一部分代碼一道燒入,以后需要程序更新是再通過第一部分IAP代碼更新。
對於STM32來說,因為它的中斷向量表位於程序存儲器的最低地址區,為了使第一部分代碼能夠正確地響應中斷,通常會安排第一部分代碼處於Flash的開始區域,而第二部分代碼緊隨其后。
在第二部分代碼開始執行時,首先需要把CPU的中斷向量表映像到自己的向量表,然后再執行其他的操作。
如果IAP程序被破壞,產品必須返廠才能重新燒寫程序,這是很麻煩並且非常耗費時間和金錢的。針對這樣的需求,STM32在對Flash區域實行讀保護的同時,自動地對用戶Flash區的開始4頁設置為寫保護,這樣可以有效地保證IAP程序(第一部分代碼)區域不會被意外地破壞。
接下去講講STM32 USB DFU的工程。官方工程如下圖:
STM32 USB DFU設備固件升級 工程講解 - ziye334 - ziye334的博客
 
主要是User這個組文件,我們可以將它們分分類。顯然,usb開頭的文件為一類,即usb_desc.c、usb_prop.c、usb_pwr.c,hw_config.c也可以算跟它們一類的,跟之前文件相比少了usb_io.c和usb_endp.c,因為這里沒有用到端點0以外的端點,所以這兩個文件沒有必要。接下去是dfu_mal.c、flash_if.c、fsmc_nor.c、nor_if.c、spi_if這幾個文件屬於一類,都是跟存
  儲器才相關的,我們如果只用到某個存儲器,添加相關的代碼就可以了。剩下的文件,就算一類吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM