close


想跟版主重新學新的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-- 自學計畫(五)


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 賈老師的真老公 的頭像
    賈老師的真老公

    ChamberPlus System Level Studio

    賈老師的真老公 發表在 痞客邦 留言(11) 人氣()