上回我們提到有關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的題目,把這個經驗分享給有緣的您!
謝謝您的指教。