ChamberPlus System Level Studio

  首頁 | Contact to us

 

News
Products
FAQ
Technicality
Links
OldNews

互動區:

留下您的足跡

想討論嗎?

 

請教移除USB裝置 ? -- 軟體與韌體的互動 !!

Q: 我想在程式上加移除USB裝置,我就不需要去右下角點選移除,請問哪裡有資料可查?或是有哪位大哥可提供相關的function?

A:其實,我們在視窗的右下角點選移除的動作,就是下了一個 Suspend命令而已罷了∼就是希望您的Device 進入比較弱電狀態∼

        然後去拔USB Device ,會較安全。至於,AP要怎麼下SUSPEND 我就不清楚了。當然,您也可以用 Vendor Command 下一個 Suspend Command 給您的Device ~ 但如何讓OS 收到這個訊息就不知道了。您還有更狠的作法:下一個Vendor Command 給您的Device 叫他拔除! 怎麼作?!Device 端如何控制?在我的網站說明中有提過:就是將D+ 那根 Pull-high 放開∼再拉一下不就好了嗎?!簡單吧!有時軟體想破頭,還不如系統作一下更快∼哈∼哈∼ 我們是寫韌體不是寫軟體的!哈∼哈∼

Q:其實您說的就是斷電的作法,但是視窗會出現拔除的訊息,我的目的就是不要看到這個訊息,直接跳過去?

A:簡單的回覆如下:

    1. 聲明一下:我所說方法不是斷電∼只是把D+放開∼就是RESET 狀態!

    2. 我當然也知道您是不想看到那個訊息,但是您要如何通知OS呢?!我也真的不知道,我想,除非您去查微軟公司的相關技術文件吧∼但是我的直覺是,像這種東西是牽涉到他OS底層的東西,微軟不一定會公布,而且我是覺得您也不要嘗試去『騙』他,否則,後續維護工作包您作不完。

    3. 這種問題就譬如好像我開發一個USB DRIVER,但又不想作WHQL ,卻不想看到微軟那的警告視窗?!您覺得微軟會讓您有機會成功嗎?!那他WHQL 賺什麼?!

    4. 您應該回頭想:您為什麼要在AP中去做USB 裝置移除的動作?!原因是什麼?!只是不想去點選作左下角?既然點選左下角是作業系統直接下命令給底層的USB 驅動程式(這個也是微軟的),他已經把您作得很好了∼您又何必在程式中多此一舉,卻又想跟作業系統搶這份工作呢?!或是您只是作一個軟插拔功能來解掉您USB Device 韌體的問題呢?!那您應該是好好去看看USB DEVICE端的真正的問題。

