资讯详情

USB Type-C拓展DisplayPort and USB2.0(基于PD通讯)

现在我们的电脑大多只有一台Type-C为了解决这个问题,端口不能挂载多余的外设Type-C扩展码头。扩展码头是一种常用于笔记本电脑的外部设备,可以扩展和丰富笔记本电脑的外部端口,使笔记本电脑可以连接多个外部设备(如显示器,U盘、SD卡、TF卡片、投影仪等)。 说到Type-C必须提到扩展坞USB PD,想必大家都听到了USB PD会下意识地想到PD实际上,快充USB PD还有Alternate Mode等扩展功能,是的Type-C拓展码头核心知识点。下面便基于CH543D扩展设计,实现单口Type-C转Display Port口和USB 2.0口(简易版),效果演示如下:

CH543D扩展码头计划的数据协商过程是USB PD增加了快充的基础VDM数据处理也在CC在线(确定主机端和设备端)。VDM协商后,可以实现单口Type-C转Display Port和USB 2.具体协商流程如下:

1、上图为USB PD快速充电的协议流程相关分析请参考上一篇文章)。PD快充在CC在线完成后,主机将发送设备VDM类请求如下图所示:

上图为VDM协商的具体流程如下: 首先发送主机 Disc IDENT类请求(0xff008001/0xff00A001),设备进行响应回复Good CRC和ACK(0xff008041/0xff00A001)。 2、主机收到ACK响应后回复Good CRC,然后是下一个请求Disc SVID(0xff008002/0xff00A002)设备响应回复Good CRC和ACK(0xff008042/0xff00A042)。 3、主机收到ACK响应后回复Good CRC,然后进行下一步请求Disc Mode(0xff018003/0xff01A003)设备响应回复Good CRC和ACK(0xff018043/0xff01A043)。 4、主机收到ACK响应后回复Good CRC,然后是下一个请求Enter Mode 1(0xff018104/0xff01A104)设备响应回复Good CRC和ACK(0xff018144/0xff01A144)。 5、主机收到ACK响应后回复Good CRC,然后是下一个请求DP Stat POS 1(0x ff018110/0x ff01A110)设备响应回复Good CRC和ACK(0xff018150/0xff01A150)。 6、主机收到ACK响应后回复Good CRC,然后是下一个请求DP Configure POS 1(0x ff018111/0x ff01A111)设备响应回复Good CRC和ACK(0xff018151/0xff01A151)。

参考上述基本协议架构,下面开始实践。硬件采用沁恒微电子CH543D芯片,CH543D 内置了 USB Power Delivery 控制器和 PD BMC PHY 收发器,支持 USB type C、BC、PD2.0、PD3.0、PPS,还支持 12V 高压电源。PD通讯时需要的BMC编解码、4B5B编解码、CRC验证也是集成的,所以使用CH543来实现USB PD通信相对简单。 在原理图中使用Type-C公口外加1.2K下拉电阻做E-mark处理(CH543内置5.1K下拉电阻和外部1.2K并联下拉电阻为1K下拉电阻,E-mark如果使用,处理可以提高兼容性)Type-C母口需要正反插检测(需要切换差分信号)。 原理图中USB 2.0母口和Type-C母口直接连接,通过USB PD在协议沟通确认数据的主从关系后,可以实现一个USB 2.0通信接口(本文是拓展码头的简单版本,只使用USB 2.0.感兴趣的朋友可以尝试升级为USB 3.0通讯口)。 此外,值得注意的是,原理图采用多组差分线,能有效保证视频传输的稳定性和高效性。另外Display Port拉电阻的处理是重点,已经完成HPD检测处理。为了节约成本,提高性能,增加了应用USB 2.0母口同时省略了一个Type-C下载母口(图中Type-C下载用JP1排针代替),从而实现扩展码头的基本功能。

VDM消息包含:Header VDM Header 消息内容,在VDM消息中:Header下的Message Type都是一致的x0f只能判断消息是否属于VDM,不能区分VDM具体类型(如下图)。

