2013年10月3日 星期四

USB HID Class BootLoader DIY (一)--- 前言

這一系列的USB DIY 應該算是USB DIY 系統應用中的"最後一哩路"。

怎麼說呢?!因為一般會使用USB 來搞一些系統應用中,常常可能因為在系統應用上,

針對未來日趨複雜或不可知的系統應用需求,有可能要有隨時更新USB 本身的

控制韌體程式的問題。當然啊~您也不可能一天到晚都在Recall 把您賣出去的


USB 系統,常常叫回來更新程式啊...現在講求雲端應用時代,當然程式更新

就得要有雲端或遠端更新的功能啊。這一種東西也有人稱為"韌體智能升級",

就是所謂的 ISP  (In-System Programming)。

那要如何做到"韌體智能升級"呢?!最重要的當然就是要您發展第一版韌體中,

就要把這個功能的韌體建在您的第一版的韌體程式中:我們一般也俗稱他就是

Bootloader 程式。這跟一般燒錄MCU 的ISP 不同,一般燒錄MCU 的ISP是在

MCU 在停止工作下,譬如我們把他的RESET 腳拉住,然後再進入所謂的JTAG 或是

每一家MCU 自己制訂的通訊協定下進行程式更新燒錄。

但這一種"韌體智能升級"的Bootloader 就得要藉助韌體本身的運作程式來完成

韌體程式功能:說起來是有一點要自廢武功。當然您也可以說:

"欲練神功,必先自宮"...哈~哈~ .........
---

當然這些所謂的神功也沒有要做到必先自宮的作法那麼恐怖啊...有些"韌體智能升級"

的Bootloader 也不會搞得那麼恐怖或冒那麼大的風險...他的作法也可以做得很安全,

"韌體智能升級"失敗~至少還可反覆燒錄升級啊...只要您不要把自己的Bootloader 程式

搞死就可以了。

當然啊~這樣子的作法是會比較浪費一點程式韌體的資源,譬如他的ROM size 會被犧牲,

或是會佔去一些記憶體或相關周邊資源。如果您的程式韌體的功力好的話,您可以

做得很省ROM Size ,甚至每一版韌體之間都可以完全不同,搞得每一次更新程式

就像是一棵剛出廠的MCU 處女般的完美如初。

像我一開始發表USB DIY 時所提到的 GT6816  故事:USB DIY 講座(七)-- USB Controller

他就是完全可以自廢武功的更新程式...這些更新方法稍後我們都會再提及的。

----
當然我也不可能用那一種冷門又高深莫測的 USB MCU 來講解USB HID Bootloader ,

我還是用一般市面上容易取得的USB MCU 來說明。

當然啊~這些USB MCU 的原廠也會發表一些類似的系統應用的參考文件或範例

來供您快速的導入系統應用。您也可以用力的搜尋與下載...但他不保證您馬上可以

使用的~至少我的經驗是如此。

譬如:以我常用的C8051F321 MCU 來講:原廠網站上提供的資料是:

http://www.silabs.com/Support%20Documents/TechnicalDocs/AN200.pdf

一來他不是一般的HID Class ,第二個他的PC 端應用範例程式掛了一大堆Library...

連韌體程式也是...您說:您會想用?!當然啊~這一篇文章中也有提到許多

Bootloader 的作法與在系統應用上需要考慮的地方,還是值得一讀的啦!

那要怎麼辦?!其實,原廠也有提供真正USB HID Class 的範例....

但很不幸的是~在官方網路上沒有公布。不信的話...您可以打電話到原廠的

FAE 支援單位問問...看他們會不會給您?!但也很不幸的是:他的USB HID CLASS

範例用的是:C8051F340 ...哈~這一棵原廠已經建議用F380 取代了!

另外~我也可以直接跟您說:那個範例也不能直接跑起來...問題也是一堆,

還是要自己花時間整理重寫一下。

所以啦~大家還是忍耐一下,就把這最後一哩路,陪著大家一起走完吧~

當然啊~很重要的一件事是:這一系列的文章不會在別的部落格出現,

也因為Yahoo 部落格即將關閉,雖然我也別的備份Blog ...但這一系列文章

我應該只會寫在這裡而已,那就委屈大家一下了囉....

另外就是:當我整理完這一系列文章之後,我怕我也沒有多的時間在玩這些

有的沒有的啦~老大不小了~還是得找些正經事來做,再不然也要多花一點時間

多陪陪賈老師...這幾年也辛苦她了。

謝謝各位。

(待續)



2 則留言:

  1. 原廠給的USB HID bootload程式~竟然是不使用ISR的方式做~我當初看了也滿傻眼的~只要稍微改動一下~所以的時序都亂了~那就連裝置列舉都不行了~滿無言的~
    不過~這一切都是歷史了~因為現在的MCU幾乎都有獨立Flash 空間來做儲存Bootload code了~真的不用像之前那樣還要切割flash空間來儲存~還要考慮INT Vector的判斷oxoxox等問題~ 不過這卻也是學習8位元微處理的精隨阿~

    回覆刪除
    回覆
    1. ?!...我們講的是同一支範例程式嗎?...那您當初怎麼也不寫篇文章來討論一下。
      其實,好好的研究一下這一支程式,對於一些寫程式或瞭解一般MCU 架構真的有很大的助益。

      刪除