2008年1月18日 星期五

USB 轉JTAG 應用探討(下)--軟體篇




上回我們提到有關J-LINK在 硬體上的一些東西。

而這個J-Link也算是一個USB Controller 作發展工具的一個使用範例。

那我們也來談談有關這方面軟體的問題好了。

很幸運的是:此一發展應用就是供給ARM平台用的。而當ARM平台普及之前,

USB 介面也已經非常成熟了,所以,ARM 相關的發展平台工具,在搭上此一USB 介面之後,

有如虎添翼般的橫掃市場,成為一個也算是業界標準的發展平台。

(唉~也害版主的USB ROM Emulator 少了許多應用市場機會!!)

現在ARM的 開發平台都很成熟了,效能又好,又是用高階 C 語言,

所以在系統切入時間短。只要稍微看一下您Target ARM IC 的幾個簡單的Block Diagram,

就可以輕鬆上手了 !---所以啊 !版主還是蠻慶幸的,當初還是選擇C 而不是 VB 還是對的 !

否則,就會像時下一些年輕工程師們一般的掙扎:我到底要學VB 還是C 語言呢?!

另外,現在這些ARM都已經也都是Flash Based,程式可隨時更新及Debug ...價格也都還可以,

難怪,人家ARM 幾乎可以當一般MCU 賣了,就像您在此一J-Link 看到的:

連USB Controller 都被這種平台給侵佔了。因為很簡單:這種發展工具的產品數量原本就不多,

售價也不便宜。(所以USB 控制器的價格也沒有人會比較在乎的!)

但卻要時常更新或升級,所以,這種一般通俗的MCU平台就非常合適了。

(之前,版主也碰過幾家公司,就非常堅持要用"自己家"的東西來作一些開發工具?!

我就很納悶:為什麼要這麼辛苦與堅持呢?!...難道就比較能夠凸顯優異嗎?!

人家PIC 的ICD2 餅乾盒也是用別人的USB Controller 或是別人的MCU啊?!

難道真的要這麼把自己玩得這麼辛苦才能顯示自己不得了嗎?!納悶?!納悶?!???)

....

我想別的PC 週邊產品是否要採用USB可能是見仁見智,但對於一些MCU 的開發平台工具來說:

現在凡是這些開發工具幾乎都是USB 介面了,這是無容置疑的!更何況現在的NoteBook 也

都只剩下USB了,像我們這種得常常「出外」打工的人來說:USB Hub 更是少不了!

(圖)

但NoteBook 的USB 介面有一個很討厭的地方:就是有時會斷電,或是簡單的進入睡眠狀態。

如果啊...您剛好在這些ARM 或是ICE 的開發平台上跑一些Debug時。

去辦個事情回來,糟糕...NoteBook 進入睡眠狀態.....

您還記得我之前有提到這個問題吧...如果,他給您USB Device斷電還好...

反正重新Resume 回來時,就是重新啟動而已....(尤其是Bus Power 的USB 裝置!)

但更讓人討厭的是:進入睡眠狀態卻又沒斷電的,最討厭了....

尤其是:您像圖中那種掛在供電的USB Hub後面,就是這一種....

意思就是說:您的USB 裝置會收到一個睡眠指令 : Suspend ....

如果您USB 的韌體沒有做好這一點,有時就是會產生意想不到的結果。

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

還有一個更令人討厭的是:您的應用程式(如開發平台的Debug環境)...根本不知道您的USB Device,

有收到這個訊息---因為是由作業系統OS直接下的.......

精彩的問題來了:就是您的DEBUG 環境還在傻傻的想跟您的 USB Device 作連結溝通....

結果...您的USB DEVICE 都還來不及發出「最後求救信號」時....

呵...呵...您的開發平台軟體就掛點了.....這個問題要解其實蠻難解的....

因為您的USB 裝置是不能主動通知上層的應用程式(當他收到OS 的Suspend 指令時,

而這個USB Device 也搞不清楚這個命令是上層AP下的?!還是OS?!

就算他知道不是上層AP 下的命令,但卻又不知該如何通知上層AP?!........很可憐喔!!)

而且這個睡眠指令還是作業系統偷偷下給您的USB DEVICE的....

光這點您就知道為什麼:USB 的產品開發不容易喔!--每一個USB 東西都有他的「眉眉角角」存在!

---其實,Suspend 不是一個命令,他實際上是一個硬體的動作,

就是一個USB 的J-state 與K-State的交互作用...所以,只要您是USB 的硬體就會接受這個命令的!!)

所以啊...您就會再重新開機時.....,看到螢幕這個可怕的提示視窗:

(圖)

(很奇怪的是:像上圖那個知名品牌的USB Hub 也都使得像這個J-Link 或其他USB 發展工具,

都會多多少稍發生Resume 之後,認不到機器的現象,版主也懶得去追問題發生問題了!)