VDM消息包含:Header VDM Header 消息内容,在VDM消息中:Header下的Message Type都是一致的x0f只能判断消息是否属于VDM,不能区分VDM具体类型(如下图)。 为了能区分VDM因此,在工程中增加了具体的数据类型VDM Header的结构体:_VDM_Hdr_Struct。结构体中的Command可用于区分VDM具体类型,代码如下:

typedef struct  {   UINT16 ModeIndex:3;  UINT16 :2;  UINT16 SVDMVer:2;  UINT16 StructuredVDM:1;    UINT16 Command:5;  UINT16 :1;  UINT16 CommandType:2;     UINT16 SVIDH8:8; //00 ff   UINT16 SVIDL8:8; } _VDM_Hdr_Struct; typedef union {  _VDM_Hdr_Struct  VDMHdrStruct;  UINT8 VDMHdrData[4]; } _Union_VDM_Hdr;

VDM可以区分数据类型后,下面解释一下VDM通信过程。前面提到过。VDM是基于USB PD快充(相关)USB PD快速充电知识点,请参考上一篇文章),下一步将围绕VDM解释VDM接收/发送的信息相对固定,因此在工程中采用数组固定,代码如下:

 /*       VDM       */ UINT8C  ACK_Disc_Ident[ ] =  {  0xc9,0x1f,0x00,0x6c,  0xa8,0x5e,0x02,0x00,  0x10,0x01,0x02,0x50,  0xdb,0x00,0x00,0x11  }; UINT8C  ACK_Disc_SVID[ ] = {0x00,0x00,0x01,0xff}; /* 四线,只支持模式C */ #if 0  //VDM 模式列表 UINT8C  ACK_Disc_Mode[ ] = {0x05,0x04,0x00,0x00}; //VDM DP状态 UINT8C  ACK_DP_Stat_Pos_1[ ] ={0x0a,0x00,0x00,0x00}; #else /* 两线,支持C D模式,prefer D模式 */ UINT8C  ACK_Disc_Mode[ ] = {0x05,0x0C,0x00,0x00}; UINT8C  ACK_DP_Stat_Pos_1[ ] = {0x1a,0x00,0x00,0x00}; #endif UINT8C DPAttention_Table[ ] =                                                //VDM DP拔插状态 {  0x06,0x81,0x01,0xff,  0x8a,0x00,0x00,0x00 }; UINT8C DPAttention_Table_1[ ] =                                                //VDM DP拔插状态 {  0x06,0x81,0x01,0xff,  0x0a,0x00,0x00,0x00 };

接下来严格按照VDM的协商流程(参考VDM协商流程图),完成相关通信。软件如下:

Recv2 = Union_Header->HeaderStruct.SpecRev; Union_VDM_Hdr = (_Union_VDM_Hdr *)&PD_RX_BUF[2];  switch(Union_VDM_Hdr->VDMHdrStruct.Command) { case 1: MsgID  ; PD_PHY_STAT.SendingACK_Disc_Ident = 1;  beak;
case 2:
MsgID++;
PD_PHY_STAT.SendingACK_Disc_SVID = 1;	
break;
case 3:
MsgID++;
PD_PHY_STAT.SendingACK_Disc_Mode = 1;
break;
case 4:
MsgID++;
PD_PHY_STAT.SendingACK_Enter_Mode = 1;
break;


case 16:
PD_PHY_STAT.SendingACK_DP_Stat_Pos_1 = 1;

MsgID++;
break;
case 17:
PD_PHY_STAT.SendingACK_DP_Configure_Pos_1 = 1;
MsgID++;
break;		
}	

 至此CH543D的VDM操作就结束了,通过以上操作便可以实现单口Type-C转Display Port口和USB 2.0口,感兴趣的小伙伴可以在此基础上继续升级改造(例如USB 3.0、U盘、SD卡、TF卡、投影仪等)。附件是硬件、软件资料,小伙伴们可以按需下载。

教你轻松实现C转DP和USB2.0(开源资料) - 单片机论坛,单片机技术交流论坛 - 21ic电子技术开发论坛

标签: 电子连接器type

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台