2018-06-09 08:53:17| 來源:admin| 瀏覽量:689
作者:北極
鏈接:https://www.zhihu.com/question/37949786/answer/74243169
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
這并非USB接口或者USB傳輸協(xié)議的問題,是USB HID規(guī)范(鍵盤鼠標(biāo)規(guī)范都在這個范圍內(nèi))的限制,廠商們只要自己定義一套規(guī)范,是有辦法突破這個限制的,只不過適用性差一點,需要驅(qū)動而已?;蛘邚S商們推動USB-IF去更新USB HID規(guī)范即可,這都不是大問題。這個問題也不能說USB鍵盤就么有PS/2鍵盤好,只能說廠商比較懶而已。
線纜方面,USB2.0是4根,3.0是9根(但通過改造可以只用5根+外殼接地)。
USB的協(xié)議本身的缺點有:
1. 協(xié)議是非對等協(xié)議,必須有主機(jī)支持,無法搭建星形結(jié)構(gòu)或者總線式結(jié)構(gòu),整個設(shè)備樹必須有個根節(jié)點,設(shè)備與設(shè)備之間無法直接通信,相對而言,以太網(wǎng)和串口都是對等的通信系統(tǒng)。
2. Host(主機(jī))端協(xié)議棧過于龐大復(fù)雜,很難小型化。一個最小的USB Host驅(qū)動需要幾千行代碼實現(xiàn),如果再配置設(shè)備驅(qū)動,代碼可能上萬行(以C語言計),而串口協(xié)議棧則很簡單,TCP/IP協(xié)議棧雖然復(fù)雜,但鏈路層不需要協(xié)商。USB設(shè)備通信的前提是使用USBD建立設(shè)備鏈接,這個過程復(fù)雜而麻煩,網(wǎng)絡(luò)和串口都可以無鏈接的方式直接發(fā)包。
3. 控制器驅(qū)動難寫。寫過EHCI驅(qū)動的都知道這東西很麻煩,但網(wǎng)卡驅(qū)動往往非常簡單,對比之下簡單的網(wǎng)卡驅(qū)動可能在千行左右,串口驅(qū)動就更簡單了。這一條以及上一條就限制了USB在低配置的設(shè)備上使用(比如內(nèi)存只有32K的單片機(jī),要跑USB很困難)
4. OTG協(xié)議復(fù)雜,OTG目標(biāo)是實現(xiàn)USB主機(jī)和設(shè)備之間的靈活切換,但代價是更復(fù)雜的驅(qū)動。
5. 通信距離過短。
所以,USB適用于那種有一個功能強(qiáng)大的主機(jī)帶動多個設(shè)備場景,但不太適用于對等通信或者小設(shè)備之間的通信。
至于USB本身支撐的功能(比如支持哪些設(shè)備),那是上層協(xié)議的問題,理論上應(yīng)用層走什么協(xié)議都是可以的,是否支持完全看廠商的態(tài)度。