....所以啊...如果您的開發平台如果沒有做好這一點保護措施的話...

萬一您的開發平台是在開發類似馬達控制或是比較大型的控制系統時,

就要小心一點喔....所以,像作這一種開發工具就要小心這個問題---

不要讓您的控制系統---突然的 Out of control 喔!

至於,您會問:版主怎麼可以知道人家這個東西的類似問題癥結點呢?!

哈...哈...很不幸:版主之前作那個 "FxxA" 的開發平台時,就是碰到過這個問題:

(圖)

我只是用一個比較和緩的文字提示視窗...讓USB 裝置重新與上層應用程式重新連結...

(說不幸,還真不幸啊...搞那個開發平台,除了寫USB 韌體程式,還要debug 開發工具的硬體,

寫上層的Visual C++ 應用程式:除錯程式下載﹑什麼單步執行啊,設定斷點啊...變數檢視視窗等...

所以啊,當您什麼都會時,就不代表您會過得比較幸福美滿!!對不對?!

....這種事情還是做過一次,嘗一下鮮就好了...別太認真...)

像這個問題還真的蠻難處理的,當初版主碰到這個問題時,還在想我這樣的解法對嗎?!

...幸好剛好這次我也看到人家國際知名大廠作的東西,

也如版主作的東西一樣時,也算是蠻安慰的----代表人家我作的東西也有國際水準的啊 !

(自己ㄆㄜ....卡袂臭車....念不出台語的....代表您不夠Localize....)

但是....這個東西的問題:真的叫 USB Communcation Time Out 嗎?!

會不會誤導一些寫USB 驅動程式的人啊?!....見仁見智...

--------------------------------------------------
當然啊,也就是因為當初也就是一個人全包了,所以,碰到此一問題時,

就自己鼻子摸一摸,自己想辦法解了。否則啊?!像一般大公司啊,

像這種從USB 底層到韌體再到USB 驅動程式,再到PC 端的上層應用程式,

喔~還有包括那個發展平台的 Target Board(目標版)....

我想至少三﹑四個一大伙人還可以找個藉口,給他解個各把月或是半年的,

我想長官們也大概拿大家沒輒的。----這不就是呆在大公司幸福快樂的日子嗎?!

所以,就看大家是要作技術的呢?!還是要混日子的。當您練就像版主這一身十八般武藝時,

您的日子就可由您自己決定要過得快樂還是要充實一點?!

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

我們這一次剛好這一個機會碰到這個USB 介面的相關應用案例,也從硬體與軟體兩方面來看問題。

像要作這種開發工具的產品,都不是單一會寫軟體或只會寫韌體或是作硬體的人就可輕易

的很快做出一個產品,或是解決一些問題的。

還是強調一下:要學USB真的不要給自己設限,不要認為自己會寫軟體或是作硬體的而已罷了!

因為像這種應用問題,都不容易從單一方面可看到問題,也不要說:反正這個問題是公司的事!

只要您有這種稍微不健康的想法時,您無形中也會給自己為來帶來不確定感。

有一天您離開這個職位或是這樣的工作環境時,您就會懷疑自己還會作什麼?!

相對來說:您也無法跟別人討價還價的。因為您有什麼資格說您做過這個題目呢?!

-----------------------------------------------------
無論是USB 的技術開發或是其他電子軟硬體系統技術,如果您能夠很紮實的掌握技術,

把馬步蹲好!相信版主說的:只要您願意出門,不要作個宅男!

就像老美或外國人他們那樣,偶爾參加一下別人的聚會。跑一跑市場。

您就會懂得原來知識與技術也是很值錢的!如此一來,您就會發現:

不用每個案例您都需要全力以赴,或是只要動用您幾分的功力,您就可以輕易的解決別人的問題。

而您也會很容易的看到自己在客戶眼中的價值的,原來作技術也是可以這麼好玩的!

也藉由這個USB 轉JTAG的題目,把這個經驗分享給有緣的您!

謝謝您的指教。

 

 

 

