想跟版主重新學新的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 韌體時,很方便嗎?! ...
-----
當然啊,這樣的流程,您只要走過一遍,您大概就很清楚,以後也不用每次都要如此的啦。
(待續)
-----------------
1. 改寫原廠的USB應用程式
2. 改寫原廠的USB應用程式(續一)
3.改寫原廠的USB應用程式(續二)
5.USB DIY-- 自學計畫(二)
6.USB DIY-- 自學計畫(三)
7.USB DIY-- 自學計畫(四)
8.USB DIY-- 自學計畫(五)