DisplayPort Alt Mode === DP Alt Mode 與 DisplayPort 關係 --- DP Alt Mode 是將 DisplayPort protocol 在 Type-C 上傳輸 |特性| DisplayPort | DP Alt Mode | |:-----:| :-----: | :--------: | |Physical layer| DisplayPort 接口 | Type-C 接口 | |Protocol layer| DP 1.4/2.0/2.1 | Type-C上傳輸DP協議| |使用機制|直接輸出在螢幕|需透過PD協商進入 Alt Mode| |頻寬分配|全部使用|與U3/U2/Power共享| DP Alt Mode 的模式 --- 在 VDM 的 `Discover Modes` 中,==UFP(Device)== and ==Active Cable== 會回覆支援哪些 Pin Assignment 等 `Enter Mode` 後,==DFP(Host) 會決定==用哪種 Pin Assignment,使用 VDM 的 `DisplayPort Configure(11h)` Command 告訴對方 #### 2-Lane DP + USB 3.2 Mode 可使用 USB 3.2 Gen 2x1 ![image](https://hackmd.io/_uploads/B1OUJwz6xe.png) #### 4-Lane DP + USB 2.0 Mode 剩下 USB2.0 ![image](https://hackmd.io/_uploads/rJmdlvfpgg.png) 進入 DP Alt Mode --- 在 USB Power Delivery 有規範如何透過 VDM [進入 DP Alt Mode](https://hackmd.io/gHb6GPHfRoadumYqJi2F2w?view=&stext=5322%3A24%3A0%3A1759918982%3ACH3b2h),以下 Base on PD3.2 #### VDM (Vendor Defined Message) VDM 由 [Message Header](https://hackmd.io/@tKhMONlATf6y7pWyO9bjwA/S1ZSuAcQkx?stext=3693%3A14%3A0%3A1759907884%3Aced7ca) + VDM Header + 0~6 個 VDO 組成 ![image](https://hackmd.io/_uploads/H1-w687Txg.png =70%x) ![image](https://hackmd.io/_uploads/BkMpmhX6eg.png =70%x) ![image](https://hackmd.io/_uploads/BJL373Xael.png =70%x) :::spoiler Structured VDM Header | Bit(s)| Field | Description| |:-----|:-----|:-----| |B31…16|Standard or<br> Vendor ID (SVID)|由 USB-IF 分配:<br>==PD SID (FF00h)==<br>==DisplayPort (FF01h)==| |B15|VDM Type|Structured VDM = 1| |B14…13| Structured VDM Version(Major)| ~~-00b: 1.0~~(Deprecated)<br>-01b: 2.x | |B12…11|Structured VDM Version(Minor)|-00b: 2.0(before PD 3.1.1.6)<br>-01b: 2.1(after PD 3.1.1.6)| |B10…8| Object Position|For the `Enter Mode`, `Exit Mode`, and `Attention` Commands:<br>-000b: Reserved<br>-001b...110b: VDO 的 index<br>111b: Exit all Active Modes<br>----------<br>For 0...3, 7...15 Commands:<br>-000b<br>-001b…111b: Reserved<br>----------<br>SVID Specific Commands 由 SVID 定義| |B7…6|Command Type|-00b: REQ<br>-01b: ACK<br>-10b: NAK<br>-11b: BUSY| |B5|Reserved|Shall be set to zero| |B4…0|Command|Standard<br>- 0 = Reserved<br>- 1 = Discover Identity<br>- 2 = Discover SVIDs<br>- 3 = Discover Modes<br>- 4 = Enter Mode<br>- 5 = Exit Mode<br>- 6 = Attention<br>- 7-15 = Reserved<br>DP專用(Vendor)<br>- 16= DisplayPort Status Update<br>- 17= DisplayPort Configure| :::spoiler Commands | Command | VDM Header SVID Field |SOP* used | | -------- | -------- | -------- | |Discover Identity|**Shall** only use the ==PD SID==.|**Shall** only use SOP/SOP’| |Discover SVIDs|**Shall** only use the ==PD SID==.|**Shall** only use SOP/SOP’| |Discover Modes|**Valid** with any SVID.|**Shall** only use SOP/SOP’| |Enter Mode|**Valid** with any SVID.|**Valid** with SOP*| |Exit Mode|**Valid** with any SVID.|**Valid** with SOP*| |Attention|**Valid** with any SVID.|**Valid** with SOP*| |SVID Specific Commands|**Valid** with any SVID.|**Valid** with SOP* (defined by SVID).| ::: :::spoiler ID Header VDO 提供產品的身份和能力資訊 | Bit(s) | Field/Description | Note | | -------- | -------- | -------- | | B31 | USB Communications Capable as USB Host | 是否有 USB Host 能力| | B30 | USB Communications Capable as USB Device | 是否有 USB Device 能力| |B29…27|![image](https://hackmd.io/_uploads/SkwHdcQpll.png)|在 ==UFP== 資料角色下的類型(無關當前的 Data Role),或 Cable Plug/VPD 的類型| |B26|Modal Operation Supported|表示在==UFP/Cable Plug== 是否支持 ++Alternate Modes++, **不管 UDP**| |B25…23|![image](https://hackmd.io/_uploads/B1iYiqQ6gl.png)|在 ==DFP== 資料角色下的類型(無關當前的 Data Role)| |B22…21|![image](https://hackmd.io/_uploads/rkkMhqQ6gl.png)|| |B20…16|Reserved|| |B15…0|USB Vendor ID|要跟 USB Device Descriptor 中的 VID 相同| ::: :::spoiler Cert Stat VDO 32-bit, **Assigned by USB-IF** ::: :::spoiler Product VDO ![image](https://hackmd.io/_uploads/SyeIgomage.png =50%x) PID: 用來識別產品 bcdDevice: Device Descriptor 內的 bcdDevice ::: :::spoiler Product Type VDO 很多種,PD3.x 有棄用一些,要看 PD2.x 的 Spec * UFP VDO * DFP VDO * Passive Cable VDO * Active Cable VDO1 * Active Cable VDO2 * VPD VDO * Alternate Mode Adapter VDO The Alternate Mode Adapter (AMA) VDO has been ++Deprecated++ ::: :::spoiler Use of Commands ![image](https://hackmd.io/_uploads/HyQ-st7Tel.png =70%x) 發起的結構: `Message Header` + `VDM Header` * Discover Identity 通常由 ==DFP== 或是 ==VCONN Source== 發起 Response: 最前面都會有 `Message Header` * ACK: `VDM Header` + `ID Header VDO` + `Cert Stat VDO` + `Product VDO` + `0-3 Product Type VDO(s)` * NAK/BUSY: `VDM Header` * Discover SVIDs 可識別已連接產品支援的 Alt Mode * Discover Modes 通常由 ==DFP== 或是 ==VCONN Source== 發起 Response: * ACK: `VDM Header` + `1-6 Mode VDOs`(==DP Capabilities (VDO in the Responder USB PD Discover Modes VDM)==) | Pin Assignment | Column 2 | | -------- | -------- | | C | 4 lanes for DP | | D | 2 lanes DP + 2 lanes USB3.x | | E | 4 lanes DP (反向 plug) | ::: ![image](https://hackmd.io/_uploads/BJnSG3NTxl.png) ==完成 Status Update UFP 還會發 Attention MSG==(如果狀態有變的話) AUX_CH and HPD === HPD --- 在純 DP connector 裡,HPD 是一條從螢幕(Sink)拉回主機(Source)的線,用來做: 1. 插入 / 拔除通知 2. 顯示模式更新(IRQ_HPD)通知 Type-沒有放 HPD pin, 因此在 DP altmod 中用 PD MSG 夾帶 HPD(Status Update、 Attention) * UFP 在進入 DP Alt Mode 之後,只有當自己的 DP 狀態改變(例如 HPD 變化、DP Source/Sink attach 改變)時,才要送 Attention, 1. HPD_High 表示 `「DP Sink認為連線存在而且 ready」` 2. HPD_Low `「DP Sink認為 HPD 已經是低」` 3. HPD State (bit 7) / IRQ_HPD (bit 8) 只在 ==「DP Sink → DP Source 方向」有意義== * 並且要「儘快」送出。 Sideband Use --- 在進入 DP Alt Mode 後,會把 SBU1 / SBU2 重新分配為 DP AUX Channel (AUX+ / AUX–) * 「AUX_CH 是 DP 中用來傳控制/管理資訊的 sideband channel」,用來做能力詢問、連線管理等。 ![image](https://hackmd.io/_uploads/BJrMqSCGWx.png =60%x) 1. Native AUX 用於控制與設定 DPCD(Display Port Configuration Data)、HDCP、Link Training 3. I2C over AUX 速度較慢,可來用傳輸EDID Ref --- [Exploring DisplayPort Alt Mode over USB-C](https://newnex.com/technology-articles-dp-alt-mode-over-usb-c.php) [USB Power Delivery](https://hackmd.io/@tKhMONlATf6y7pWyO9bjwA/S1ZSuAcQkx) [DisplayPort over Type-C 2.0入門及規格更新](https://www.graniteriverlabs.com/zh-tw/technical-blog/displayport-over-type-c-2-0-specification-updates)