12 則留言:

  1. Windows 從 Win 95 開始有 WM_POWERBROADCAST
    這個 message
    在 application 層可以透過它來處理 跟 suspend 的問題
    給你參考一下

    回覆刪除
    回覆
    1. 謝謝您提供的資訊...
      不過,這個WINDOWS的 Message 好像對寫這種IDE 發展開發平台沒有什麼助益?!...要不然,人家老外為什麼也不用呢?!
      以我個人的想法是:因為這種DEBUG 平台會牽涉到硬體或底層Firmware的一些Handshake...我是不知道:這個Message 發出後,您與USB 之間還有多少時間處理?!...但我是覺得:有時像文章所採用的方式,也不失是一種蠻不錯的方式。---要不然,當您調用了Windows 這些Message 之後,會不會引起您自己在USB 之間的問題就很難說了...
      ----就像大家有時覺得用微軟的Multi-thread 架構蠻不錯的....但有時也未必也是一種好方式啊?!對不對?!....
      大家可以多討論!謝謝您的參與!
       

      刪除
  2. 旅遊達人--大米2008年1月22日 晚上9:58

    其實  如果是自己開發的usb device
    可以把PHY的control 直接拉給micon看 看到linestate是suspend時
     讓micon決定這個情況要不要suspend
    因為直接拉PHY的 suspend 會停clock  機制沒做好  會睡死醒不來哦....

    回覆刪除
    回覆
    1. 不是都是如此嗎 ?! 要不然怎麼會有 Suspend event 或Suspend 中斷呢 ?!
      只是您的MICON 韌體要處理那些事後才去睡覺  ?! 這個才是最大問題吧 !!

      刪除
  3. 旅遊達人--大米2008年1月22日 晚上10:43

    拜讀了板大的網頁  覺得知識大增 
    有個NAND的問題想請教一下
    很多人都說  要寫入一個block時 要先把裡面資料讀出  先erase後 再寫入
    可是samsung的 datasheet 並沒有特別寫到這一點
    這個動作是否flash本身的controller就自己執行完成了呢?
    外部controller是不是只要丟command 和address就行了
    謝謝

    回覆刪除
    回覆
    1. ... MLC 沒玩過, 不知道...
      您在 NAND 的Datasheet 裡..有看到 Page Write/Read ...
      您有看到 Page erase 嗎 ?!  ;) ...這是寫Datasheet 的高度文法 !!
      所以啊...您要清除裡面資料(One Page)時...是不是要先搬走...再整個 Block earse !
      ....對於隨身碟以外的東西來說 :
      外部controller是不是只要丟command 和address就行了  -- 對的 !!
      -----------------------
      現在一顆隨身碟控制IC 只剩下US $ 0.35 了...還有公司想重新投入嗎 ?!
      要不要把錢捐出來做更多的社會公益...幫助更多需要幫助的人 !?

      刪除
  4. 為啥老外的IDE不用這個問題
    版主我想你應該也知道 因為不一定寫IDE的人知道有這個問題呀
    一般人是不會在 使用狀態下去suspend OS or Device的

    用那個 message 不是 USB Driver發的
    那個只是幫助 App. 可以處理Wakeup & suspend
    用在USB client 上的話我想可以先 Close 所有 Handle
    等Wakeup 再去ReOpen 時肩上是來的及的
    MSDN 的描述會等到 Windows Message loop Return 才會繼續
    之前是因為要控制 PC上的 GPIO 才去了解這一點東西

    回覆刪除
    回覆
    1. 同意 !
      您的見解非常清楚 !! =D> .... =D> ....
      非常感謝您提供這樣的見解 !! =D> .... =D> .... =D> .... =D> .... =D> .... =D> ....

      刪除
  5. 旅遊達人--大米2008年1月23日 晚上10:19

    usb 的suspend 規定是 電流< 500uA
    只要電流小 MICON就算不睡 應該也沒關係吧

    ----------------------------------------------------------------------------
    flash control....
     板大大概不知道SSD現在的報價吧
     ASUS 的 EPC    APPLE的 Mac air
    裡面最有利潤的就是這個東西了吧

    回覆刪除
    回覆
    1. Suspend Current 的問題是會牽涉到實際的應用電路的....
      很難定論有沒有關係... :-? ....
      ----
      其實SSD 是一個很不錯的想法與產品觀念...
      但這會牽涉到一個商業利益的問題...因為畢竟NAND的貨源有點半壟斷...
      作系統產品的人要不要幫零組件檯轎?! 就是一個商業考量 !!
      就像您作隨身碟 Controller 一樣...整支隨身碟的主要成本都押在NAND 上面一樣的 !!

      刪除
  6. 很冒味的問個笨問題...J-Link是走哪個USB Device Class?

    謝謝:D

    回覆刪除
  7. 賈老師的真老公2008年4月29日 晚上10:31

    耶...問得很好...J-Link 要走哪一種 USB  Device Class ?!
    我想:如果所有的跟USB 傳輸介面的Driver 都想要用 Device Class 給包了...
    那我們這些人要混什麼?! :> ... :-? ...
    所以,我才說:fellow 規格的人沒什麼厲害的...創造規格人才是厲害。
    當然,我們是沒什麼機會創造什麼神奇的規格...
    但至少我們還可以在基本規格裡,玩一些變化...
    越是越多規格綁著您的產品...您作產品可能就越辛苦喔...
    您看一台DVD 那麼多規格..Dobly..MP3.. DVIX... AC3...MEPG1.. MPEG2...
    不要說搞技術啊...連權利金都付不完...簡直是幫創造規格的人賺錢嘛! [-( ...

    回覆刪除