VR串流线DIY,CH543D

avatar
作者
筋斗云
阅读量:0

项目场景:

VR 串流线 需要具备的特点:

1.有5米以上的线长,方便联机游玩时有足够的移动空间。

2.有10Gbps高带宽,玩高端游戏时更加流畅,并具备长距离传输带宽速率不降低的特点。 普通TypeC 超过2米之后 信号会衰减,要做到长距离传输中间需要加 信号放大器 ,如果没加的线信号带宽衰减更严重。

3.线径小仅4.5mm,长距离铜介质线有7mm以上粗大线径,比较累赘。

4.重量轻5米线长仅200克,铜介质线要做到5米得有1公斤,加上头盔重量佩戴起来容易疲惫。

5.具有快充功能,新一代的笔记本都设有2个TypeC雷电接口,可以支持串流联机时给VR设备快速充电,拥有更长的游乐时间。


方案介绍:


方案分析:

C母口连接适配器,支持PD、QC诱骗最大支持100W、

A公口连接电脑,支持USB3.0、PD7.5W、

C公口连接VR,支持USB3.0、PD100W MAX、

1:先连接C公到VR,在连接A 公口到电脑,将进行USB数据通讯和PD 7.5W充电
2:先连接C公到VR,在连接C口到充电器,将转发SrcCap,最大100W充电

3:先连接C公到VR,A 公口到电脑,在接入C母口到充电器,将转发转发SrcCap,最大100W充电,同时A公口与C母口进行USB通讯

4:先连接C公到VR,C母口连接适配器,在接入A公口到电脑,将最大100W充电,同时A公口与C母口进行USB通讯


代码方案:

 #include "user_system.h"     void main(){  	SysGpioInitial();                  /* GPIO初始操作 */ 	SysCfgFsys();					             /* 时钟初始操作 */ 	SysAdcInitial();                   /* ADC初始操作  */ 	SysTimerInitial();                 /* 定时器初始化 */ 	SysUartInitial();                  /* 串口器初始化 */ 	   SysSetTimer(2000);                 /* 设置1ms定时 */           SysPdInitial();                    /* PD初始化操作 */     	 #if WDTDEBUG 	CH543WDTModeSelect(Enable); #endif 	while(1) 	{ 		  		ET0 = Disable;      /* 关闭定时器中断 */                                        		Sys_Ctrl.Tmr_Ms_Dlt = Sys_Ctrl.Tim_Ms_Cnt - Sys_Ctrl.Tim_Ms_Cnt_Last; /* 获取当前定时器差值 */   		Sys_Ctrl.Tim_Ms_Cnt_Last = Sys_Ctrl.Tim_Ms_Cnt; 		ET0 = Enable;       /* 开启定时器中断 */     		Sys_Ctrl.Det_Timer += Sys_Ctrl.Tmr_Ms_Dlt; 		if( Sys_Ctrl.Det_Timer >= 3 )         /* 3MS 进入设备状态检测 */   		{ 			Sys_Ctrl.Det_Timer = 0; 			SysStatusDet();                    /* 获取当前连接状态*/   		} 		 		SysMainProc();                       /* PD操作主函数 */  		SysCCSwitch();                       /* 轮询PD通道 */   #if WDTDEBUG 	CH543WDTFeed(0x00); #endif				 	} }
