作者:Bird
USB 介面自 1996 年問世以來,已經將近 30 個年頭。除了傳輸速度從一開始的 1.5 MBps low-speed 標準演進到當前最新的 USB4 40 Gbps 外,USB 介面也對充電、供電的世界帶來革命性的影響。
2007 年 Micro-USB 連接器問世後,第一代 iPhone 也在同年發表,隨即開啟了智慧型手機的新時代,Micro-USB 也成爲各式移動裝置上,最被廣泛使用的供電連接器標準,而 USB 規格的電源供應器,不管是插插座的豆腐頭,以及各式行動電源,更是成爲 maker 在設計專案時的最佳選擇。
接下來這一系列的文章,我想帶大家一同來徹底研究一下 USB 供電的世界。
不過在開始之前,我們先來說點歷史故事。
Before USB #
USB 當初是設計來取代個人電腦上的各式低速連接界面,如連接滑鼠和數據機(modem)的 RS-232C,連接鍵盤的 PS/2 鍵盤界面,和連接印表機的 Centronics 介面等。在 USB 尚未問世之前,每種界面有各自的標準,從訊號格式、連接器,到供電能力等,各不相同。
這裡面最妙的規格就是供電能力,因爲不是所有的介面一開始設計時都有考慮供電。
早期的 PC 在還沒進入 Windows 時代時,並不需要使用滑鼠操作,因此在 PS/2 介面出現之前,滑鼠都是連接到 RS-232C 介面,而 RS-232C 界面並沒有設計電源接腳給裝置使用,它是一個純粹用來通訊的界面。

(圖片來源: Bird 提供)
但以前使用 RS-232C 介面的滑鼠時,並不需要另外插電源,也沒看到滑鼠需要裝電池。那麼滑鼠的電從哪裡來呢?
偷電偷來的。
RS-232C 所定義的訊號準位是這樣:+5 V ~ +15 V 代表邏輯 0,-5 V ~ -15 V 代表邏輯 1,這個電壓經過一些妥善的處理,可以拿來當小小的電源使用。除了用來傳輸資料的 TXD、RXD 接腳外,RS-232C 還有一對用來做 flow control 的接腳 RTS/CTS,以及用來偵測裝置是否接上的接腳 DSR/DTR。
電腦端「輸出」訊號的接腳,如 RTS、DTR,其實就是像 GPIO 的輸出接腳,如果不用來做 flow control 或裝置偵測,我們只要把它們強制設爲邏輯 0,它們就會維持在 +5 V ~ +15 V 的電壓,這個電壓經過濾波、穩壓之後,就可以拿來當電源。

(圖片來源: Bird 提供)
上面是一個典型的從 RS-232C 介面取電的電路。這裡要特別注意的是,由於 RS-232C 介面定義的電壓範圍很寬,從 +5 V 到 +15 V 都算是符合規定的,因此偶爾會遇到一些裝置真的就只做到下限,邏輯 0 的時候只輸出 5 V,但因爲使用 linear regulator 時需要一些電壓差,因此你沒辦法從 5 V 的輸入穩壓出 5 V 的輸出。
依照電腦端所使用的 RS-232C介面晶片不同,上面這個電路所能供應的電流也不同,但一般來說,RS-232C 的每隻輸出接腳可以有 3-4 mA 的輸出能力,因此 RTS 跟 DTR 兩隻腳加起來,讓我們偷個 6-8 mA 是沒什麼問題的(這個電流要驅動滑鼠綽綽有餘,這就是爲什麼傳統的 RS-232C 滑鼠不需要另外供電的原因)。
類似的例子也在 HDMI 連接線上可以看到。
HDMI 介面的定義中並沒有給裝置使用的電源接腳,但現在可以買到一些 HDMI 訊號增強器或是 HDMI 聲音訊號分離器,一樣不用另外接電源,插在 HDMI 上就可以使用。這是因爲 HDMI 的界面中有一隻叫 +5 V 的接腳,是由 source 端提供,用來對 sink 端的一顆儲存 EDID 資訊的記憶體供電用的。
EDID 是 sink 端用來告訴 source 端它的顯示能力,像是支援哪些解析度、格式,有沒有支援聲音等。HDMI 的規格中,source 端要能提供 50 mA 的電流來驅動 sink 端的 EDID 記憶體,但實際上這顆記憶體只是個小小的 I2C EEPROM,根本吃不了這麼多電,剩下的就可以偷來用啦。
事實上 HDMI 組織後來也意識到在界面中供電的重要性,因此從 HDMI 2.1 開始就有一個新的規格叫做「HDMI Cable Power」,它可以提供 5 V 300 mA 的電源給連接在 HDMI 上的裝置使用。
USB 的遠見 #
USB 介面的設計,從一開始就有供電的設計。最早的 USB 1.1 界面只定義了四隻接腳:

(圖片來源: Bird 提供)
D+/D- 是一對差分(differential)的雙向資料傳輸界面,而剩下的兩隻腳就是用來供電的。
USB 1.1 對供電的定義很簡單:5V +/- 5%。至於電流呢,大部分的人都知道最早期的 USB 供電電流是 500 mA,但其實這個 500 mA 還有一些小小的限制:在裝置剛插入 USB host 或 hub 時,最大只能拿 100 mA,必須要完成 USB 裝置的列舉(enumeration)之後,才能按照列舉時,descriptor 中所要求的電流,向 host 或是 hub 取電,最大不能超過 500 mA。
Descriptor 是 USB 裝置在向 host 回報身份時的一個資料結構,它裡面有個欄位用來告訴 host,自己需要吃多少電。因爲 USB 匯流排是一整串像粽子一樣的裝置們,透過 hub 串起來,這整串裝置的供電模式可能會很複雜,比方說光是 hub 就有分成可以額外供電的或是靠上游吃電的兩種,這時對於下游裝置的供電能力也會不同,因此 USB host 需要藉由 enumeration 這個過程,來計算、評估整串下游裝置對電源的需求,以確保不會有人拿取超過容許範圍的電流,拖垮其它裝置。
如果你隨便將一個沒有連接 USB 裝置的 USB 接頭插入電腦的 USB 介面,因爲它沒有對 USB host 做 enumeration 的能力,在這樣的狀況下你是沒辦法從電腦的 USB介面拿到 500 mA 的電流的。如果硬要拿,就會出現類似「USB 連接埠發生電源爆衝」這樣的錯誤訊息。

(圖片來源: Bird 提供)
小結 #
即時是最原始的 USB 1.1 規格,要從 USB host 拿到 5 V/500 mA 的電源也不是那麼簡單,且隨著時代的進步,500 mA 的電流早已不敷使用,因此在後來的 USB 規格改版中,不斷加入更多的供電規格與識別方法。
除了 USB 組織外,各家手機供應商或是晶片供應商,也紛紛在 USB 連接器的規格上,推出各種自己的供電標準。
接下來的文章,我們會繼續探討這些供電規格的技術細節,以及如何善用它們。
(責任編輯:賴佩萱)