2015-01-15 76 views
1

我有一個連接到Android(4.4)USB主機端口的STM32F4微控制器。我想從Android設備上對微控制器進行固件升級。Android的STM32器件固件升級(DFU/DfuSe)

===================       =================== 
| Android 4.4 | <=======================> | STM32F405xx | 
|  Device  | USB Host  USB Device | Microcontroller | 
===================       =================== 

傳統,STM32微控制器可以使用稱爲DfuSe Utility的PC工具由ST提供的升級固件。但我需要從Android設備上執行此操作。提供了他們工具的來源。

問題:

  1. 可以用於微控制器固件使用Java標準USB Host libraries從Android的升級?
  2. 或者是否需要使用NDK來完成此操作,並將端口DfuSe來源?如果是這樣,那麼應使用哪個庫從NDK訪問USB?

應該採取哪個方向,如何做到這一點?

+0

NDK的有可能使事情變得更難,而不是更容易。最有可能的是你可以做你需要的東西,問題是如果在這種情況下你需要在枚舉後很快與設備開始對話,但是我不相信這種情況,因爲我不相信工廠ROM USB引導程序有一個超時。另一個可能的挑戰是,DFU模式設備可能會向用戶展示來自ST的產品,而不是您的產品(liu_tanyi的定製引導加載程序確實有其優勢)。 –

+0

是的你是對的。在DFU模式下,STM32器件顯示不同的產品ID('PID')。如果這些都可以從Java完成,我會非常高興。我最初的想法是使用像這樣的控制傳輸:'mConnection.controlTransfer(requestType,request,value,index,buffer,length,length,timeout);'這是一個很好的解決方法嗎? –

回答

0

在我的項目中,我只是將STM32編程爲虛擬COM端口設備,並定義一組簡單的通信協議來擦除/寫入STM32的內部閃存。我認爲你可以爲Andriod做同樣的事情,但我不知道在android中是否有現有的虛擬COM端口驅動程序。

但是不管怎麼樣,一旦你可以向STM32發送一個字節,你可以讓它自己編程。引導加載程序的基本功能非常簡單,只需接收數據並將它們寫入應該的位置即可。

+0

確實如此,實際上可能更簡單。雖然工廠ROM USB加載程序確實具有在安全性方面的優勢(在存在的芯片上),從而避免了意外刪除 - 也就是說,該設備不像開發人員創建的引導加載程序那樣可以嵌入。另一方面,使用您的方案時,產品在枚舉升級時保持其自己的身份,而不是顯示爲ST DFU設備。 –

+0

謝謝我從來沒有考慮過這種方法。我目前通過簡單的HID接口通過USB與STM32設備進行通信。我可能會發送二進制文件並讓設備自行刷新。你可以給你一些指導,告訴你如何傳輸,存儲和命令STM32重新刷新自己?你能指點我一些好的資源和代碼嗎? –

+0

有一個關於自動閃爍的ST應用筆記;他們喜歡修改他們的websute,所以你需要自己找到當前位置。 –