USB的協議本身的缺點有:
4
/9
1. 協議是非對等協議,必須有主機支援,無法搭建星形結構或者匯流排式結構,整個裝置樹必須有個根節點,裝置與裝置之間無法直接通訊,相對而言,乙太網和串列埠都是對等的通訊系統。
5
2. Host(主機)端協議棧過於龐大複雜,很難小型化。一個最小的USB Host驅動需要幾千行程式碼實現,如果再配置裝置驅動,程式碼可能上萬行(以C語言計),而串列埠協議棧則很簡單,TCP/IP協議棧雖然複雜,但鏈路層不需要協商。USB裝置通訊的前提是使用USBD建立裝置連結,這個過程複雜而麻煩,網路和串列埠都可以無連結的方式直接發包。
6
3. 控制器驅動難寫。寫過EHCI驅動的都知道這東西很麻煩,但網絡卡驅動往往非常簡單,對比之下簡單的網絡卡驅動可能在千行左右,串列埠驅動就更簡單了。這一條以及上一條就限制了USB在低配置的裝置上使用(比如記憶體只有32K的微控制器,要跑USB很困難)
7
4. OTG協議複雜,OTG目標是實現USB主機和裝置之間的靈活切換,但代價是更復雜的驅動。
8
5. 通訊距離過短。
9
所以,USB適用於那種有一個功能強大的主機帶動多個裝置場景,但不太適用於對等通訊或者小裝置之間的通訊。
USB的協議本身的缺點有:
4
/9
1. 協議是非對等協議,必須有主機支援,無法搭建星形結構或者匯流排式結構,整個裝置樹必須有個根節點,裝置與裝置之間無法直接通訊,相對而言,乙太網和串列埠都是對等的通訊系統。
5
/9
2. Host(主機)端協議棧過於龐大複雜,很難小型化。一個最小的USB Host驅動需要幾千行程式碼實現,如果再配置裝置驅動,程式碼可能上萬行(以C語言計),而串列埠協議棧則很簡單,TCP/IP協議棧雖然複雜,但鏈路層不需要協商。USB裝置通訊的前提是使用USBD建立裝置連結,這個過程複雜而麻煩,網路和串列埠都可以無連結的方式直接發包。
6
/9
3. 控制器驅動難寫。寫過EHCI驅動的都知道這東西很麻煩,但網絡卡驅動往往非常簡單,對比之下簡單的網絡卡驅動可能在千行左右,串列埠驅動就更簡單了。這一條以及上一條就限制了USB在低配置的裝置上使用(比如記憶體只有32K的微控制器,要跑USB很困難)
7
/9
4. OTG協議複雜,OTG目標是實現USB主機和裝置之間的靈活切換,但代價是更復雜的驅動。
8
/9
5. 通訊距離過短。
9
/9
所以,USB適用於那種有一個功能強大的主機帶動多個裝置場景,但不太適用於對等通訊或者小裝置之間的通訊。