主機、usb
最常見的主機就是電腦了,現在很多有usbotg(on-the-go)功能的手機也可以做主機,無需過多贅述。usb裝置實在太多了,例如,手機、mp4、u盤、行動硬碟、印表機、掃瞄器等等,當然,作為工程師的你還可能會購買其它一些使用usb介面的儀器,例如邏輯分析儀,示波器等等。無論usb裝置的具體形式是怎麼樣的,按照功能都可以分為兩大類,其中之一就是usb功能裝置。剛剛提到的usb裝置都屬於這類,它們都各自提供了一些特定的功能,例如,u盤就是儲存資料,示波器就是採集資料。
另外一類usb裝置就是usb集線器(usb hub),它的功能與網路集線器相同,把乙個usb介面擴充套件多個usb介面。例如,學校乙個寢室有很多人,每個人都有一台電腦,但網線只有一根,怎麼辦?用網路集線器就可以解決這個問題,如下圖所示
我們只需要特別留意:usb系統的資料或指令傳輸都是由主機啟動的,usb裝置只是根據主機的要求進行被動響應。在任意時刻,usb系統僅允許存在乙個usb主機。
好的,現在有乙個問題得先弄明白:為什麼在電腦同乙個usb介面依次插入滑鼠、鍵盤或其它usb裝置,電腦都能夠正確地識別它的功能呢?這就是列舉的功勞。為了形象地理解列舉,我們來看乙個面試對話場景:
面試官:我看你的簡歷上說對三極體有比較深入的了解,那麼請形象地講講三極體的放大原理。
你:好的,你可以把三極體的三個區比作三個國家,然後…..
面試官:這個故事是你自己總結的嗎?
你:必須的呀!
面試官:那你說說拉電流與灌電流的區別?
你:拉與灌只是電流方向不同而已,具體到電路結構,就是…..
然後你就順利進入了該公司,拿到了乙個代表你是公司員工的工牌….
在以上面試過程中,面試官首先提出乙個問題,根據面試者的反饋後再跳到另乙個知識點,依此迴圈,繼而完成全面考察面試者業務水平的目的,最後才決定是否符合公司的錄用標準,這其實就是乙個列舉的過程。在面試的場景中,你就是usb裝置,面試官就是usb主機,所以簡單的說,列舉就是「識別」的同義詞。
同樣的道理,當usb滑鼠插入到電腦時,電腦也需要詢問關於它的一些資訊,以確定它到底是個什麼東東。電腦當然是不能說話的,它只是會傳送一些命令,usb裝置必須對這些命令進行響應,不然列舉就會失敗(問你話咋一聲不吭呢?面試失敗!)。當然,usb裝置必須進行正確響應,亂來也會導致列舉失敗(回答問題怎麼牛頭不對馬嘴呢?面試失敗!)。當然,即便列舉成功了,也不一定代表usb裝置能用,列舉成功只是萬里長征的第一些。(你小子面試時能說會道,做起實事來卻完全不頂用,明天捲鋪蓋滾蛋吧,趕緊從我眼前消失!失敗中的失敗!!)
概括來講,如果我們開發自己的usb裝置,關鍵的兩個步驟是必須進行的。
其一:讓usb裝置按照usb協議正確回應主機的命令,以成功完成列舉。
其二:在列舉成功後,把資料按正確的格式進行傳輸。
有些人想:蝦公尺?還要響應命令吶,粗看了一下,貌似很複雜,玩不了,回家洗洗睡了!哈哈,必須得打擊你一下,usb底層的實現確實有點複雜,但幸運的是,通常廠商都會把底層核心的東西做好了打包成庫,我們只要修改一些應用方面的資料即可。也就是說,如果你只是使用usb匯流排傳輸資料,底層的東西你沒機會(也不需要)去修改。
那到底需要修改什麼才能成功完成列舉呢?其實道理跟我們工程師做專案一樣!例如使用微控制器控制新的器件時,第一步需要做的就是了解新器件的基本原理,包括通訊時序、暫存器的定義、硬體電路的連線要求等等。器件廠家為了方便使用者使用,通常都會準備好相應的資料手冊(datasheet),它包含了使用者應用該器件的所有資訊。
同樣的道理,如果把你當成一台電腦,當usb滑鼠插入usb介面時,你又是怎麼知道它是滑鼠,而不是鍵盤或其它裝置呢?很明顯,你(電腦)也需要資料手冊之類能夠描述插入裝置所有資訊的媒介,對不對?usb協議中定義的描述符(descriptor)就是這個目的。
描述符在c語言實現層面通常就是結構體(structure),應用上就是多個有一定關聯的資訊的集合體。例如,我要定義乙個員工的描述符,它應該包含姓名、性別、年齡、工號等等資訊,如下所示:
也就是說,usb描述符就是用來描述相應的usb裝置具體是什麼,有什麼特點,能做什麼(是不是真的能做就不知道了),所以在源**程式設計自定義usb裝置時,我們最先開始的工作就是:找到廠商提供的韌體(firmware)或示例程式中描述符對應的位置,再根據usb協議的規定進行合適的修改。如果修改正常,廠商提供的韌體會自動根據主機傳送的命令提交你修改描述符資訊,這樣主機才能正確識別(會提示你插入了新裝置,可以正常使用了),至於它具體能不能起到什麼功能,就是列舉成功之後再去討論的事了,先通過面試這一關才能發揮咱們的才幹吶!
USB 匯流排上電復位及列舉
關鍵理解usb主機檢測到usb裝置後,會對其發出復位請求。在復位之後,usb devcice韌體完成端點等配置及初始化,特別是端點0.而後才可以進入列舉階段。1.當主機用輪詢的方式檢測到usb埠有新的裝置插入時,主機就會給hub傳送匯流排復位命令,要求hub進行匯流排復位。裝置連線到主機並初始化完成...
芯客 Rayeager PX2應用之USB攝像頭
完成px2的root後,芯客網給john發來乙個usb攝像頭,型號為gsou t10,具體如下圖所示 收到t10的第一時間,john就將其接入px2,嘗試使用system自帶的camera.apk進行使用。呃 結果很遺憾,藍屏。這又是芯客網的攻城獅給john出的乙個難題麼?好吧,研究下!答案是肯定的...
矩陣理論應用之反射變換的理解
設 sigma 是實平面r2r r2上的線性變換,其關於標準基的矩陣為 p css c p left begin end right p cs s c 其中c2 s2 1 c s 1 c2 s2 1,證明 sigma 是反射變換,並計算其對稱軸。由於det i p 2 1 operatorname ...