想跟版主重新學新的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應用程式(續一)
沒有Cat-C 要學USB還真是要天馬行空阿.
回覆刪除不知你要學那一家公司的??S的F32x嗎?
我也是有興趣阿.
學usb 小弟有榮幸可以參一腳嗎?
回覆刪除CATC真的很重要,我看過靠USB FW吃飯的RD幾乎都有一台...不過這種東西也不是一般人消費得起
回覆刪除跟CATC代理商聊過, 用到外接port的人斷數都很高.
回覆刪除我只用過特殊USB信號 trigger out 到 LA 上抓波形 & timing 來bebug.
您們不能老是怪自己沒有 CATC 啊...而作USB 的人也不能或不是一天到晚都靠CATC 啊。
回覆刪除我之所以用CATC 只要要讓大家比較容易瞭解我所說的。
如果,您在規劃USB 架構時,都得靠CATC的話,那只能說您的功力還不夠。
講難聽一點:如果要老是要靠USB的 CATC 分析儀來看東西的話,
第一個該被檢討的應該是: Microsoft 公司裡負責寫底層Driver 的人。
因為其實,USB 通訊協定的東西是很固定的...他也不是一天到晚變來變去的。
而是我們在規劃USB 系統架構時,一定要對USB 基本觀念有全盤的瞭解與體會。
否則,您也不清楚自己USB 系統的真正應用價值啊。
Chamber大大:
回覆刪除我想大家一致的想法是,有台CATC學習起來事半功倍,就像對I2C、SPI debug時不要說有LA,起碼也要有台scope debug吧?總不能用猜的吧!...
要不然有沒有不用CATC就能學會USB的方法? ... =D>
有啊...就直接看原廠所附的參考原始碼。
刪除大家不就是如此的嗎?!只是看大家是要學皮毛?!還是學得紮實一點?!
---不代表學皮毛就不能做USB產品開發。
就看每個人的基本想法啊。
您好:
回覆刪除是否能跟您請教一下,是關於硬體的問題。
假設我有兩顆MCU,有顆有USB介面、但另一顆沒有。如果我要把它layout成共用,我是否能把D+與D-用跳JUMP的方式處理,會不會對於USB傳輸上有何影響?
不知在這問是否適當。謝謝!
frederick
不是很懂您的意思?!...一般所謂有USB 介面的MCU..
刪除不是他的MCU IC的腳上有專用的兩根D+ 與D- 腳嗎?!
沒有USB 介面的那一棵MCU哪來的D+ 與D- 的腳啊?! :( ?!
您要怎麼跳JUMP啊?!????????????????????????
---您不就用那顆有USB MCU做完USB傳輸之後,
再用MCU本身的基本介面:如UART 、SPI或是I2C
跟另一棵MCU 溝通不就好了嗎?!
---您是不是把原本簡單的問題想得太複雜了?!????
我都是使用bus-hound來debug, 這是一套軟體的分析匯流排軟體,可以看到 pc與 usb之間的通訊資料,不過當然沒有分析儀那樣完整,但是大部分都看的到,小細節就很難囉,而且這軟體還可以自己傳送usb通訊協定喔。還滿不錯用的。 USBLAB miller 上
回覆刪除我想最主要的差異是看不到...USB transaction上的頻寬情況。
刪除至於,只是看傳輸的資料內容來說:只要您軟體或是系統Debug 功力夠的話,
我想這個Bus-hound也不一定真的有用...當然啊...
我懶得架USB 分析儀時,也會偷懶用這套軟體的! :)) ...
想請教大大一個問題,我目前想作ㄧ個用USB搖桿作ㄧ個介面,轉成並列的那種Hi,Lo高低準位的訊號請問有可以推薦的書嗎??或是中間那訊號轉換的IC,PDIUSBD12這顆可以達到我所需的要求嗎???
回覆刪除謝謝
前輩您好, 請問在 LeCroy USB Protocol Sute USB Protocol Analyzer V4.32, Build 1125 上, 要怎設定才能看到 Breakout Board的 User Signal Data input 呢 ? 謝謝指點!!
回覆刪除對不起...您所說的是新版的USB 分析儀吧,我沒有玩過,不清楚。
刪除但從他第一版的軟體大概也不容易瞭解這個東西的設定...
我所用的是第一版的...他設定的位置在下圖:
(我想應該是意思類似吧...您就自己翻找一下吧!)
前輩您好, 謝謝您的告知, 我再找時間試試!! Thanks!!
回覆刪除好好加油吧!
刪除