(我猜的啦:因為以前我們軟體工程師,都很憨直,明明USB DEVICE韌體有問題,又不敢提∼發現每次RESET 好像可以解問題,就自作主張想下RESET ∼結果問題一直沒解∼是不是這樣?!我猜的∼真的不要這樣解∼對USB的東西不要這樣解!!就好像您說了第一謊之後,您就要用更多謊來圓這個謊∼

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

        好啦∼這篇Q&A我要道出以前我們大部分作USB產品場碰到的問題:韌體與軟體之間的協調問題。說真的,一個真正能拿到台面上的USB產品,幾乎都需要PC 端軟體工程師,再加USB DEVICE端的韌體工程師,當然啊∼您們若是作USB IC的公司的話,還得再加上IC設計工程師。

        有時作技術不難,最難的就是溝通,然溝通最難就是語言不通,很不幸的是:寫軟體跟寫韌體就是語言不通。尤其是寫軟體DRIVER的,更是難以理解,連他們自己跟作業系統之間的理解也很難。

        USB 傳輸的最大特色是什麼?!說真的,您若是作HID這種低速裝置,您可能很難理解這個特色,就是主從之間傳輸的協定,因為在低速裝置中,走的是 Interrupt Token ,他基本上是Polling 方式,而且是以Device 端自己宣告方式來定義Polling 時間間距及資料長度通常不大的。但對於其他傳輸方式來說,就未必了,什麼時候HOST要資料?一次又要多少?可能都不一定,這都得在啟動傳輸協定前就得定義清楚!!否則,一旦啟動了,在PC端的 Driver 的IRQ 就『不到黃河心不死』!您的軟體應用程式就當場枯等在哪!!我們當然不能說是當機,因為底層的DRIVER 真的收不到資料或資料發不出去啊?!那怕您一次要了 100MBytes 資料,他卻只收 99.9999% 的資料,底層的Driver 還是不會把控制權交還給您的應用程式。好了,這時候,就算這是那麼一個 Bytes ,您就很難捉問題了。尤其是作BULK傳輸的,資料是完全掉不得的。

        此時,看見寫韌體與寫軟體的爭執點了:寫軟體應用的軟體工程師說:我真的收不到底層DRIVER 的回覆?!而寫傳資料的韌體工程師卻說:我一切都照暫存器規劃啊∼我哪知道?!資料似乎人間蒸發般∼此時,有一個最大的替死鬼出現了:微軟的作業系統!!大家都開始罵!罵得很爽,但問題還沒解啊?!(此時,作IC的可能在旁邊偷偷的在笑∼∼)因為寫軟體的哪會幫您看USB裝置的暫存器啊?!更不說,寫韌體哪看得懂軟體那些PC程式啊!

        其實,這部分的解法,我本來要在下篇談到有關USB 傳輸的文章中,以範例教大家如何釐清問題,但在此我先說明一些觀念問題,這一切首先要講求的是:態度問題。都必須尊重對方的專業知識。但人非聖賢,人能無過無錯呢?!我在此說我自己的經驗法則:『雙方都只能描述現象,不可妄下結論!』,因為我們是民主社會,誰也沒資格給對方安一個怎麼樣的罪名。所以,以前在還沒確認資料傳輸的路徑已經正確無誤之前,不要劈里啪啦傳一大堆資料,連要DEBUG都很難,最好是一些固定的資料格式,譬如說:0x00, 0x01, 0x02 ...依序下去,萬一中間掉了什麼資料,很快的看出問題點。

        另外,就是要知道USB Device 一般傳輸的設計機制是:靠硬體幫您擋住所有的資料傳輸的 Handshake!等一切資料或儲存BUFFER準備就妥,才把傳輸機制啟動。有點像水庫閘門一樣,一旦閘門一開,其實您的韌體的工作就使不上力了。皆下來就等另一個硬體的通知(向中斷訊號),相對的,在軟體這邊,一次要多少資料,一定要透過命令方式事先通知韌體,這一點是很重要的 !這是一些傳統的RS232 ,您愛收不收都隨您,USB 可不行,因為USB 是資料串接的,整個BUS上可不只有您的資料而已(譬如您是透過USB HUB,有些傳輸封包可能是要傳給USB HUB而不是您USB裝置)。至於,細節的作法,我會在一篇USB 資料傳輸的文章中,用實際範例來說明。在此先說明到此。

        最後,針對這個問題,我還是強調一點,無論是作工程獲解決問題,態度真的很重要,我說過:硬體的問題,韌體解;韌體的問題,軟體解;軟體的問題,業務解;業務的問題,老闆去解。但是您若是一位有擔當的工程師,您就不應該把問題留給別人解,否則,除了工程問題難解外,您的名聲也很難解喔!您覺得您老闆會用什麼方法解決您的問題啊?!我舉一個我以前同事講的一句話來送給大家:只要我XXX出門解決不了的問題,那鐵定是IC有問題!帥啊∼有夠擔當的∼也是出了名的機車。我想這可以列為系統工程師的十大名言之一啊!您有這樣的信心與勇氣嗎?!

       

首頁 | News | Products | FAQ | Technicality | Links | OldNews

Telephone : 886-3-5439918    FAX : 886-3-5437632

Copyright(C) 2005 . ChamberPlus System Level Studio All rights reserved.  Last Update: 2008年01月18日。