USB-DFU上位機(jī)軟件實(shí)現(xiàn)hex文件轉(zhuǎn)dfu文件

為什么做這個(gè)?

上段時(shí)間做了個(gè)STM32串口IAP的開源項(xiàng)目,在實(shí)際項(xiàng)目中如果采用uart或者485等進(jìn)行數(shù)據(jù)通信那么采用串口IAP進(jìn)行固件升級(jí)將會(huì)是個(gè)很好的選擇,但是有的時(shí)候我們的產(chǎn)品或者項(xiàng)目不是用的串口而是用的USB和上位機(jī)進(jìn)行通信,那么這時(shí)候就沒必要用USB轉(zhuǎn)串口工具進(jìn)行協(xié)議轉(zhuǎn)換了,這樣不僅存在風(fēng)險(xiǎn)而且增加成本。所以很多時(shí)候會(huì)采用USB的HID、CDC等子類進(jìn)行數(shù)據(jù)通信,在這種情況下進(jìn)行固件升級(jí)就會(huì)優(yōu)選DFU方式了。什么是dfu? 準(zhǔn)確的說它也是IAP的子集,只不過我們常認(rèn)為的IAP是通過串口,而dfu是通過USB而已。

通過dfu進(jìn)行升級(jí)需要使用.dfu文件,ST官方提供了將.hex文件或者.bin文件轉(zhuǎn)成.dfu文件的工具,最新的版本是DfuSe—v3.0.4(可以從官方下載),我下載安裝之后發(fā)現(xiàn)并不能將.hex轉(zhuǎn).dfu 總是提示我文件錯(cuò)誤。還有一個(gè)問題就是.bin生成.dfu之后保存的位置總是不對(duì)。這真的不能忍呀,于是就直接看官方的MFC源碼開始跳進(jìn)了解BUG的坑。。。

我做了些什么?

基于ST官方所提供的DfuSe_v3.0.4版本。

特色:

  • 1.解決ST官方版本無法將.hex格式文件直接轉(zhuǎn)換成.dfu格式文件的痛點(diǎn)。

  • 2.解決ST官方版本保存生成的目標(biāo)文件之后文件找不到的BUG。

官方v3.0.4使用的是低版本vs,我這里使用的vs2017最新版,如果你要對(duì)源碼進(jìn)行修改請(qǐng)安裝相關(guān)環(huán)境。

干貨呢?

所有文件都放在github上了,點(diǎn)擊這里就會(huì)看到

目錄結(jié)構(gòu)

  • "Bin": 這里是生成好的最終可以直接使用的目標(biāo)文件,如果你對(duì)源碼不感興趣可以丟棄源碼只使用這里的可執(zhí)行文件就夠了。包括:

    • "DfuFileMgr.exe": 對(duì),這個(gè)就是能把hex文件直接轉(zhuǎn)換成dfu的神器了。

    • "DfuSeDemo.exe": 這個(gè)可執(zhí)行文件就是對(duì)下位機(jī)進(jìn)行固件升級(jí)的上位機(jī)工具了。

    • "DfuSeCommand.exe": 這個(gè)是腳本啦,就是給你提供命令行的方式去dfu升級(jí)固件,其實(shí)在真正的項(xiàng)目中不會(huì)使用DfuSeDemo.exe工具進(jìn)行固件升級(jí)的,你想呀,你要是把DfuSeDemo.exe丟給客戶,哪個(gè)客戶能忍受得了?都是直接把這個(gè)腳本嵌入到你的客戶端應(yīng)用中去神不知鬼不覺的升級(jí)。

    • "STDFUTester.exe": 這個(gè)跟你沒有半毛錢的關(guān)系,不要去操心。

    • ".dll": 這個(gè)就是上面4個(gè)exe文件運(yùn)行所需要的動(dòng)態(tài)鏈接庫,不能少了。

    • "Doc": 這是ST官方提供的說明文檔,反正我是懶得看,也看不懂。

    • "Driver": 這個(gè)東西很重要,有的電腦自帶DFU驅(qū)動(dòng),但有很多就不行,所有這里提供了DFU的驅(qū)動(dòng)。根據(jù)的你電腦選擇對(duì)應(yīng)的驅(qū)動(dòng)安裝就好了。如果你是win10,并且沒有自帶驅(qū)動(dòng),那么你就試試win8的驅(qū)動(dòng)吧。

    • "version.txt": 你懂得

  • "Sources": 看名字就知道這是源碼了??梢蕴崆案嬖V你這是基于C++的MFC程序,如果你沒玩過MFC那就盡量遠(yuǎn)離吧,避免濺你一身血。。。

  • "keilkill.bat": 這是dos的腳本程序,因?yàn)榫幾g代碼后會(huì)生成很多鏈接庫或者中間文件之類的東西,很占用存儲(chǔ)空間。所以就寫了個(gè)腳本,當(dāng)你編譯完成之后退出vs然后雙擊執(zhí)行這個(gè)腳本就會(huì)把那些垃圾清除了。

  • "test.bin和test.hex": 沒啥用,就是給你做測(cè)試用的。

代碼工程打開的正確方式

用VS打開Sources文件夾下的DfuSe.sln,這個(gè)就不用我教你了吧。
(前4個(gè)要按照順序)

  1. 重新生成STTubeDevice30
  2. 重新生成STDFU
  3. 重新生成STDFUFiles
  4. 重新生成STFUPRT
  5. 之后就可以將DfuFileMgr、DfuSeDemo、DfuSeCommand中的任意一個(gè)設(shè)置為啟動(dòng)項(xiàng)進(jìn)行啟動(dòng)了。
  6. 根據(jù)你的期望去實(shí)現(xiàn)你的小目標(biāo)吧。

接下來有什么打算

  1. 將DfuFileMgr.exe做成腳本的形式,這樣當(dāng)Keil編譯完成生成hex文件之后自動(dòng)的去調(diào)用腳本生成dfu文件。就不用再用鼠標(biāo)在那點(diǎn)呀點(diǎn)呀的了。

  2. 這一項(xiàng)還沒想到。。。。。。。

更新日期

2017/06/17

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容