Browse Source

1. 初始上电设置电流为3.3A, 开启C口或者开启A口时,再设置电流为5.5A,延迟20ms后再开启gate

2. 修改PD更新src_cap问题
master
Jipeng.tang 4 weeks ago
parent
commit
b6e731b580
  1. BIN
      PD_CPS8841H_33W.zip
  2. 8
      PD_CPS8841H_33W/code/app/src/app_porta.c
  3. 4
      PD_CPS8841H_33W/code/app/src/app_spec.c
  4. 143
      PD_CPS8841H_33W/code/app/src/comm_event.c
  5. 2
      PD_CPS8841H_33W/code/app/src/main.c
  6. 7
      PD_CPS8841H_33W/code/app/src/ntc.c
  7. 82
      PD_CPS8841H_33W/code/component/src/comp_powerout.c
  8. 10
      PD_CPS8841H_33W/code/component/src/comp_protocol_manager.c
  9. 4
      PD_CPS8841H_33W/code/platform/protocol/pd_protocol/inc/pd_protocol.h
  10. 2
      PD_CPS8841H_33W/code/platform/protocol/pd_protocol/inc/pd_send_new_src_cap.h
  11. 23
      PD_CPS8841H_33W/code/platform/protocol/pd_protocol/src/pd_send_new_src_cap.c
  12. 2
      PD_CPS8841H_33W/code/platform/protocol/pd_protocol/src/pd_typec_detect_patch.c
  13. 6
      PD_CPS8841H_33W/code/platform/protocol/qc_protocol/src/qc_protocol.c
  14. 2
      PD_CPS8841H_33W/code/prl_portable/inc/pd.h
  15. 37
      PD_CPS8841H_33W/code/prl_portable/src/pd.c

BIN
PD_CPS8841H_33W.zip

Binary file not shown.

8
PD_CPS8841H_33W/code/app/src/app_porta.c

@ -86,20 +86,12 @@ static void app_porta_detect_work(void)
if(attached) if(attached)
{ {
// 需要判断当前C口走的是什么协议, 再去更新对应的能力. 更新typeC的src_cap
// pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[SRC_CAP_20W], SRC_CAP_20W);
// pd_restart_send_src_cap(&g_pd_port);
usba_plugin_detect_deinit(); usba_plugin_detect_deinit();
usba_plugout_detect_init(); usba_plugout_detect_init();
log_info("usba attached\n"); log_info("usba attached\n");
} }
else else
{ {
// 更新typeC的src_cap
// pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[SRC_CAP_30W], SRC_CAP_30W);
// pd_restart_send_src_cap(&g_pd_port);
usba_plugout_detect_deinit(); usba_plugout_detect_deinit();
usba_plugin_detect_init(USBA_PLUGIN_DETECT_LEVEL_LOW); usba_plugin_detect_init(USBA_PLUGIN_DETECT_LEVEL_LOW);
log_info("usba detached\n"); log_info("usba detached\n");

4
PD_CPS8841H_33W/code/app/src/app_spec.c

@ -157,8 +157,8 @@ uint8_t system_init(void)
drv_delay_ms(DELAY_5MS); drv_delay_ms(DELAY_5MS);
user_app.current_src_cap_idx = SRC_CAP_30W; pd_restart_send_src_cap(&g_pd_port, SRC_CAP_30W);
user_app.first_power_cnt = DELAY_10S; // user_app.first_power_cnt = DELAY_10S;
return true; return true;
} }

143
PD_CPS8841H_33W/code/app/src/comm_event.c

