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 86cc40a..f13a8a6 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 @@ -88,7 +88,7 @@ extern uint16_t system_1s_cnt; /****************project inforamtion MTP ADDR:0x100000C0*******************/ #define SOFT_WARE_VERISION_H 0x01 -#define SOFT_WARE_VERISION_L 0x02 +#define SOFT_WARE_VERISION_L 0x04 #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 b07a62f..45d389c 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 @@ -364,4 +364,6 @@ void user_timer_event(uint8_t port); void ntc_judgment(void); #endif +void port_scp_derate(uint8_t port, bool en, uint8_t val); + #endif diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/port1_customized.h b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/port1_customized.h index dafd107..3a860fe 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/port1_customized.h +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/code/inc/port1_customized.h @@ -28,8 +28,6 @@ extern const uint8_t port1_scp_register_value[256]; extern const scp_def_vol_s PORT1_SCP_DEF_VOL[]; //scp power curve for 0xd0~0xdf. -void port1_scp_derate(bool en); - /* * @brief port1_scp_register_attr_upgrade * @param scp_param 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 e0fd421..1d735a3 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 @@ -467,6 +467,20 @@ void gate3_control(bool enable) REG_ANALOG_GATE3->bf.cp_en = enable; } +// 0x5:2/8 = 5.6W 0x9: 4/8 = 11W 0xb: 5/8 = 14W +void port_scp_derate(uint8_t port, bool en, uint8_t val) +{ + if(en) + { + // 降到 4/8。 bit0代表是否降额, 1~3代表降多少, 4~7保留置0 + g_app_protocol_param[port].dpdn_param.qc_scp_param.scp_param.scp_app_passist.derating_ratio = val; + } + else + { + g_app_protocol_param[port].dpdn_param.qc_scp_param.scp_param.scp_app_passist.derating_ratio = 0; + } +} + bool usba_online_state = false; void usba_detection(void) { @@ -478,6 +492,7 @@ void usba_detection(void) 0.1A = 47~50 0.25A = 121~124 0.65A = 325 + 1A = 500 */ uint16_t usba_current_adc = 0; @@ -521,10 +536,10 @@ void usba_detection(void) // user_app.usba_low_current_cnt, // user_app.usba_is_low_power); - // A口有负载在的时候小电流检测: 10分钟内小于300mA + // A口有负载在的时候小电流检测: 10分钟内小于1A if(usba_online_state) { - if(usba_current_adc < VOLTAGE_0P32V) + if(usba_current_adc < VOLTAGE_0P5V) { // 确定是小功率设备后就不再计时 if(!user_app.usba_is_low_power) @@ -533,14 +548,14 @@ void usba_detection(void) } // 需要只执行一次 - if(user_app.usba_low_current_cnt == 600) // 10分钟 + if(user_app.usba_low_current_cnt == 600) // 进一次是1秒,设置10分钟 { user_app.usba_low_current_cnt = 0; user_app.usba_is_low_power = true; user_app.update_adapter_state = true; // 更新一下src_cap } } - else // 检测到设备是有拉300mA以上电流的 + else if(usba_current_adc > VOLTAGE_0P55V) // 检测到设备是有拉1A以上电流的 { user_app.usba_low_current_cnt = 0; @@ -860,16 +875,16 @@ void adapter_state_check(void) user_app.update_adapter_state = false; } + // 开启全部协议, 需要关闭哪些的话在下面会关闭 + g_powerout_info[TYPEC_PORT0].support_protocol.byte = PROTOCOL_ALL_ENABLE; + g_powerout_info[TYPEC_PORT1].support_protocol.byte = PROTOCOL_ALL_ENABLE; + switch(user_app.adapter_state) { case NO_INSERT: - // 恢复最大功率, 恢复全部协议 - g_powerout_info[TYPEC_PORT0].support_protocol.byte = PROTOCOL_ALL_ENABLE; - g_powerout_info[TYPEC_PORT1].support_protocol.byte = PROTOCOL_ALL_ENABLE; + comp_powerout_default_set(TYPEC_PORT0, &g_powerout_info[TYPEC_PORT0]); + comp_powerout_default_set(TYPEC_PORT1, &g_powerout_info[TYPEC_PORT1]); - // 拔出时, 复位协议, 关闭gate3 - app_protocol_reset(TYPEC_PORT0); - app_protocol_reset(TYPEC_PORT1); gate3_control(false); user_app.need_switch_mos = false; user_app.wait_c2_switch_done = false; @@ -883,13 +898,9 @@ void adapter_state_check(void) || (user_app.last_adapter_state == C2_A_INSER) || (user_app.last_adapter_state == C1_C2_A_INSER)) { - // 恢复最大功率, 恢复全部协议 - g_powerout_info[TYPEC_PORT0].support_protocol.byte = PROTOCOL_ALL_ENABLE; - g_powerout_info[TYPEC_PORT1].support_protocol.byte = PROTOCOL_ALL_ENABLE; + comp_powerout_default_set(TYPEC_PORT0, &g_powerout_info[TYPEC_PORT0]); + comp_powerout_default_set(TYPEC_PORT1, &g_powerout_info[TYPEC_PORT1]); - // 拔出时, 复位协议, 关闭gate3 - app_protocol_reset(TYPEC_PORT0); - app_protocol_reset(TYPEC_PORT1); gate3_control(false); user_app.need_switch_mos = false; user_app.wait_c2_switch_done = false; @@ -900,8 +911,6 @@ void adapter_state_check(void) case C1_INSER: // 单C口时, 恢复全协议 need_send_cap_flag[TYPEC_PORT0] = PD_PWR_70W; - g_powerout_info[TYPEC_PORT0].support_protocol.byte = PROTOCOL_ALL_ENABLE; - g_powerout_info[TYPEC_PORT1].support_protocol.byte = PROTOCOL_ALL_ENABLE; // 关gate3, 让C2口回到5V3A gate3_control(false); @@ -912,11 +921,9 @@ void adapter_state_check(void) case C2_INSER: need_send_cap_flag[TYPEC_PORT1] = PD_PWR_70W; - g_powerout_info[TYPEC_PORT0].support_protocol.byte = PROTOCOL_ALL_ENABLE; - g_powerout_info[TYPEC_PORT1].support_protocol.byte = PROTOCOL_ALL_ENABLE; // 恢复C2口的SCP降额 - port1_scp_derate(false); + port_scp_derate(TYPEC_PORT1, false, 0); // 让第一路的电压电流和第二路的一样之后, 才把gate3打开, gate2关闭 comp_set_vol_cur(TYPEC_PORT0, @@ -932,12 +939,8 @@ void adapter_state_check(void) need_send_cap_flag[TYPEC_PORT0] = PD_PWR_35W; need_send_cap_flag[TYPEC_PORT1] = PD_PWR_35W; - // 从2C1A状态跳回来, 需要重新把协议都打开, 判断是小功率设备时, 会在下面把协议全关了 - g_powerout_info[TYPEC_PORT0].support_protocol.byte = PROTOCOL_ALL_ENABLE; - g_powerout_info[TYPEC_PORT1].support_protocol.byte = PROTOCOL_ALL_ENABLE; - // 恢复C2口的SCP降额 - port1_scp_derate(false); + port_scp_derate(TYPEC_PORT1, false, 0); // 1. 接入优先级 if(user_app.c1_priority_inser) @@ -1079,7 +1082,7 @@ void adapter_state_check(void) } // 恢复C2口的SCP降额 - port1_scp_derate(false); + port_scp_derate(TYPEC_PORT1, false, 0); // 让第一路的电压电流和第二路的一样之后, 才把gate3打开, gate2关闭 comp_set_vol_cur(TYPEC_PORT0, @@ -1097,9 +1100,10 @@ void adapter_state_check(void) // 只关QC。 PD通过发src_cap降额, SCP通过降额寄存器进行降额 g_powerout_info[TYPEC_PORT1].support_protocol.qc_support = 0; + g_powerout_info[TYPEC_PORT1].support_protocol.afc_support = 0; // C1口进行SCP降额 - port1_scp_derate(true); + port_scp_derate(TYPEC_PORT1, true, 0x9); // 如果是 PD,则不主动回5V。 如果是SCP,也不主动回5V, 如果是QC,才主动回5V if(g_powerout_info[TYPEC_PORT1].protocol_type == PROTOCOL_QC) @@ -1165,15 +1169,37 @@ void adapter_state_check(void) // 触发NTC降额, 则两个端口最大输出15W if(user_app.ntc_triggered_dera) { + // 触发降额时,不需要QC和AFC协议,只留PD和SCP + g_powerout_info[TYPEC_PORT0].support_protocol.qc_support = 0; + g_powerout_info[TYPEC_PORT1].support_protocol.qc_support = 0; + g_powerout_info[TYPEC_PORT0].support_protocol.afc_support = 0; + g_powerout_info[TYPEC_PORT1].support_protocol.afc_support = 0; + need_send_cap_flag[TYPEC_PORT0] = PD_PWR_15W; + port_scp_derate(TYPEC_PORT0, true, 0xb); if(user_app.adapter_state == C1_C2_A_INSER) { need_send_cap_flag[TYPEC_PORT1] = PD_PWR_5W; + port_scp_derate(TYPEC_PORT1, true, 0x5); } else { need_send_cap_flag[TYPEC_PORT1] = PD_PWR_15W; + port_scp_derate(TYPEC_PORT1, true, 0xb); + } + } + else // 正常温度下 + { + port_scp_derate(TYPEC_PORT0, false, 0); + + if(user_app.adapter_state == C1_C2_A_INSER) + { + port_scp_derate(TYPEC_PORT1, true, 0x9); // 降到12W + } + else + { + port_scp_derate(TYPEC_PORT1, false, 0); // 其他情况下不需要降额 } } 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 223d7c2..e09a037 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 @@ -1018,6 +1018,10 @@ pwr_request_s port0_pd_power_request(void) { pwr_request.request_vol = VOLTAGE_DEFAULT; } + else if(pwr_request.request_vol == VOLTAGE_15V) // 客户温升不过,15V需要调低0.2V + { + pwr_request.request_vol = VOLTAGE_14P8V; + } return pwr_request; } 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 9421c82..d33850f 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 @@ -347,23 +347,6 @@ const scp_cap_features_s PORT1_SCP_CAP_FEATURES = .cur_reg55 = 0x00, }; -void port1_scp_derate(bool en) -{ - if(en) - { - // 降到 4/8。 bit0代表是否降额, 1~3代表降多少, 4~7保留置0 - // g_app_protocol_param[TYPEC_PORT1].dpdn_param.qc_scp_param.scp_param.scp_prl_passist.register_value[0xa5] = 0x9; - g_app_protocol_param[TYPEC_PORT1].dpdn_param.qc_scp_param.scp_param.scp_app_passist.derating_ratio = 0x9; - } - else - { - // g_app_protocol_param[TYPEC_PORT1].dpdn_param.qc_scp_param.scp_param.scp_prl_passist.register_value[0xa5] = 0; - g_app_protocol_param[TYPEC_PORT1].dpdn_param.qc_scp_param.scp_param.scp_app_passist.derating_ratio = 0; - } - - // log_info("port1_scp_derate:%d\n", en); -} - /* * @brief port1_scp_register_attr_upgrade * @param scp_param @@ -1018,6 +1001,10 @@ pwr_request_s port1_pd_power_request(void) { pwr_request.request_vol = VOLTAGE_DEFAULT; } + else if(pwr_request.request_vol == VOLTAGE_15V) // 客户温升不过,15V需要调低0.2V + { + pwr_request.request_vol = VOLTAGE_14P8V; + } return pwr_request; } 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 d0f4c81..2d8adb4 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 590d024..d207b73 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 @@ -29,26 +29,25 @@ Project File Date: 04/21/2025 Rebuild target 'Target 1' assembling startup_CMSDK_CM0.s... compiling adapter_antifake.c... -compiling comp_primary_side.c... compiling system_CMSDK_CM0.c... -compiling port0_customized.c... -compiling comp_discharge.c... +compiling comp_auto_zero.c... +compiling main.c... compiling app_spec.c... ..\..\common\app\src\app_spec.c(177): warning: #177-D: variable "umask_val" was declared but never referenced uint32_t umask_val = 0; ..\..\common\app\src\app_spec.c: 1 warning, 0 errors -compiling port1_customized.c... compiling cps8860_it.c... -compiling comp_auto_zero.c... -compiling comp_adc.c... -compiling comp_protection.c... -compiling main.c... compiling comp_dac.c... ..\code\src\comp_dac.c(311): warning: #177-D: variable "temp" was declared but never referenced uint32_t temp[TYPEC_PORT_MAX + 1] = {0}; ..\code\src\comp_dac.c(455): warning: #177-D: function "comp_dac_cc_acdc" was declared but never referenced static void comp_dac_cc_acdc(uint8_t port, uint16_t val, uint16_t offset) ..\code\src\comp_dac.c: 2 warnings, 0 errors +compiling comp_primary_side.c... +compiling port1_customized.c... +compiling comp_protection.c... +compiling port0_customized.c... +compiling comp_adc.c... compiling comp_powerout.c... compiling customized.c... ..\code\src\customized.c(26): warning: #188-D: enumerated type mixed with another type @@ -57,20 +56,21 @@ compiling customized.c... user_app_s user_app = {0}; ..\code\src\customized.c(175): warning: #177-D: function "path_scp_mode_exit_action" was declared but never referenced static void path_scp_mode_exit_action(uint8_t port, scp_param_s *scp_param) -..\code\src\customized.c(1556): warning: #177-D: function "comp_ccloop_enable" was declared but never referenced +..\code\src\customized.c(1582): warning: #177-D: function "comp_ccloop_enable" was declared but never referenced static void comp_ccloop_enable(uint8_t port) ..\code\src\customized.c: 4 warnings, 0 errors +compiling comp_discharge.c... compiling dpdn_protocol.c... compiling qc_scp_protocol.c... +compiling ufcs_protocol.c... compiling pd_protocol.c... ..\..\common\comp\protocol\pd_protocol\src\pd_protocol.c(827): warning: #550-D: variable "pd_hw_uvdm_header" was set but never used pd_hw_uvdm_header_u pd_hw_uvdm_header = {0}; ..\..\common\comp\protocol\pd_protocol\src\pd_protocol.c(275): warning: #177-D: function "pd_analog_set" was declared but never referenced static void pd_analog_set(uint8_t port) ..\..\common\comp\protocol\pd_protocol\src\pd_protocol.c: 2 warnings, 0 errors -compiling ufcs_protocol.c... linking... -Program Size: Code=12370 RO-data=1910 RW-data=60 ZI-data=3872 +Program Size: Code=12482 RO-data=1910 RW-data=60 ZI-data=3872 FromELF: creating hex file... After Build - User command #1: .\CPS8860.bat C:\Users\TJP\Desktop\GIT_TEST\CPS8860_9196_70W\Anker_9196_CPS8860\PD_CPS8860_A1_CPS_Common_Demo\ac_project\project>set Project_Name=CPS8860_anker_9196 @@ -118,11 +118,11 @@ out_type : expected out file type 'd' output binary file(.bin) [out_file_name_without_postfix] : Option: out file name without postfix. ---------------------------------------------------------------------- -input code size: 14,340 [14.004K] - app size: 3808 ; CRC: 7354 +input code size: 14,452 [14.113K] + app size: 3878 ; CRC: E572 -out code size : 14,344 [14.008K] -create file: .\output\CPS8860_anker_9196_A1_60_V1.2_CRC6535.hex success! +out code size : 14,456 [14.117K] +create file: .\output\CPS8860_anker_9196_A1_60_V1.4_CRC6A1B.hex success! C:\Users\TJP\Desktop\GIT_TEST\CPS8860_9196_70W\Anker_9196_CPS8860\PD_CPS8860_A1_CPS_Common_Demo\ac_project\project>move /Y .\CPS8860_anker_9196_*.hex .\output һļҲļ ".\Objects\CPS8860_anker_9196.axf" - 0 Error(s), 9 Warning(s). @@ -138,7 +138,7 @@ Package Vendor: ARM D:\Keil_v5\ARM\PACK\ARM\CMSIS\5.8.0\Device\ARM\ARMCM0\Include

