diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/config.h b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/config.h index 09284ad..f46bda9 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/config.h +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/config.h @@ -44,6 +44,8 @@ #define PD_PACKAGE_CONFLICT_SOLVE 0 +#define HUAWEI_MATE80_DEBUG 1 // 这手机会请求5V 0.1A,ROM区是直接回了拒接 + extern uint16_t system_1ms_cnt; extern uint16_t system_1s_cnt; @@ -89,8 +91,8 @@ extern uint16_t system_1s_cnt; #define I2C_DC_SUPPORT 0 /****************project inforamtion MTP ADDR:0x100000C0*******************/ -#define SOFT_WARE_VERISION_H 0x01 -#define SOFT_WARE_VERISION_L 0x07 +#define SOFT_WARE_VERISION_H 0x02 +#define SOFT_WARE_VERISION_L 0x00 #define CUSTOM_ID 0xA1 #define PROJECT_ID 0x60 /**********************���칦�ܺ궨��************************************/ diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/customized.h b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/customized.h index fd46688..c9c7415 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/customized.h +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/customized.h @@ -374,4 +374,8 @@ void ntc_judgment(void); void port_scp_derate(uint8_t port, bool en, uint8_t val); bool judge_delay_set_current(uint8_t port, uint16_t val); +void typec_enter_disabled(uint8_t port, pd_param_s* pd_param); +void typec_exit_disabled(uint8_t port, pd_param_s* pd_param); +void protection_on_control(void); + #endif diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/comp_dac.c b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/comp_dac.c index bd35815..3325267 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/comp_dac.c +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/comp_dac.c @@ -73,7 +73,7 @@ void comp_dac_open_vbus(uint8_t port) if(comp_adc_get_vin12(TYPEC_PORT0) > VOLTAGE_5P5V) { comp_set_vol_cur(TYPEC_PORT1, - VOLTAGE_DEFAULT, + PORT1_VOLTAGE_DEFAULT, CURRENT_DEFAULT); user_app.need_switch_mos = true; } @@ -202,7 +202,7 @@ void comp_dac_cc_step_speed_set(uint8_t port, uint8_t speed) extern uint16_t adc_vin_start[TYPEC_PORT_MAX] ; static void comp_dac_cv_2dcdc_fb(uint8_t port, uint16_t val) { - // log_info("port:%d set_vol:%d\n", port, val); + log_info("port:%d set_vol:%d\n", port, val); /*CV_DAC = ((target - VREF)/RFBUP-VREF/RDOWN)*1000000/gm_FBCV + VOFFSET_CVFB1 */ int32_t temp[TYPEC_PORT_MAX + 1] = {0}; @@ -255,12 +255,13 @@ static void comp_dac_cv_2dcdc_fb(uint8_t port, uint16_t val) { REG_DAC_CTRL_CV0_CFG->bf.target = temp[port]; REG_DAC_CTRL_CV0_CFG->bf.enable = true; + log_info("cv0_target:0x%x\n", REG_DAC_CTRL_CV0_CFG->bf.target); } else { REG_DAC_CTRL_CV1_CFG->bf.target = temp[port]; REG_DAC_CTRL_CV1_CFG->bf.enable = true; - // log_info("cv1_target:0x%x\n", REG_DAC_CTRL_CV1_CFG->bf.target); + log_info("cv1_target:0x%x\n", REG_DAC_CTRL_CV1_CFG->bf.target); } break; diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/comp_protection.c b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/comp_protection.c index d1b28e7..cc1b12c 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/comp_protection.c +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/comp_protection.c @@ -284,6 +284,17 @@ void comp_protection_monitor(uint8_t port, protection_param_s *protection_param) pro_vpt[TYPEC_PORT1][PROT_OCP] = CURRENT_6A; } + // 触发OCP期间,直接开启保护 + if(g_powerout_info[TYPEC_PORT0].adc_sample_current > (g_powerout_info[TYPEC_PORT0].set_current + 300)) + { + user_app.protection_off_2s[TYPEC_PORT0] = 0; + } + + if(g_powerout_info[TYPEC_PORT1].adc_sample_current > (g_powerout_info[TYPEC_PORT1].set_current + 300)) + { + user_app.protection_off_2s[TYPEC_PORT1] = 0; + } + // if(protection_param->otp_derate) // { @@ -422,7 +433,9 @@ static void comp_protection_type_check(uint8_t port, protection_param_s *protect case SYS_ERR_VBUS_OCP: case SYS_ERR_CCx_OVP: case SYS_ERR_VCONN_OCP: - if(abs((comp_adc_get_vin12(port) - VOLTAGE_5V) <= VOLTAGE_0P4V)) + + // if(abs((comp_adc_get_vin12(port) - VOLTAGE_5V) <= VOLTAGE_0P4V)) + if(1) { protection_param->hiccup_time++; @@ -565,6 +578,7 @@ static void comp_protection_exit(uint8_t port, protection_param_s *protection_pa protection_param->protection_flag = false; user_app.protection_exit_cnt = DELAY_300MS; + log_info("comp_protection_exit\n"); } /** @@ -582,6 +596,7 @@ static void comp_protection_hiccup(uint8_t port, protection_param_s *protection_ app_protocol_reset(port); protection_param->hiccup_time = 0; protection_param->protect_state = PRO_HANDER; + typec_enter_disabled(port, &g_app_protocol_param[port].pd_param); break; case PRO_HANDER: @@ -589,6 +604,7 @@ static void comp_protection_hiccup(uint8_t port, protection_param_s *protection_ break; case PRO_EXIT: + typec_exit_disabled(port, &g_app_protocol_param[port].pd_param); comp_protection_exit(port, protection_param); break; } diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/customized.c b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/customized.c index 84e6087..09a0cb6 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/customized.c +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/customized.c @@ -430,7 +430,7 @@ bool judge_delay_set_current(uint8_t port, uint16_t val) user_app.last_set_current[port] = val; user_app.delay_set_current_cnt[port] = DELAY_200MS; user_app.delay_set_current_flag[port] = true; - log_info("A1_port:[%d]_set_cur:%d \n", port, user_app.last_set_current[port]); + // log_info("A1_port:[%d]_set_cur:%d \n", port, user_app.last_set_current[port]); return 0; } //3. 若是延迟时间内,再进了调流函数,延迟倒计时还没结束,则直接退出,等倒计时到了再来设置 @@ -449,7 +449,7 @@ bool judge_delay_set_current(uint8_t port, uint16_t val) } user_app.last_set_current[port] = val; - log_info("A2_port:[%d]_set_cur:%d \n", port, user_app.last_set_current[port]); + // log_info("A2_port:[%d]_set_cur:%d \n", port, user_app.last_set_current[port]); return 1; } @@ -513,9 +513,21 @@ void user_timer_event(uint8_t port) void gate3_control(bool enable) { + // 端口1处在保护状态时,不去开启gate3 + if(enable && g_protection_param.protection_param[TYPEC_PORT1].protection_flag) + { + return; + } + log_info("gate3:%d\n", enable); REG_ANALOG_GATE3->bf.driver_en = enable; REG_ANALOG_GATE3->bf.cp_en = enable; + + // 单C2时,是用gate3来替换掉gate2的, 对应的 nmos_states 需要更新下 + if(!user_app.type_c1_connect && user_app.type_c2_connect) + { + g_powerout_info[TYPEC_PORT1].powerout_flags.bf.nmos_states = enable; + } } // 0x5:2/8 = 5.6W 0x9: 4/8 = 11W 0xb: 5/8 = 14W @@ -754,10 +766,10 @@ void user_delay_ms(uint32_t cnt) for(size_t i = 0; i < cnt; i++) { drv_delay_ms(1); - pd_protocol_run(TYPEC_PORT0, &g_app_protocol_param[TYPEC_PORT0].pd_param); - pd_protocol_run(TYPEC_PORT1, &g_app_protocol_param[TYPEC_PORT1].pd_param); - dpdn_protocol_run(TYPEC_PORT0, &g_app_protocol_param[TYPEC_PORT0].dpdn_param); - dpdn_protocol_run(TYPEC_PORT1, &g_app_protocol_param[TYPEC_PORT1].dpdn_param); + // pd_protocol_run(TYPEC_PORT0, &g_app_protocol_param[TYPEC_PORT0].pd_param); + // pd_protocol_run(TYPEC_PORT1, &g_app_protocol_param[TYPEC_PORT1].pd_param); + // dpdn_protocol_run(TYPEC_PORT0, &g_app_protocol_param[TYPEC_PORT0].dpdn_param); + // dpdn_protocol_run(TYPEC_PORT1, &g_app_protocol_param[TYPEC_PORT1].dpdn_param); } } @@ -781,8 +793,8 @@ void mos_switch_control(void) user_app.need_switch_mos = false; log_info("%s %d\n", __func__, __LINE__); gate3_control(true); - // drv_delay_ms(8); - user_delay_ms(18); + drv_delay_ms(16); + // user_delay_ms(18); REG_ANALOG_GATE2->bf.driver_en = 0; REG_ANALOG_GATE2->bf.cp_en = 0; } @@ -801,8 +813,8 @@ void mos_switch_control(void) REG_ANALOG_GATE2->bf.driver_en = 1; REG_ANALOG_GATE2->bf.cp_en = 1; - // drv_delay_ms(18); // 需要等gate完全开启,8ms是否够?----> 不够,要长一点 - user_delay_ms(18); + drv_delay_ms(16); // 需要等gate完全开启,8ms是否够?----> 不够,要长一点 + // user_delay_ms(18); gate3_control(false); } @@ -826,6 +838,41 @@ void wait_c2_ready(void) } } +void protection_on_control(void) +{ +#if SWITCH_LINE_OFF_PROTECTION + + // 如果是 C1 + C2状态, 还需要判断另外一个口不在调压状态,这样才能开启总的保护 + // 不然另外一个口调压途中开启了保护,会直接触发 + if(((g_powerout_info[TYPEC_PORT0].power_state == PWR_RDY) + || (g_powerout_info[TYPEC_PORT0].power_state == PWR_STANDBY)) + && ((g_powerout_info[TYPEC_PORT1].power_state == PWR_RDY) + || (g_powerout_info[TYPEC_PORT1].power_state == PWR_STANDBY)) + && (user_app.protection_off_2s[TYPEC_PORT0] == 0) + && user_app.protection_off_flag[TYPEC_PORT0] + ) + { + user_app.protection_off_flag[TYPEC_PORT0] = false; + comp_powerout_protect_en(TYPEC_PORT0, true); + // log_info("port0_open_prote\n"); + } + + if(((g_powerout_info[TYPEC_PORT1].power_state == PWR_RDY) + || (g_powerout_info[TYPEC_PORT1].power_state == PWR_STANDBY)) + && ((g_powerout_info[TYPEC_PORT0].power_state == PWR_RDY) + || (g_powerout_info[TYPEC_PORT0].power_state == PWR_STANDBY)) + && (user_app.protection_off_2s[TYPEC_PORT1] == 0) + && user_app.protection_off_flag[TYPEC_PORT1] + ) + { + user_app.protection_off_flag[TYPEC_PORT1] = false; + comp_powerout_protect_en(TYPEC_PORT1, true); + // log_info("port1_open_prote\n"); + } + +#endif +} + /* * @brief adapter_state_check * @param NULL @@ -888,38 +935,6 @@ void adapter_state_check(void) mos_switch_control(); wait_c2_ready(); -#if SWITCH_LINE_OFF_PROTECTION - - // 如果是 C1 + C2状态, 还需要判断另外一个口不在调压状态,这样才能开启总的保护 - // 不然另外一个口调压途中开启了保护,会直接触发 - if(((g_powerout_info[TYPEC_PORT0].power_state == PWR_RDY) - || (g_powerout_info[TYPEC_PORT0].power_state == PWR_STANDBY)) - && ((g_powerout_info[TYPEC_PORT1].power_state == PWR_RDY) - || (g_powerout_info[TYPEC_PORT1].power_state == PWR_STANDBY)) - && (user_app.protection_off_2s[TYPEC_PORT0] == 0) - && user_app.protection_off_flag[TYPEC_PORT0] - ) - { - user_app.protection_off_flag[TYPEC_PORT0] = false; - comp_powerout_protect_en(TYPEC_PORT0, true); - // log_info("port0_open_prote\n"); - } - - if(((g_powerout_info[TYPEC_PORT1].power_state == PWR_RDY) - || (g_powerout_info[TYPEC_PORT1].power_state == PWR_STANDBY)) - && ((g_powerout_info[TYPEC_PORT0].power_state == PWR_RDY) - || (g_powerout_info[TYPEC_PORT0].power_state == PWR_STANDBY)) - && (user_app.protection_off_2s[TYPEC_PORT1] == 0) - && user_app.protection_off_flag[TYPEC_PORT1] - ) - { - user_app.protection_off_flag[TYPEC_PORT1] = false; - comp_powerout_protect_en(TYPEC_PORT1, true); - // log_info("port1_open_prote\n"); - } - -#endif - // 端口状态改变 或者 NTC有改变 或者一分钟倒计时结束 if(user_app.last_adapter_state == user_app.adapter_state && !user_app.update_adapter_state) @@ -934,8 +949,8 @@ void adapter_state_check(void) #if SWITCH_LINE_OFF_PROTECTION // log_info("close_prote\n"); // 每次切换gate2和gate3的时候, 关闭2秒保护, 2秒后且在ready状态再打开 - comp_powerout_protect_en(TYPEC_PORT0, false); - comp_powerout_protect_en(TYPEC_PORT1, false); + comp_powerout_off_ovp(TYPEC_PORT0, false); + comp_powerout_off_ovp(TYPEC_PORT1, false); user_app.protection_off_2s[TYPEC_PORT0] = DELAY_4S; user_app.protection_off_2s[TYPEC_PORT1] = DELAY_4S; user_app.protection_off_flag[TYPEC_PORT0] = true; @@ -987,7 +1002,7 @@ void adapter_state_check(void) // 关gate3, 让C2口回到5V3A gate3_control(false); comp_set_vol_cur(TYPEC_PORT1, - VOLTAGE_DEFAULT, + PORT1_VOLTAGE_DEFAULT, CURRENT_DEFAULT); break; @@ -1117,8 +1132,8 @@ void adapter_state_check(void) { REG_ANALOG_GATE2->bf.driver_en = 1; REG_ANALOG_GATE2->bf.cp_en = 1; - // drv_delay_ms(8); // 8ms不够开启gate2 - user_delay_ms(18); + drv_delay_ms(16); // 8ms不够开启gate2 + // user_delay_ms(18); gate3_control(false); } } @@ -1127,8 +1142,8 @@ void adapter_state_check(void) // 1. 确保gate3是关闭的 REG_ANALOG_GATE2->bf.driver_en = 1; REG_ANALOG_GATE2->bf.cp_en = 1; - // drv_delay_ms(8); - user_delay_ms(18); + drv_delay_ms(16); + // user_delay_ms(18); gate3_control(false); } @@ -1145,7 +1160,7 @@ void adapter_state_check(void) // 关gate3, 让C2口回到5V3A gate3_control(false); comp_set_vol_cur(TYPEC_PORT1, - VOLTAGE_DEFAULT, + PORT1_VOLTAGE_DEFAULT, CURRENT_DEFAULT); break; @@ -1222,8 +1237,8 @@ void adapter_state_check(void) // 先关再开, 防止功率并联反灌 REG_ANALOG_GATE2->bf.driver_en = 1; REG_ANALOG_GATE2->bf.cp_en = 1; - // drv_delay_ms(8); - user_delay_ms(18); + drv_delay_ms(16); + // user_delay_ms(18); gate3_control(false); } } @@ -1231,8 +1246,8 @@ void adapter_state_check(void) { REG_ANALOG_GATE2->bf.driver_en = 1; REG_ANALOG_GATE2->bf.cp_en = 1; - // drv_delay_ms(8); - user_delay_ms(18); + drv_delay_ms(16); + // user_delay_ms(18); gate3_control(false); } @@ -1717,6 +1732,29 @@ void system_common_init(uint8_t port) } +uint16_t average_exclude_min_max(const uint16_t data[], uint16_t length) +{ + uint32_t sum = 0; + uint16_t min = data[0]; + uint16_t max = data[0]; + + // 遍历一次,求和、找最大值和最小值 + for(int i = 0; i < length; ++i) + { + sum += data[i]; + + if(data[i] > max) max = data[i]; + + if(data[i] < min) min = data[i]; + } + + // 剔除一个最大值和一个最小值 + sum = sum - min - max; + + // 计算剩余 (length - 2) 个数的平均值 + return sum / (length - 2); +} + /* * @brief system_init * @param null @@ -1741,7 +1779,7 @@ uint8_t system_init(void) #endif __enable_irq(); - drv_delay_ms(300); + drv_delay_ms(301); #if VD_ENABLE comp_primary_side_init(); @@ -1761,12 +1799,32 @@ uint8_t system_init(void) comp_dac_2fb_patch_enable(true); // #endif - log_info("CV:%d,%d\n", REG_DAC_CTRL_CV0_CFG->bf.target, REG_DAC_CTRL_CV1_CFG->bf.target); - log_info("VIN:%d,%d,%d\n", comp_adc_get_vin12(TYPEC_PORT0), comp_adc_get_vin12(TYPEC_PORT1), COMP_ADC_GET_VIN0_VOL()); + // log_info("CV:%d,%d\n", REG_DAC_CTRL_CV0_CFG->bf.target, REG_DAC_CTRL_CV1_CFG->bf.target); + // log_info("VIN:%d,%d,%d\n", comp_adc_get_vin12(TYPEC_PORT0), comp_adc_get_vin12(TYPEC_PORT1), COMP_ADC_GET_VIN0_VOL()); + log_info("init\n"); + + uint16_t port0_vin_val[10] = {0}; + uint16_t port1_vin_val[10] = {0}; + for(size_t i = 0; i < 10; i++) + { + drv_delay_ms(DELAY_10MS); + + port0_vin_val[i] = comp_adc_get_vin12(0); + port1_vin_val[i] = comp_adc_get_vin12(1); + + log_info("vol0:%d vol1:%d\n", + port0_vin_val[i], + port1_vin_val[i]); + } + + adc_vin_start[TYPEC_PORT0] = average_exclude_min_max(port0_vin_val, 10); + adc_vin_start[TYPEC_PORT1] = average_exclude_min_max(port1_vin_val, 10); + + log_info("VIN:%d, %d\n", adc_vin_start[TYPEC_PORT0], adc_vin_start[TYPEC_PORT1]); #if TYPEC_PORT0_SUPPORT - adc_vin_start[TYPEC_PORT0] = comp_adc_get_vin12(TYPEC_PORT0); + // adc_vin_start[TYPEC_PORT0] = comp_adc_get_vin12(TYPEC_PORT0); system_common_init(TYPEC_PORT0); /*EYE TEST*/ REG_ANALOG_PD1->bf.ztx_sel = 6;//15; @@ -1775,7 +1833,7 @@ uint8_t system_init(void) #endif #if TYPEC_PORT1_SUPPORT - adc_vin_start[TYPEC_PORT1] = comp_adc_get_vin12(TYPEC_PORT1); + // adc_vin_start[TYPEC_PORT1] = comp_adc_get_vin12(TYPEC_PORT1); system_common_init(TYPEC_PORT1); /*EYE TEST*/ REG_ANALOG_PD2->bf.ztx_sel = 6;//15; @@ -1783,8 +1841,8 @@ uint8_t system_init(void) REG_ANALOG_PD2->bf.db_ibias_en = 0;//1 #endif // REG_ANALOG_GP->word |= 0xF000; - drv_delay_ms(DELAY_200MS); + drv_delay_ms(DELAY_200MS); #if PROTECTION_SUPPORT comp_protection_init(); @@ -1871,6 +1929,12 @@ void solve_huawei_matebook(uint8_t port, pd_param_s* pd_param) void port_inser_priority_judgment(void) { + // 退出保护300ms内不进行判断 + if(user_app.protection_exit_cnt) + { + return; + } + // 只有 C1 + C2 同在时才需要判接入优先级, 所以单口时不需要清零 // C1 @@ -1907,7 +1971,7 @@ void port_inser_priority_judgment(void) { user_app.c1_priority_inser = true; } - else // C2口没设备接入 + else // C1口没设备接入 { user_app.c1_priority_inser = false; } @@ -1929,7 +1993,15 @@ void typec_state_update(void) if(!g_protection_param.protection_param[TYPEC_PORT0].protection_flag) { - last_type_c1_connect = user_app.type_c1_connect; + // 从保护退出时,维持300ms的typeC状态机不变 + if(user_app.protection_exit_cnt) + { + user_app.type_c1_connect = last_type_c1_connect; + } + else // 正常状态下,每次都正常更新 + { + last_type_c1_connect = user_app.type_c1_connect; + } } else { @@ -1938,12 +2010,38 @@ void typec_state_update(void) if(!g_protection_param.protection_param[TYPEC_PORT1].protection_flag) { - last_type_c2_connect = user_app.type_c2_connect; + // 从保护退出时,维持300ms的typeC状态机不变 + if(user_app.protection_exit_cnt) + { + user_app.type_c2_connect = last_type_c2_connect; + } + else + { + last_type_c2_connect = user_app.type_c2_connect; + } } else { user_app.type_c2_connect = last_type_c2_connect; } + + // static uint8_t old_state_c1 = 0, new_state_c1 = 0; + // new_state_c1 = user_app.type_c1_connect; + + // if(old_state_c1 != new_state_c1) + // { + // old_state_c1 = new_state_c1; + // log_info("type_c1_connect:%d\n", new_state_c1); + // } + + // static uint8_t old_state_c2 = 0, new_state_c2 = 0; + // new_state_c2 = user_app.type_c2_connect; + + // if(old_state_c2 != new_state_c2) + // { + // old_state_c2 = new_state_c2; + // log_info("type_c2_connect:%d\n", new_state_c2); + // } } /* @@ -2199,3 +2297,46 @@ void app_double_dynamic_power_check(void) port0_power_check(port0_power, port1_power); port1_power_check(port0_power, port1_power); } + +void typec_enter_disabled(uint8_t port, pd_param_s* pd_param) +{ + pd_phy_int_wake_en(port, false); + pd_phy_sw1_pu_en1(port, false); + pd_phy_sw1_pu_en2(port, false); + pd_phy_sw1_vcoon_cc1(port, false); + pd_phy_sw1_vcoon_cc2(port, false); + pd_param->pd_callback2->pd_phy_close_vbus(port); + pd_phy_ctrl_en_sop(port, false); + pd_phy_ctrl_en_sop1(port, false); + pd_phy_ctrl_en_sop2(port, false); + pd_param->typec_status.typec_status = Disabled; + pd_param->typec_status.typec_process_status = typec_enter_status; + + // 关闭RP + if(port == TYPEC_PORT0) + { + drv_pd0_ctrl_host_cur(TYPEC_RP_CUR_NONE); + } + else + { + drv_pd1_ctrl_host_cur(TYPEC_RP_CUR_NONE); + } +} + +void typec_exit_disabled(uint8_t port, pd_param_s* pd_param) +{ + pd_phy_sw1_pu_en1(port, true); + pd_phy_sw1_pu_en2(port, true); + pd_param->typec_status.typec_status = UnattachedSRC; + pd_param->typec_status.typec_process_status = typec_enter_status; + + // 开启RP + if(port == TYPEC_PORT0) + { + drv_pd0_ctrl_host_cur(TYPEC_RP_CUR_3A); + } + else + { + drv_pd1_ctrl_host_cur(TYPEC_RP_CUR_3A); + } +} diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/port0_customized.c b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/port0_customized.c index 4eb25a2..9d735a1 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/port0_customized.c +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/port0_customized.c @@ -304,7 +304,7 @@ const scp_def_vol_s PORT0_SCP_DEF_VOL[] = .b_vol = PORT_C_SCP_DEFAULT_VSET, .b_cur = PORT_C_SCP_DEFAULT_ISET, - .vol = VOLTAGE_DEFAULT, + .vol = PORT0_VOLTAGE_DEFAULT, .cur = CURRENT_DEFAULT, .limit_cur = SCP_DEFAULT_ISET_BOUNDARY, @@ -592,7 +592,7 @@ pwr_request_s port0_qc_power_request(void) if(pwr_request.request_vol == VOLTAGE_5V) { - pwr_request.request_vol = VOLTAGE_DEFAULT; + pwr_request.request_vol = PORT0_VOLTAGE_DEFAULT; } return pwr_request; @@ -1004,13 +1004,6 @@ pwr_request_s port0_pd_power_request(void) if(pps_mode == 1) { - pwr_request.request_cur += CURRENT_0P1A;//CURRENT_0P1A;/**GOOGLE PEX6顶着拉载*/ - - if(pwr_request.request_cur >= CURRENT_4A) - { - pwr_request.request_cur += CURRENT_0P2A; - } - // 客户要求PPS时做恒功率: 当前广播的功率 / 当前请求的电压 pd_pdp_ma = (g_app_protocol_param[TYPEC_PORT0].pd_param.pd_assist.pd_scedb.scedb_bits.src_pdp * 1000000) / g_powerout_info[TYPEC_PORT0].prl_update_vol; @@ -1019,14 +1012,15 @@ pwr_request_s port0_pd_power_request(void) pwr_request.request_cur = pd_pdp_ma; } - log_info("pd_pdp_ma:%d\n", pd_pdp_ma); + pwr_request.request_cur += CURRENT_0P2A;//CURRENT_0P2A;/**GOOGLE PEX6顶着拉载*/ + // log_info("pd_pdp_ma:%d\n", pd_pdp_ma); } pwr_request.request_vol = g_powerout_info[TYPEC_PORT0].prl_update_vol; if(pwr_request.request_vol == VOLTAGE_5V) { - pwr_request.request_vol = VOLTAGE_DEFAULT; + pwr_request.request_vol = PORT0_VOLTAGE_DEFAULT; } else if(pwr_request.request_vol == VOLTAGE_15V) // 客户温升不过,15V需要调低0.2V { diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/port1_customized.c b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/port1_customized.c index 79a8584..cb20881 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/port1_customized.c +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/src/port1_customized.c @@ -304,7 +304,7 @@ const scp_def_vol_s PORT1_SCP_DEF_VOL[] = .b_vol = PORT_C_SCP_DEFAULT_VSET, .b_cur = PORT_C_SCP_DEFAULT_ISET, - .vol = VOLTAGE_DEFAULT, + .vol = PORT1_VOLTAGE_DEFAULT, .cur = CURRENT_DEFAULT, .limit_cur = SCP_DEFAULT_ISET_BOUNDARY, @@ -592,7 +592,7 @@ pwr_request_s port1_qc_power_request(void) if(pwr_request.request_vol == VOLTAGE_5V) { - pwr_request.request_vol = VOLTAGE_DEFAULT; + pwr_request.request_vol = PORT1_VOLTAGE_DEFAULT; } return pwr_request; @@ -986,13 +986,6 @@ pwr_request_s port1_pd_power_request(void) if(pps_mode == 1) { - pwr_request.request_cur += CURRENT_0P1A;//CURRENT_0P1A; - - if(pwr_request.request_cur >= CURRENT_4A) - { - pwr_request.request_cur += CURRENT_0P2A; - } - // 客户要求PPS时做恒功率: 当前广播的功率 / 当前请求的电压 pd_pdp_ma = (g_app_protocol_param[TYPEC_PORT1].pd_param.pd_assist.pd_scedb.scedb_bits.src_pdp * 1000000) / g_powerout_info[TYPEC_PORT1].prl_update_vol; @@ -1000,6 +993,8 @@ pwr_request_s port1_pd_power_request(void) { pwr_request.request_cur = pd_pdp_ma; } + + pwr_request.request_cur += CURRENT_0P2A; // offset } pwr_request.request_vol = g_powerout_info[TYPEC_PORT1].prl_update_vol; @@ -1007,7 +1002,7 @@ pwr_request_s port1_pd_power_request(void) // 客户要求5V时输出电压为 5.15 if(pwr_request.request_vol == VOLTAGE_5V) { - pwr_request.request_vol = VOLTAGE_DEFAULT; + pwr_request.request_vol = PORT1_VOLTAGE_DEFAULT; } else if(pwr_request.request_vol == VOLTAGE_15V) // 客户温升不过,15V需要调低0.2V { diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.axf b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.axf index a98dd85..c443a5d 100644 Binary files a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.axf and b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.axf differ diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.build_log.htm b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.build_log.htm index d3d989b..7c4d2a5 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.build_log.htm +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.build_log.htm @@ -22,7 +22,7 @@ Dialog DLL: TARMCM1.DLL V1.14.3.0