@ -29,47 +29,50 @@ void ufcs_power_change_patch(uint16_t src_cap_idx)
// 参数1: 需要更新多少到多少W的src_cap 参数2: 是否需要重新发送src_cap // 参数1: 需要更新多少到多少W的src_cap 参数2: 是否需要重新发送src_cap
void updata_diff_protocol_cap(uint16_t src_cap_idx, bool send_src_cap) void updata_diff_protocol_cap(uint16_t src_cap_idx, bool send_src_cap)
{ {
// 根据当前走的协议是什么,去更新对应的src_cap pd_restart_send_src_cap(&g_pd_port, src_cap_idx);
if(dpdm_power_get_next_protocol() == PROTOCOL_UNKNOWN /*
|| dpdm_power_get_next_protocol() == PROTOCOL_APPLE // 根据当前走的协议是什么,去更新对应的src_cap
|| dpdm_power_get_next_protocol() == PROTOCOL_DCP if(dpdm_power_get_next_protocol() == PROTOCOL_UNKNOWN
|| dpdm_power_get_next_protocol() == PROTOCOL_QC_PRE || dpdm_power_get_next_protocol() == PROTOCOL_APPLE
) || dpdm_power_get_next_protocol() == PROTOCOL_DCP
{ || dpdm_power_get_next_protocol() == PROTOCOL_QC_PRE
return; )
} {
return;
log_info("%d %d %d\n", }
user_app.current_src_cap_idx,
src_cap_idx, // log_info("%d %d %d\n",
dpdm_power_get_next_protocol()); // user_app.current_src_cap_idx,
// src_cap_idx,
user_app.current_src_cap_idx = src_cap_idx; // dpdm_power_get_next_protocol());
switch(dpdm_power_get_next_protocol()) switch(dpdm_power_get_next_protocol())
{ {
case PROTOCOL_PD_FIX: case PROTOCOL_PD_FIX:
case PROTOCOL_PD_PPS: case PROTOCOL_PD_PPS:
pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[src_cap_idx], src_cap_idx); log_info("%s %d\n", __func__, __LINE__);
// pd_dpm_update_source_cap(&g_pd_port, &g_pd_port.pd_curr_config->src_cap_info[src_cap_idx], src_cap_idx);
if(send_src_cap)
{
pd_restart_send_src_cap(&g_pd_port, src_cap_idx);
}
if(send_src_cap) break;
{
pd_restart_send_src_cap(&g_pd_port);
}
break; case PROTOCOL_SCP:
break;
case PROTOCOL_SCP: #if UFCS_DERATE_SUPPORT
break;
#if UFCS_DERATE_SUPPORT case PROTOCOL_UFCS:
// 为了避免撞包问题, 按协议规定12ms内没收到包才发power_change
case PROTOCOL_UFCS: user_app.ufcs_need_send_power_change = true;
// 为了避免撞包问题, 按协议规定12ms内没收到包才发power_change break;
user_app.ufcs_need_send_power_change = true; #endif
break; }
#endif */
}
} }
// 端口状态机 // 端口状态机
@ -116,20 +119,20 @@ void port_status_run(void)
if(user_app.ntc_triggered_dera) if(user_app.ntc_triggered_dera)
{ {
user_app.current_src_cap_idx = SRC_CAP_7W; pd_restart_send_src_cap(&g_pd_port, SRC_CAP_7W);
} }
else else
{ {
user_app.current_src_cap_idx = SRC_CAP_30W; pd_restart_send_src_cap(&g_pd_port, SRC_CAP_30W);
} }
#else #else
user_app.current_src_cap_idx = SRC_CAP_30W; pd_restart_send_src_cap(&g_pd_port, SRC_CAP_30W);
#endif #endif
// 什么都没接时, 也是用buck给A口供电来检查A口是否插入 // 什么都没接时, 也是用buck给A口供电来检查A口是否插入
buck_control(true); buck_control(true);
drv_delay_ms(5); drv_delay_ms(4);
dpdm_power_a1_gate_enable(false); dpdm_power_a1_gate_enable(false);
} }
else else
@ -145,7 +148,7 @@ void port_status_run(void)
port_process_status = port_exit_status; port_process_status = port_exit_status;
// 单C口时, 常开buck, 关闭gateA, 等A口有拉电流才反过来 // 单C口时, 常开buck, 关闭gateA, 等A口有拉电流才反过来
buck_control(true); buck_control(true);
drv_delay_ms(5); drv_delay_ms(4);
dpdm_power_a1_gate_enable(false); dpdm_power_a1_gate_enable(false);
} }
else else
@ -157,20 +160,15 @@ void port_status_run(void)
if(user_app.ntc_triggered_dera && user_app.current_src_cap_idx != SRC_CAP_7W) if(user_app.ntc_triggered_dera && user_app.current_src_cap_idx != SRC_CAP_7W)
{ {
updata_diff_protocol_cap(SRC_CAP_7W, true); pd_restart_send_src_cap(&g_pd_port, SRC_CAP_7W);
} }
else if(!user_app.ntc_triggered_dera && user_app.current_src_cap_idx != SRC_CAP_30W) else if(!user_app.ntc_triggered_dera && user_app.current_src_cap_idx != SRC_CAP_30W)
{ {
updata_diff_protocol_cap(SRC_CAP_30W, true); pd_restart_send_src_cap(&g_pd_port, SRC_CAP_30W);
} }
#else #else
pd_restart_send_src_cap(&g_pd_port, SRC_CAP_30W);
if(user_app.current_src_cap_idx != SRC_CAP_30W)
{
updata_diff_protocol_cap(SRC_CAP_30W, true);
}
#endif #endif
break; break;
@ -182,7 +180,7 @@ void port_status_run(void)
// 单A口 // 单A口
dpdm_power_a1_gate_enable(true); dpdm_power_a1_gate_enable(true);
drv_delay_ms(5); drv_delay_ms(4);
buck_control(false); buck_control(false);
} }
else else
@ -193,6 +191,21 @@ void port_status_run(void)
break; break;
case TYPEC_USBA_INSER: case TYPEC_USBA_INSER:
#if NTC_ENABLE
if(user_app.ntc_triggered_dera && user_app.current_src_cap_idx != SRC_CAP_7W)
{
pd_restart_send_src_cap(&g_pd_port, SRC_CAP_7W);
}
else if(!user_app.ntc_triggered_dera && user_app.current_src_cap_idx != SRC_CAP_20W)
{
pd_restart_send_src_cap(&g_pd_port, SRC_CAP_20W);
}
#else
pd_restart_send_src_cap(&g_pd_port, SRC_CAP_20W);
#endif
if(port_process_status == port_enter_status) if(port_process_status == port_enter_status)
{ {
port_process_status = port_exit_status; port_process_status = port_exit_status;
@ -204,13 +217,13 @@ void port_status_run(void)
comp_set_current(&g_powerout_info, CURRENT_5P5A); // 需要立刻设置 comp_set_current(&g_powerout_info, CURRENT_5P5A); // 需要立刻设置
// 是否有可能电流环设置的没那么快, 一打开gateA就被拉挂了? 需要加个延迟等电流环设置完再开A? // 是否有可能电流环设置的没那么快, 一打开gateA就被拉挂了? 需要加个延迟等电流环设置完再开A?
dpdm_power_a1_gate_enable(true); dpdm_power_a1_gate_enable(true);
drv_delay_ms(5); drv_delay_ms(4);
buck_control(false); buck_control(false);
} }
else else
{ {
buck_control(true); buck_control(true);
drv_delay_ms(5); drv_delay_ms(4);
dpdm_power_a1_gate_enable(false); dpdm_power_a1_gate_enable(false);
} }
} }
@ -222,7 +235,7 @@ void port_status_run(void)
{ {
// todo: 看看是否需要延迟个1ms等待buck完全开启再关gateA // todo: 看看是否需要延迟个1ms等待buck完全开启再关gateA
buck_control(true); buck_control(true);
drv_delay_ms(5); drv_delay_ms(4);
dpdm_power_a1_gate_enable(false); dpdm_power_a1_gate_enable(false);
} }
else if(g_powerout_info.set_vol < VOLTAGE_5P5V else if(g_powerout_info.set_vol < VOLTAGE_5P5V
@ -231,31 +244,11 @@ void port_status_run(void)
{ {
comp_set_current(&g_powerout_info, CURRENT_5P5A); // 需要立刻设置 comp_set_current(&g_powerout_info, CURRENT_5P5A); // 需要立刻设置
dpdm_power_a1_gate_enable(true); dpdm_power_a1_gate_enable(true);
drv_delay_ms(5); drv_delay_ms(4);
buck_control(false); buck_control(false);
} }
} }
#if NTC_ENABLE
if(user_app.ntc_triggered_dera && user_app.current_src_cap_idx != SRC_CAP_7W)
{
updata_diff_protocol_cap(SRC_CAP_7W, true);
}
else if(!user_app.ntc_triggered_dera && user_app.current_src_cap_idx != SRC_CAP_20W)
{
updata_diff_protocol_cap(SRC_CAP_20W, true);
}
#else
if(user_app.current_src_cap_idx != SRC_CAP_20W)
{
updata_diff_protocol_cap(SRC_CAP_20W, true);
}
#endif
break; break;
} }

