會員登入 新使用者?立即註冊

學無止境--- 無論是電子技術或是以外的領域---溫故知新,精益求精。還有賈老師的作品,可以讓我這個充滿科技,較生硬的部落格有一點人文的氣息!---- 賈老師的真老公! -- -

關閉
你好,歡迎參觀ChamberPlus的部落格! 我要留言

USB DIY-- 自學計畫(一)

分類:USB DIY
2008/11/25 14:39

想跟版主重新學新的USB Controller 的人有福了,因為版主最近會嘗試使用另一家

USB Controller 了,所以,就藉由這個機會跟大家分享一下這個USB DIY 的自學計畫。

而版主預計整個自學計畫預估約為期一個月。我也不敢誇口說那種"30 天學會 USB "!

這種賣書廣告啊...就等我有機會出書時,再寫啦。

但是我希望這是一個目標...而既然是目標,當然就要努力去達成,

而達成的目標的過程是需要方法與一定的程序的,在正確的方法與程序指導之下,

方可順利達到目標!接下來所要記錄的,便是這一過程。

-------------------------------------------------------------------------------------

首先當然要稍微K一下原廠所提供的Datasheet ...不過,這一部份只要稍微瀏覽過一遍即可。

因為真正的使用還是得從實作中去體會比較快啦。(K 原廠的Datasheet 花個一天就可以了...

不要太浪費時間,不如等做過一遍再看,印象會比較深刻!)

一開始還是藉由原廠所提供的Demo 程式與環境去走一遍韌體與軟體。

這樣子就比較容易進入狀況。也避免走一些冤枉路。

軟體部分,前兩天有稍微提到原廠所提供的原始碼,這一部份是由C 語言的MFC 所寫的。

所以,應該還可以隨時接手,就暫時先擱一邊。

我們就從USB Controller 的韌體開始看吧。---

老話一句:工欲善其事,必先利其器。....我們先把輔助工具搞好再來看韌體會比較快。

------

我們都知道,不管您是哪一家的USB Controller ,他的USB Housekeeper 程式一定

Interrupt drive的韌體架構。只是每一家對於USB Token 所發的中斷會有所不同。

這是我們一開始要搞清楚的,否則啦...您會根本沒機會敢去改這一部份啊。

而接下來呢...您就根本就沒信心的進行下一階段的USB 學習了,自然您USB 就學不起來。

首先呢,您們或許都不知道:CATC 的USB 分析儀有一塊外接的Breakout Board:

我們看一下原始的使用手冊:

    到底這塊外接Breakout Board有何作用呢?!又該如何用呢?!...

很多人都不清楚,在此我就稍微說明一下,但是呢?!很不幸的。我也沒有這一塊版子。

以前問過原廠,他們也不鳥我,電路圖也找不到。...只好自己打開機器找一下電路,

我就自己DIY 作了一塊Breakout Board,看來還可以,不錯用的。

我們從原廠的使用手冊看到:他有提供四組User Signal Data input#0~3 !

這可以讓我們系統的控制訊號與他的分析軟體同步。---這是比示波器好用的地方。

他的接法很簡單:DB37 接頭 ...我只要拉上述的四條線就好了...其他的,

我是覺得要拉的機會也不大,因為我們不是要搞USB IC設計的。

而他們主要的四條分別如下圖所示:(看來我DIY的功夫還不錯哩!)連那條連接線也是自己作的!

好了...接下來我們來看一下:這塊版子神奇的地方。...

----

我們一開始要用哪一支原廠的範例程式呢?!...用HID?!用一般的自有的USB Driver ?!

以我個人的意見呢?!...應該是後者!---一般的自有的USB Driver。

走一般的 USB Control/Bulk Token 就好了!(雖然很多人會很怕啊!)

因為您必需先搞清楚整個韌體---驅動程式到PC應用程式。---否則,當您用HID class ,

劈哩八啦,架起來玩了一次,好像都可以用了 ...然後呢?! 整個USB 還是搞不太清楚!

然後呢...心裡的那個惰性會讓您不想再回頭看很基礎的 Control/Bulk 控制方式!

結果呢....您的USB 又是半桶水的拿不上台面上來作其他相關應用。

這是純個人意見,如果您覺得不妥,您還是可依照自己的方法學與搞USB!

原因是因為:Bulk Token 基本上是跟Control Token 很像的...

所以,對於PC 的 AP 端來說:是比較單純的...其實,韌體也是一樣的!

但是呢:HID 反而還要多一組Interrupt Token ,而且他是走HID  Class,

您還得去K 一下HID Class規格 ,搞得懂所有Report 的定義與用法,

一開始學USB 不用搞這麼複雜吧....一開始越單純,學得越快啊!

我提到的一個月...最終也會包括HID的....我自己認為那只是另一個很簡單的轉換而已!)

-----

好吧,我們來看這塊Breakout Board 好用之處:

首先我們先在韌體的USB 中斷程式的進入點加了一段I/O Toggle程式,

讓每一次USB 產生中斷時,就Toggle 一下I/O ,我們再把這跟I/O 接到

Breakout Board的 User Signal Data input 上:

我們就可以在其USB 分析軟體上同步看到這跟訊號的變化:

(粗的代表為 High ...細的代表為Low...藍色為USR_D0...綠色為USR_D1...依此類推!)

上圖是USB 插拔過程中:Enumeration 過程韌體所回的 Device  Description 。

這一部份鐵定是由韌體所回的....我們可以觀察到:他的每一個Ack Token 處,

都會產生一組USB 中斷...這樣子,您就知道您的USB 韌體的控制流程了!

因為:原廠所附的範例程式,在USB Reset 時,也是Enable USB Interrupt 的,...

所以,我們也看到最後一個 Reset 產生的USB 中斷。

最後呢...我們也看到:雖然Get Device Description (Device Configuration)及

Set Configuration 都會連帶有一組Zero Length 的Out/In Token ,

但是呢,我們的USB Controller 都還是會再進一次USB 中斷程式的。

這樣子,是不是讓您比對參考解讀USB 韌體時,很方便嗎?! ...

-----

當然啊,這樣的流程,您只要走過一遍,您大概就很清楚,以後也不用每次都要如此的啦。

(待續)

上一篇 下一篇
回應(8)
引用(0)
雅虎資訊 版權所有 © 2009 Yahoo! Taiwan All Rights Reserved
「本服務設有管理員」 服務條款 隱私權政策