網(wǎng)上看到有人提出一個問題,如果將兩臺手機的typec通過tpyec-typec cable相連,是否可以實現(xiàn)一臺手機給另一臺手機充電,充電方向是怎樣的。 我自己試了一下,將兩臺typec手機(QC3.0快充協(xié)議)對插,確實可以實現(xiàn)一臺給另一臺充電,但是初始充電方向并不是由電量多少(電池電壓)決定的,連續(xù)多次插拔typec,初始充電主從狀態(tài)隨機出現(xiàn),之后可以通過系統(tǒng)內(nèi)設置usb選項來自由切換充電主從。 查了很多博客和科技文章,感覺沒有說的特別清楚的,最后去USB網(wǎng)站上把typec的spec拉下來一看,什么都寫的清清楚楚。所以想要搞清楚一個問題,踏踏實實啃spec吧,別想著有人嚼碎了直接喂你。 1.先介紹一下Type C直接貼引腳定義: ![]() VBus:總線電源,USB PD協(xié)議可配置電壓,最大20V 5A GND:地線 TxRx:Tx1 Rx1 Tx2 Rx2 兩組數(shù)據(jù)傳輸信號,USB3.1標準 CC:CC1和CC2,兩個關鍵引腳,作用很多: 探測連接,區(qū)分正反面,區(qū)分DFP和UFP,也就是主從(雖然typec支持正反插,但typec的點定義并不完全對稱,比如Rx1,翻轉(zhuǎn)插頭再插入就是Rx2,所以需要系統(tǒng)識別插頭的正反插情況,用來正確配置Tx和Rx的連接通訊,雖然定義里有CC1和CC2,但是線纜里只有一根cc線,正反插可以連接不同的引腳,通過讀取上下拉電平,從而識別插頭的方向); 配置Vbus,有USB Type-C和USB Power Delivery兩種模式; 配置Vconn,當線纜里有芯片的時候,一個cc傳輸信號,一個cc變成供電Vconn,用來給線纜里的芯片供電(3.3V或5V); 配置其他模式,如接音頻配件時,DP,PCIe時; D+D-:用來兼容USB2.0協(xié)議的數(shù)據(jù)傳輸,音頻復用時也是L R信號 SBU:復用引腳,和usb協(xié)議本身關系不大,復用為其他端口時使用 2.TypeC對插充電方向接下來就是一開始提出的問題,兩臺手機用typec對插,是否能一臺給另一臺充電。 Type-C設備role分為host和device,對應充電過程中的source和sink。有三種形式:DFP(Downstream Facing Port)、UFP(Upstream Facing Port)和DRP(Dual Role port)。DFP只能做Source,CC線上拉電阻Rp;UFP只能做Sink,CC線下拉電阻Rd;DRP兩者都能做,通過switch切換Rp Rd。比如一般充電器是DFP,U盤是UFP,手機是DRP。 所以,我們的問題就是,兩個DRP端口相連,怎樣分配role? USB端口交互行為: 首先明確幾個狀態(tài),是我自己的理解: source角色在未連接時的狀態(tài)Unattached.SRC,一旦檢測到CC線連接下拉電阻,進入AttachWait.SRC狀態(tài),持續(xù)檢測下拉電阻,經(jīng)過tCCDebounce時間,然后進入正式source連接狀態(tài)Attached.SRC,并打開Vbus和Vconn。 sink角色在未連接時的狀態(tài)Unattached.SNK,一旦檢測到CC線連接上拉電阻,進入AttachWait.SNK狀態(tài),經(jīng)過tCCDebounce時間后,檢測到了source打開的Vbus,之后進入正式sink連接狀態(tài)Attached.SNK, 接下來是幾種角色端口的交互行為。 Source 到 Sink: 引用TypeC SPEC: ![]() 簡單描述一下就是,source和sink通過typec連接后,source通過CC檢測到sink的下拉電阻Rd,認為有sink連接,source打開VBUS和VCONN(在另一條CC上),雙方建立連接,并且source可以通過調(diào)整上拉電阻Rp的大小來控制vRd的電壓值,sink通過檢測vRd的大小從而得知sink能從vbus上拉多大的電流。 Source 到 DRP 引用TypeC SPEC: ![]() DRP在未建立連接前,會不斷切換連接上下拉電阻Rp和Rd(具體切換細節(jié)在下面分解)。 source和DRP通過typec連接后,在DRP連接Rd時,source通過CC檢測到Rd,之后打開VBUS和VCONN;DRP檢測到source的Rp,之后等source打開Vbus后,確認轉(zhuǎn)換為sink,并正式建立連接。 DRP 到 Sink 情況與上一種情況類似,不再贅述。 DRP 到 DRP 此種情況最為復雜,因為DRP也可以分為三種角色,普通DRP,DRP try source,DRP try sink,即有些DRP,在DRP之間的連接中,會有prefer的角色,比如筆記本和手機,肯定都是DRP,但是筆記本可能會設定為try source,因為筆記本畢竟電池容量比較大,如果將筆記本和手機相連,最好還是筆記本作為source給手機充電,而不要反過來,但是筆記本與墻插充電器相連時,筆記本肯定是sink。 在typec spec中,DRP和DRP相連的行為中,提到了3個case,case2和case3就是有一方DRP是try source或try sink的情況,這兩種情況比較復雜,這里不展開了,有興趣可以詳細查閱,這里只給出case1,兩個普通DRP之間相連的情況。 ![]() 未正式建立連接時,兩個DRP都在各自不斷切換上下拉電阻,當有一時刻,DRP1是上拉電阻,DRP2是下拉電阻狀態(tài),然后接下來就和Source 到 Sink的情況是一樣的。因為兩個DRP狀態(tài)是不斷切換的,所以連接時刻的DRP各自的狀態(tài)就決定了連接后的主從關系,當然如果某一時刻兩個DRP都是上拉或下拉,那連接行為最終會失敗,DRP重新進入不斷切換狀態(tài)等待連接。 那是否會有一種極端情況,兩個DRP切換狀態(tài)太同步了,一直是同上拉,同下拉,那這兩個DRP是不是就一直不能連接了,這就涉及到了DRP切換周期的問題。 還是回溯到SPEC中: ![]() 可以看出,SPEC定義了DRP 切換source和sink的一個完整swap周期為tDRP,其中dcSRC.DRP為整個周期中DRP作為source的百分比。SPEC明確說明了,用于控制這個周期和百分比的時鐘,不能來自于一個特別準確的時鐘源如晶振或陶瓷晶振等,以此來最小化兩個DRP在配對過程中出現(xiàn)無限失敗的問題。而對于各周期的上下限也非常寬裕,所以實際情況下各DRP的周期會不盡相同,不會出現(xiàn)兩個DRP切換周期一直同步而導致的配對過程無限fail的情況。 所以結(jié)論是,兩個DRP連接結(jié)果是主從隨機的,這也符合我一開始用兩臺手機試驗的結(jié)果。 3.USB PD(Power Delivery)以上過程其實只是底層硬件上連接的一個初始化狀態(tài),正如我實際試驗中所提到的,在初始充電狀態(tài)確認之后,可以通過系統(tǒng)軟件設置來切換充電的主從,兩個手機也可以互相切換讀取對方的文件,這個就涉及到了更上層軟件的協(xié)議。 ![]() 可以看到,通過PD協(xié)議可以切換充電的source/sink,可以切換數(shù)據(jù)的DFP和UFP,也可以切換由誰來提供線纜電壓Vconn。由于軟件層面的內(nèi)容較多,目前階段不再繼續(xù)深入研究。 最后挖個坑等填,下一篇我想還是和手機充電相關,聊一聊目前最流行的兩種快速充電協(xié)議,PD和QC。 |
|