2
PD_CPS8841H_33W/code/app/src/main.c

@ -119,7 +119,7 @@ static const periodic_work_entry_s app_works[] =
#endif #endif
PERIODIC_WORK_ENTRY(1, 0, comm_event), PERIODIC_WORK_ENTRY(1, 0, comm_event),
PERIODIC_WORK_ENTRY(4, 3, app_port_a1_work), PERIODIC_WORK_ENTRY(4, 3, app_port_a1_work),
PERIODIC_WORK_ENTRY(1024, 0, log_output), // PERIODIC_WORK_ENTRY(1024, 0, log_output),
}; };
static void app_periodic_work(void) static void app_periodic_work(void)

7
PD_CPS8841H_33W/code/app/src/ntc.c

@ -26,7 +26,7 @@ void ntc_init(void)
void ntc_run(void) void ntc_run(void)
{ {
uint16_t ntc_val = 0; uint16_t ntc_val = 0;
static uint16_t ntc_derat_cnt = 0, ntc_recove_cnt = 0; static uint8_t ntc_derat_cnt = 0, ntc_recove_cnt = 0;
ntc_val = COMP_ADC_GET_RT1_VOL(); ntc_val = COMP_ADC_GET_RT1_VOL();
@ -69,10 +69,7 @@ void ntc_run(void)
|| dpdm_power_get_next_protocol() == PROTOCOL_PD_PPS) || dpdm_power_get_next_protocol() == PROTOCOL_PD_PPS)
{ {
// 复位协议,屏蔽PD协议, DPDN恢复短接, 电压要降回5V // 复位协议,屏蔽PD协议, DPDN恢复短接, 电压要降回5V
if(user_app.current_src_cap_idx != SRC_CAP_7W) pd_restart_send_src_cap(&g_pd_port, SRC_CAP_7W);
{
updata_diff_protocol_cap(SRC_CAP_7W, true);
}
} }
else else
{ {

82
PD_CPS8841H_33W/code/component/src/comp_powerout.c

@ -63,11 +63,19 @@ void comp_powerout_default_set(comp_powerout_info_s *powerout_info)
{ {
pwr_request_s pwr_request = pwr_request_s pwr_request =
{ {
.request_cur = CURRENT_5P5A, .request_cur = CURRENT_3P3A,
.request_vol = VOLTAGE_5V, .request_vol = VOLTAGE_5V,
}; };
// log_info("powr_def\n"); // A + C同在时, CC设为5.5A
if(typec_is_attched()
&& port_a1_is_attached()
&& pwr_request.request_vol < VOLTAGE_5P5V)
{
pwr_request.request_cur = CURRENT_5P5A;
}
log_info("powr_def, set_cur:%d\n", pwr_request.request_cur);
powerout_info->set_vol = pwr_request.request_vol; powerout_info->set_vol = pwr_request.request_vol;
powerout_info->set_current = pwr_request.request_cur; powerout_info->set_current = pwr_request.request_cur;
@ -202,8 +210,6 @@ void comp_powerout_shutdown_machine(comp_powerout_info_s *powerout_info)
{ {
log_info("pwr_shut\n"); log_info("pwr_shut\n");
comp_powerout_default_set(powerout_info); comp_powerout_default_set(powerout_info);
// comp_powerout_prl_set_viout(VOLTAGE_5V, CURRENT_3P3A);
powerout_info->power_state = PWR_RDY_CHECK; powerout_info->power_state = PWR_RDY_CHECK;
} }
@ -242,7 +248,7 @@ void comp_powerout_transmit_machine(comp_powerout_info_s *powerout_info)
if(powerout_info->set_vol > VOLTAGE_5V) if(powerout_info->set_vol > VOLTAGE_5V)
{ {
buck_control(true); buck_control(true);
drv_delay_ms(5); drv_delay_ms(4);
dpdm_power_a1_gate_enable(false); dpdm_power_a1_gate_enable(false);
} }
} }
@ -355,35 +361,35 @@ void comp_powerout_ready_machine(comp_powerout_info_s *powerout_info)
// 单C口且无协议时,电流设回正常的 3.3A // 单C口且无协议时,电流设回正常的 3.3A
// 单A口且无协议时,电流设回正常的 3.3A // 单A口且无协议时,电流设回正常的 3.3A
// 这个后续的时间暂时定为2秒 // 这个后续的时间暂时定为2秒
if(user_app.first_power_cnt == 0) // if(user_app.first_power_cnt == 0)
{ // {
if(typec_is_attched() // if(typec_is_attched()
&& !port_a1_is_attached() // && !port_a1_is_attached()
) // )
{ // {
if(dpdm_power_get_next_protocol() == PROTOCOL_UNKNOWN // if(dpdm_power_get_next_protocol() == PROTOCOL_UNKNOWN
|| dpdm_power_get_next_protocol() == PROTOCOL_APPLE // || dpdm_power_get_next_protocol() == PROTOCOL_APPLE
|| dpdm_power_get_next_protocol() == PROTOCOL_DCP // || dpdm_power_get_next_protocol() == PROTOCOL_DCP
|| dpdm_power_get_next_protocol() == PROTOCOL_QC_PRE) // || dpdm_power_get_next_protocol() == PROTOCOL_QC_PRE)
{ // {
pwr_request.request_cur = CURRENT_3P4A; // pwr_request.request_cur = CURRENT_3P4A;
} // }
} // }
if(!typec_is_attched() // if(!typec_is_attched()
&& port_a1_is_attached() // && port_a1_is_attached()
//&& (pwr_request.request_vol <= VOLTAGE_5P5V) // //&& (pwr_request.request_vol <= VOLTAGE_5P5V)
) // )
{ // {
if(dpdm_power_get_next_protocol() == PROTOCOL_UNKNOWN // if(dpdm_power_get_next_protocol() == PROTOCOL_UNKNOWN
|| dpdm_power_get_next_protocol() == PROTOCOL_APPLE // || dpdm_power_get_next_protocol() == PROTOCOL_APPLE
|| dpdm_power_get_next_protocol() == PROTOCOL_DCP // || dpdm_power_get_next_protocol() == PROTOCOL_DCP
|| dpdm_power_get_next_protocol() == PROTOCOL_QC_PRE) // || dpdm_power_get_next_protocol() == PROTOCOL_QC_PRE)
{ // {
pwr_request.request_cur = CURRENT_3P4A; // pwr_request.request_cur = CURRENT_3P4A;
} // }
} // }
} // }
if((powerout_info->last_vol != pwr_request.request_vol) || if((powerout_info->last_vol != pwr_request.request_vol) ||
@ -440,6 +446,14 @@ void comp_powerout_open_nmos(void)
goto end; goto end;
} }
// 开C口MOS前, 判断如果A口负载也在, 则把电流加大到5.5A
if(port_a1_is_attached()
&& g_powerout_info.set_vol < VOLTAGE_5P5V)
{
comp_set_current(&g_powerout_info, CURRENT_5P5A); // 需要立刻设置
drv_delay_ms(20); // 等待CC环设置完成
}
g_powerout_info.powerout_flags.bf.gate_states = true; g_powerout_info.powerout_flags.bf.gate_states = true;
comp_port_nmos_ctrl(GATE_C, true); comp_port_nmos_ctrl(GATE_C, true);
end: end:

10
PD_CPS8841H_33W/code/component/src/comp_protocol_manager.c

@ -35,6 +35,16 @@ void buck_control(bool enable)
void dpdm_power_a1_gate_enable(bool is_en) void dpdm_power_a1_gate_enable(bool is_en)
{ {
log_info("GATEA:%d\n", is_en); log_info("GATEA:%d\n", is_en);
// 开C口MOS前, 判断如果A口负载也在, 则把电流加大到5.5A
if(is_en
&& typec_is_attched()
&& g_powerout_info.set_vol < VOLTAGE_5P5V)
{
comp_set_current(&g_powerout_info, CURRENT_5P5A); // 需要立刻设置
drv_delay_ms(20); // 等待CC环设置完成
}
comp_port_nmos_ctrl(GATE_A, is_en); comp_port_nmos_ctrl(GATE_A, is_en);
} }

4
PD_CPS8841H_33W/code/platform/protocol/pd_protocol/inc/pd_protocol.h

@ -121,8 +121,8 @@ typedef struct pd_port_s
uint8_t pd_send_new_src_cap_enable; uint8_t pd_send_new_src_cap_enable;
uint8_t pd_new_src_pdo; // uint8_t pd_new_src_pdo;
const pd_pdo_info_s *pd_old_src_pdo; // const pd_pdo_info_s *pd_old_src_pdo;
#if TYPEC_INSERT_DEBOUNCE_SUPPORT #if TYPEC_INSERT_DEBOUNCE_SUPPORT
typec_inseret_deb_infos_s typec_inseret_deb_infos; typec_inseret_deb_infos_s typec_inseret_deb_infos;

2
PD_CPS8841H_33W/code/platform/protocol/pd_protocol/inc/pd_send_new_src_cap.h

@ -10,5 +10,5 @@
void pd_new_src_cap_update_work(pd_port_s *pd_port); void pd_new_src_cap_update_work(pd_port_s *pd_port);
void pd_dpm_update_source_cap(pd_port_s *pd_port, const pd_pdo_info_s *pdo, uint8_t src_cap_idx); void pd_dpm_update_source_cap(pd_port_s *pd_port, const pd_pdo_info_s *pdo, uint8_t src_cap_idx);
void pd_restart_send_src_cap(pd_port_s *pd_port); void pd_restart_send_src_cap(pd_port_s *pd_port, uint8_t src_cap_idx);
#endif #endif

23
PD_CPS8841H_33W/code/platform/protocol/pd_protocol/src/pd_send_new_src_cap.c

@ -5,21 +5,28 @@ void pd_dpm_update_source_cap(pd_port_s *pd_port, const pd_pdo_info_s *pdo, uint
{ {
pd_param_s *pd_param = &pd_port->pd_prl_param; pd_param_s *pd_param = &pd_port->pd_prl_param;
pd_port->pd_new_src_pdo = src_cap_idx; // pd_port->pd_new_src_pdo = src_cap_idx;
log_info("updata src_cap:%d\n", src_cap_idx); log_info("updata src_cap:%d\n", src_cap_idx);
log_info("cnt:%d\n", pdo->pdo_cnt);
pd_param->pd_assist.src_cap_send.pdo_cnt = pdo->pdo_cnt; pd_param->pd_assist.src_cap_send.pdo_cnt = pdo->pdo_cnt;
memcpy(&pd_param->pd_assist.src_cap_send.pd_pdos[0].byte, &pdo->pdo0, 28); memcpy(&pd_param->pd_assist.src_cap_send.pd_pdos[0].byte, &pdo->pdo0, 28);
//src ext //src ext
pd_param->pd_assist.pd_scedb.scedb_bits.src_pdp = pdo->src_pdp; pd_param->pd_assist.pd_scedb.scedb_bits.src_pdp = pdo->src_pdp;
if(!pd_port->pd_send_new_src_cap_enable) // if(!pd_port->pd_send_new_src_cap_enable)
pd_port->pd_old_src_pdo = pdo; // pd_port->pd_old_src_pdo = pdo;
} }
void pd_restart_send_src_cap(pd_port_s *pd_port) void pd_restart_send_src_cap(pd_port_s *pd_port, uint8_t src_cap_idx)
{ {
if(user_app.current_src_cap_idx == src_cap_idx)
{
return;
}
pd_port->pd_send_new_src_cap_enable = true; pd_port->pd_send_new_src_cap_enable = true;
user_app.current_src_cap_idx = src_cap_idx;
} }
@ -45,15 +52,17 @@ void pd_new_src_cap_update_work(pd_port_s *pd_port)
(pd_param->pd_pe_status.pe_status == PE_SRC_Startup) (pd_param->pd_pe_status.pe_status == PE_SRC_Startup)
) )
{ {
// log_info("%s %d\n", __func__, __LINE__);
log_info("send_cap:%d\n", user_app.current_src_cap_idx);
pd_dpm_update_source_cap(pd_port, pd_dpm_update_source_cap(pd_port,
&pd_port->pd_curr_config->src_cap_info[pd_port->pd_new_src_pdo], &pd_port->pd_curr_config->src_cap_info[user_app.current_src_cap_idx],
pd_port->pd_new_src_pdo); user_app.current_src_cap_idx);
pd_port->pd_send_new_src_cap_enable = false; pd_port->pd_send_new_src_cap_enable = false;
if(pd_param->pd_pe_status.pe_status != PE_SRC_Startup) if(pd_param->pd_pe_status.pe_status != PE_SRC_Startup)
{ {
log_info("send_cap:%d\n", pd_port->pd_send_new_src_cap_enable); // log_info("send_cap:%d\n", user_app.current_src_cap_idx);
pd_param->pd_flags.pd_process_flag.bits.ams_start_flag = (pd_param->pd_assist.pd_spec_rev == PD_VER); pd_param->pd_flags.pd_process_flag.bits.ams_start_flag = (pd_param->pd_assist.pd_spec_rev == PD_VER);
pd_param->pd_pe_status.pe_status = PE_SRC_Send_Capabilities; pd_param->pd_pe_status.pe_status = PE_SRC_Send_Capabilities;
pd_param->pd_pe_status.pe_process_status = pd_entry_status; pd_param->pd_pe_status.pe_process_status = pd_entry_status;

2
PD_CPS8841H_33W/code/platform/protocol/pd_protocol/src/pd_typec_detect_patch.c

@ -111,7 +111,7 @@ static void pd_update_typec_connect_sta(pd_port_s *pd_port)
{ {
typec_reset(pd_port); typec_reset(pd_port);
dpdm_reset(); dpdm_reset();
log_info("%s %d\n", __func__, __LINE__); // log_info("%s %d\n", __func__, __LINE__);
} }
if((pd_param->typec_status.typec_process_status == typec_enter_status) && if((pd_param->typec_status.typec_process_status == typec_enter_status) &&

6
PD_CPS8841H_33W/code/platform/protocol/qc_protocol/src/qc_protocol.c

@ -67,12 +67,6 @@ void qc_voltage_request_work(qc_port_s *qc_port)
{ {
iset = CURRENT_3P4A; iset = CURRENT_3P4A;
// A + C 且都在5V时, 在powerout里会把电流设为5.5A // A + C 且都在5V时, 在powerout里会把电流设为5.5A
// 仅测试,单A口时,实际设置3.3A能出4A
// if(!typec_is_attched() && port_a1_is_attached())
// {
// iset = CURRENT_3P3A - 400;
// }
} }
else if(qc_param->qc_assist.request_vol == 9000) else if(qc_param->qc_assist.request_vol == 9000)
{ {

2
PD_CPS8841H_33W/code/prl_portable/inc/pd.h

@ -35,7 +35,7 @@ static inline void pd_port_typec_prl_handler(pd_port_s *pd_port)
static inline void pd_port_restart_send_src_cap(pd_port_s *pd_port, const pd_pdo_info_s *new_src_pdo) static inline void pd_port_restart_send_src_cap(pd_port_s *pd_port, const pd_pdo_info_s *new_src_pdo)
{ {
pd_restart_send_src_cap(pd_port); // pd_restart_send_src_cap(pd_port);
} }

37
PD_CPS8841H_33W/code/prl_portable/src/pd.c

@ -47,29 +47,36 @@ void pd_src_cap_msg_assemble_patch(pd_param_s *pd_param)
uint16_t i; uint16_t i;
pdo_cnt = pd_param->pd_assist.src_cap_send.pdo_cnt; pdo_cnt = pd_param->pd_assist.src_cap_send.pdo_cnt;
// log_info("%s %d\n", __func__, __LINE__);
// log_info("pdo_cnt%d idx:%d\n", pdo_cnt, user_app.current_src_cap_idx);
pd_dpm_update_source_cap(&g_pd_port,
&g_pd_port.pd_curr_config->src_cap_info[user_app.current_src_cap_idx],
user_app.current_src_cap_idx);
pd_src_cap_msg_assemble(pd_param);
//find pps_pdo cnt //find pps_pdo cnt
for(i = 0; i < pdo_cnt; i++) // for(i = 0; i < pdo_cnt; i++)
{ // {
if(pd_param->pd_assist.src_cap_send.pd_pdos[i].base.type == PD_PDO_TYPE_AUG && // if(pd_param->pd_assist.src_cap_send.pd_pdos[i].base.type == PD_PDO_TYPE_AUG &&
pd_param->pd_assist.src_cap_send.pd_pdos[i].SRC_PPS_PDO_bits.Programmable_Pwr_Supply == PD_PDO_AUG_TYPE_SPR) // pd_param->pd_assist.src_cap_send.pd_pdos[i].SRC_PPS_PDO_bits.Programmable_Pwr_Supply == PD_PDO_AUG_TYPE_SPR)
{ // {
pps_cnt++; // pps_cnt++;
} // }
} // }
pdo_cnt -= (pd_param->pd_assist.pd_spec_rev == 1) ? pps_cnt : 0; // pdo_cnt -= (pd_param->pd_assist.pd_spec_rev == 1) ? pps_cnt : 0;
uint8_t len; // uint8_t len;
pd_data_msg_header_assemble(Data_Source_Cap, pdo_cnt, &pd_param->pd_assist); // pd_data_msg_header_assemble(Data_Source_Cap, pdo_cnt, &pd_param->pd_assist);
len = pdo_cnt * 4; // len = pdo_cnt * 4;
memcpy(&pd_param->pd_assist.pd_sent_pkt.pd_sent_buf[2], &pd_param->pd_assist.src_cap_send.pd_pdos[0].byte[0], len); // memcpy(&pd_param->pd_assist.pd_sent_pkt.pd_sent_buf[2], &pd_param->pd_assist.src_cap_send.pd_pdos[0].byte[0], len);
pd_param->pd_assist.pd_sent_pkt.length = len + 2; // pd_param->pd_assist.pd_sent_pkt.length = len + 2;
pd_param->pd_flags.pd_prl_flag.prl_packet_recived_from_pe = true; // pd_param->pd_flags.pd_prl_flag.prl_packet_recived_from_pe = true;
} }

Loading…
Cancel
Save