#ifndef	__USER_SYSTEM_H__ #define __USER_SYSTEM_H__ #include <stdio.h> #include <string.h> #include "CH543.H" #include "init_config.h" #include "pd_phy.h" #include "qc_phy.h"   /***************************************************/ #define  Disable             0x00 #define  Enable              0x01 /*******************-END-***************************/  /*******************-安全模式-***************************/ #define  Safe_Mode() { SAFE_MOD = 0x55; SAFE_MOD = 0xAA;} /*******************-END-***************************/   /***************************************************/ /* 系统主频 */ #define	 FREQ_SYS	        24000000	         /* 串口波特率 */ #define  UART0BUAD        115200 /* 串口打印使能 */ #define   DebugPrintf      Disable /* 看门狗使能 */ #define   WDTDEBUG         Disable /* 充电器接入是否重启VR充电  */ #define   RESTARTVR        Disable	 /* 查看CC通道 */  #define   DebugCC          Disable  /*******************-END-***************************/   /***************************************************/ /* 检测的灵敏度 */  #define   ChgDetSenty       2 #define   UsbDetSenty       2 #define   VrDetSenty        4 /*******************-END-***************************/    /***************************************************/ /* MOS控制引脚 */ sbit MOS_C_Ctrl          = P3^4;    /* C口MOS控制引脚*/ sbit MOS_A_Ctrl          = P1^5;    /* A口MOS控制引脚*/ /* CC选择引脚 */ sbit CC_Sel_Aisle        = P3^3;    /* CC选择引脚CH443K*/ /*******************-END-***************************/   /***************************************************/ /* ADC检测通道 */ #define   CC1_Det_Aisle     0x00 /* CC1 检测ADC引脚*/ #define   CC2_Det_Aisle     0x01 /* CC2 检测ADC引脚*/ #define   DP_Det_Aisle      0x08 /* DP  检测ADC引脚*/ #define   DM_Det_Aisle      0x09 /* DM  检测ADC引脚*/ #define   CV_Det_Aisle      0x0B /* C口检测ADC引脚*/ #define   AV_Det_Aisle      0x06 /* A口检测ADC引脚*/ /*******************-END-***************************/   /***************************************************/ /* C口电压比较值 */ #define  Check_V5_Max       (1034+216) #define  Check_V5_Min       (1034-216) #define  Check_V9_Max       (1861+373) #define  Check_V9_Min       (1861-373) #define  Check_V12_Max      (2482+496) #define  Check_V12_Min      (2482-496) #define  Check_V20_Max      (4140+828) #define  Check_V20_Min      (4140-828)  #define  Check_CMP_0v6      (744-223) /*******************-END-***************************/      /***************************************************/  /*充电器类型*/ #define  Initial_Charge    0x00 #define  QC_Type_Charge    0x01 #define  PD_Type_Charge    0x02  #define  NC_Type_Charge    0x04 /*******************-END-***************************/     /***************************************************/  /*端口连接类型*/ #define  NC_Link                0x00 #define  USB_Link               0x01 #define  Charge_Link            0x02 #define  VR_Link                0x04 /*******************-END-***************************/       /***************************************************/  /*电压档位*/ #define  GearsTo5V                0x01 #define  GearsTo9V                0x02 #define  GearsTo12V               0x03 #define  GearsTo15V               0x04 #define  GearsTo20V               0x05 /*******************-END-***************************/    /* System control-related structures */ typedef struct { 	UINT8    ChargeType;         /*充电器类型*/  	UINT8    ChargeGears;        /* 充电器支持的电压档位 */ 	UINT8    SysGears;           /* 系统当前请求的电压挡位 */ 	UINT8    SysPowerEN;         /* 系统输出电源使能 */ 	UINT8    LinkStatus;         /* 系统连接状态 */ 	UINT16   SysVoltage;         /* 系统当前电压 */ 	 	UINT8    Tim_Ms_Cnt;        /*系统定时器时间*/ 	UINT8    Tim_Ms_Cnt_Last;   /*系统定时器上一次时间*/ 	UINT8    Tmr_Ms_Dlt;        /*系统计时差值时间*/ 	UINT8    Det_Timer;         /*系统状态检测时间7*/ 	 }_SYS_CONTROL; extern _SYS_CONTROL  Sys_Ctrl;         void SysLinkStatusSet(UINT8 Port,bit Sta); UINT16 SysCheckAdc(UINT8 Aisle); void SysSetTimer(UINT16 Dat); void SysMainProc(void);   #endif

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!