阅读量: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