Collection of Component Files used:

-Build Time Elapsed: 00:00:07 +Build Time Elapsed: 00:00:05 diff --git a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.htm b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.htm index 6ca2049..ef50cad 100644 --- a/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.htm +++ b/PD_CPS8860_A1_CPS_Common_Demo/ac_project/project/Objects/CPS8860_anker_9196.htm @@ -3,9 +3,9 @@ Static Call Graph - [.\Objects\CPS8860_anker_9196.axf]

Static Call Graph for image .\Objects\CPS8860_anker_9196.axf


-

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Sat Oct 11 09:50:43 2025 +

#<CALLGRAPH># ARM Linker, 5060960: Last Updated: Mon Oct 20 16:23:05 2025

-

Maximum Stack Usage = 288 bytes + Unknown(Cycles, Untraceable Function Pointers)

+

Maximum Stack Usage = 280 bytes + Unknown(Cycles, Untraceable Function Pointers)

Call chain for Maximum Stack Depth:

main ⇒ app_spec_run ⇒ app_protocol_run ⇒ adapter_state_check ⇒ wait_c2_ready ⇒ pd_phy_open_vbus ⇒ adapter_state_check (Cycle)

@@ -595,19 +595,18 @@ Global Symbols

__scatterload_zeroinit (Thumb, 14 bytes, Stack size unknown bytes, handlers.o(i.__scatterload_zeroinit), UNUSED) -

adapter_state_check (Thumb, 846 bytes, Stack size 32 bytes, customized.o(i.adapter_state_check)) -

[Stack]

-

app_protocol_reset (Thumb, 54 bytes, Stack size 16 bytes, app_spec.o(i.app_protocol_reset)) +

app_protocol_reset (Thumb, 54 bytes, Stack size 16 bytes, app_spec.o(i.app_protocol_reset))

[Stack]


[Calls]
[Called By]

app_protocol_run (Thumb, 86 bytes, Stack size 16 bytes, customized.o(i.app_protocol_run)) -

[Stack]