Files
checker_slave/source/elec_det/interface/EWChecker.c

1061 lines
27 KiB
C
Raw Normal View History

2023-10-07 18:15:52 +08:00
#include "EWChecker.h"
#include "EWUpdata.h"
2023-10-07 18:15:52 +08:00
#include "driver/EWDriver.h"
#include "base/delay.h"
#include "hardware/adc_cfg.h"
#include "base/utility.h"
#include "hardware/power.h"
#include "hardware/timer_cfg.h"
2023-10-08 18:27:10 +08:00
#include "debug.h"
2023-10-09 18:12:00 +08:00
#include "commend.h"
#include "mystring.h"
#include "mystdlib.h"
#include "interface/checkerext.h"
2023-10-09 18:12:00 +08:00
2023-10-10 18:03:38 +08:00
2023-10-31 18:12:21 +08:00
#define EW_CHECKER_RUN_BUF 32
uint8_t EW_Test_UID[13]="123456789ACDE";
uint8_t EW_Test_PWD[8]="FBCDabcd";
uint8_t EW_RunBuf[EW_CHECKER_RUN_BUF];
2023-10-07 18:15:52 +08:00
2023-10-31 18:12:21 +08:00
/*
@brief , R10_0p1mA_1p6mA_UC
@param0 线
@param1 0.1ms
@param2 AD值
2023-12-14 18:57:04 +08:00
@rtv0 线
2023-10-31 18:12:21 +08:00
@rtv1 线AD值的时间
*/
void EW_Test_PowerOn()
{
uint8_t uc_rtv = 0;
uint16_t us_rsult[2];
uint16_t us_max;
uint16_t us_shake;
EW_BUS_OFF;
uc_rtv = PowerCalibration_set(checker_runcfg.params[0],checker_runcfg.params[0]-1);
checker_runcfg.netid = 1;
Power_SetSampleRange_Seep(Checker_PowerOn_Sample_R,ADC_SPEED_HIGH);
//POWER_ON
delay_os_ms(100);
EW_BUS_ON;
delay_us(20);
us_rsult[1] = AD_GetChgEnergy(checker_runcfg.params[1],checker_runcfg.params[2], &us_max,&us_shake);
delay_os_ms(100);
us_rsult[0] = Power_GetBousV();
Checker_SetRtv(us_rsult,checker_runcfg.rtv_count);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief 线
@param1 线
@rtv1 线
*/
void EW_Test_SetBusV(void)
{
Checker_RunCfg_st *cfg=&checker_runcfg;
uint8_t uc_rtv = 0;
uint16_t us_h_v,us_m_v;
us_h_v = cfg->params[0];
if(us_h_v < 55)
{
uc_rtv = 1;
}else{
us_m_v = (us_h_v>>1) > 50 ? (us_h_v>>1):50;
uc_rtv |= PowerCalibration_set(us_h_v,us_m_v);
EW_BUS_ON
us_m_v = ((us_h_v/80)+2)*60;
delay_ms(us_m_v);
us_h_v = Power_GetBousV();
}
2023-12-14 18:57:04 +08:00
Checker_SetRtv(&us_h_v,cfg->rtv_count);
2023-10-31 18:12:21 +08:00
Checker_MaskResult(uc_rtv,cfg->task_info.runindex);
}
/*
@brief 线
@rtv1 线 0.1uA
2023-10-31 18:12:21 +08:00
*/
void EW_Test_BaseCur(void)
{
uint16_t ul_cur[2];
EW_DIFF_MOD_H
delay_ms(250);
ul_cur[0] = ADC_GetBaseStableCur();
EW_DIFF_MOD_L
delay_ms(100);
ul_cur[1] = ADC_GetBaseStableCur();
EW_DIFF_MOD_H
delay_ms(20);
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
Checker_SetRtv(ul_cur,checker_runcfg.rtv_count);
}
/*
@breif 使MTP擦写
@param 0 1 使
*/
void EW_Test_EnMTP(void)
{
uint8_t uc_ack = 0;
uc_ack = EW_EnWriteMTP(checker_runcfg.netid,checker_runcfg.params[0]);
2023-12-14 18:57:04 +08:00
delay_ms(5);
2023-10-31 18:12:21 +08:00
Checker_MaskResult(uc_ack,checker_runcfg.task_info.runindex);
}
/*
@brief 线 1
@param0 UID长度
@param1 使 UID对比
@param2 使
@rtv1
@rtv2
@rtv3
@rtv4
@rtv5 UID 2Bytes
@rtv6 UID 2Bytes
@rtv7 UID 2Bytes
@rtv8 UID 2Bytes
*/
void EW_Test_ReadUID(void)
{
uint8_t uc_rtv = 0;
uint8_t uc_count = 0;
uint16_t aus_temp[14];
2023-10-31 18:12:21 +08:00
uint32_t ul_temp = 0;
memset(EW_RunBuf,0,EW_CHECKER_RUN_BUF);
if(checker_runcfg.params[0] == 0)
{
checker_runcfg.params[0] = checker_runcfg.uid_len;
if(checker_runcfg.params[0] == 0)
{
checker_runcfg.params[0] = 7;
}
}
if(checker_runcfg.params[2] > 0)
{
EW_FreeBack_Prapare();
}
uc_rtv = EW_ReadUID(checker_runcfg.netid,EW_RunBuf,checker_runcfg.params[0]);
if(checker_runcfg.params[1] > 0)
{
for(uc_count = 0; uc_count < checker_runcfg.params[0];uc_count++)
{
if(checker_runcfg.writeuid[uc_count] != EW_RunBuf[uc_count])
{
uc_rtv |= 0x01;
}
}
}
memcpy(checker_runcfg.writeuid,EW_RunBuf,checker_runcfg.params[0]);
2023-10-31 18:12:21 +08:00
ul_temp = Power_ConvCur(EW_FreeBack_MaxCur,EWDriver_Sample_R);
ul_temp = (ul_temp + 500)/1000;
aus_temp[0] = ul_temp ;
aus_temp[1] = EW_FreeBack_MaxTime;
ul_temp = Power_ConvCur(EW_FreeBack_MinCur,EWDriver_Sample_R);
ul_temp = (ul_temp + 500)/1000;
aus_temp[2] = ul_temp;
aus_temp[3] = EW_FreeBack_MinTime;
uc_count = 0;
if(uc_rtv == 0)
{
checker_runcfg.uid_len = checker_runcfg.params[0];
memcpy(checker_runcfg.writeuid,EW_RunBuf,checker_runcfg.uid_len);
uc_count = (checker_runcfg.params[0]+7+1)/2;
}
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
memcpy(aus_temp+4,EW_RunBuf,16);
2023-10-31 18:12:21 +08:00
Checker_SetRtv(aus_temp,checker_runcfg.rtv_count);
}
/*
@brief
@param0 MOS选择 0/1
@param1 0:rxh 1:rxl 2:rx
@param2 1: 2:
@param3 0: 1:5ms 2:10ms 3:20ms 4:50ms 5:10ms 6:150ms 7:200ms
@param4 UID长度
@param5
@param6
*/
void EW_Test_SetRunCfg()
{
uint8_t uc_rtv = 0;
RunCfg_un run_cfg;
if(checker_runcfg.params[4] > 14)
{
checker_runcfg.params[4] = 14;
}
checker_runcfg.uid_len = checker_runcfg.params[4];
checker_runcfg.params[4] -= 7;
if(checker_runcfg.params[5] > 7)
{
checker_runcfg.params[5] = 7;
}
checker_runcfg.pwd_len = checker_runcfg.params[5];
checker_runcfg.params[5] -= 4;
if(checker_runcfg.params[6] > 31)
{
checker_runcfg.params[6] = 31;
}
run_cfg.runcfg_st.fire_mos_sw = checker_runcfg.params[0];
run_cfg.runcfg_st.vbus_rx_sg = checker_runcfg.params[1];
run_cfg.runcfg_st.vbus_mode = checker_runcfg.params[2];
run_cfg.runcfg_st.reset_run_step = checker_runcfg.params[3];
run_cfg.runcfg_st.uid_len = checker_runcfg.params[4];
run_cfg.runcfg_st.pwd_len = checker_runcfg.params[5];
run_cfg.runcfg_st.version = checker_runcfg.params[6];
run_cfg.run_cfg_buf[3] = CheckCRC_8(run_cfg.run_cfg_buf,3);
uc_rtv = EW_WriteRunCfg(checker_runcfg.netid,&run_cfg);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief
@param0 MOS选择 0/1
@param1 0:rxh 1:rxl 2:rx
@param2 1: 2:
@param3 0: 1:5ms 2:10ms 3:20ms 4:50ms 5:10ms 6:150ms 7:200ms
@param4 UID长度
@param5
@param6
*/
void EW_Test_CheckRunCfg()
{
uint8_t uc_rtv = 0;
uint16_t aus_temp[3];
RunCfg_un run_cfg;
uc_rtv = EW_ReadRunCfgVersion(checker_runcfg.netid,(uint8_t*)&run_cfg,&aus_temp[2]);
if(run_cfg.runcfg_st.fire_mos_sw != checker_runcfg.params[0])
{
uc_rtv |= 0x01;
}
if(run_cfg.runcfg_st.vbus_rx_sg != checker_runcfg.params[1])
{
2023-12-14 18:57:04 +08:00
uc_rtv |= 0x02;
2023-10-31 18:12:21 +08:00
}
if(run_cfg.runcfg_st.vbus_mode != checker_runcfg.params[2])
{
2023-12-14 18:57:04 +08:00
uc_rtv |= 0x04;
2023-10-31 18:12:21 +08:00
}
if(run_cfg.runcfg_st.reset_run_step != checker_runcfg.params[3])
{
2023-12-14 18:57:04 +08:00
uc_rtv |= 0x08;
2023-10-31 18:12:21 +08:00
}
checker_runcfg.uid_len = checker_runcfg.params[4];
if((checker_runcfg.params[4] <7 ) || (run_cfg.runcfg_st.uid_len != (checker_runcfg.params[4])-7))
{
2023-12-14 18:57:04 +08:00
uc_rtv |= 0x10;
2023-10-31 18:12:21 +08:00
}
checker_runcfg.pwd_len = checker_runcfg.params[5];
if((checker_runcfg.params[5] < 4) ||(run_cfg.runcfg_st.pwd_len != (checker_runcfg.params[5] - 4)))
{
2023-12-14 18:57:04 +08:00
uc_rtv |= 0x20;
2023-10-31 18:12:21 +08:00
}
if(run_cfg.runcfg_st.version != checker_runcfg.params[6])
{
2023-12-14 18:57:04 +08:00
uc_rtv |= 0x40;
2023-10-31 18:12:21 +08:00
}
memcpy(aus_temp,run_cfg.run_cfg_buf,4);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_SetRtv(aus_temp,checker_runcfg.rtv_count);
}
/*
@brief
@param0 2bytes
@param1 2bytes
@param2 2bytes
@param3 2bytes
*/
void EW_Test_VerifyRunCfg()
{
uint8_t uc_rtv = 0;
uint32_t ul_mask = 0;
uint32_t ul_cfg = 0;
uint8_t uc_ack = 1;
ul_mask = checker_runcfg.params[1];
ul_mask <<=16;
ul_mask |= checker_runcfg.params[0];
ul_cfg = checker_runcfg.params[3];
ul_cfg <<=16;
ul_cfg |= checker_runcfg.params[2];
//比较通过返码
uc_rtv = EW_CheckRunCfg(checker_runcfg.netid,ul_mask,ul_cfg,&uc_ack);
if(uc_ack == 0)
{
uc_rtv = 1;
}
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief
*/
void EW_Test_WriteThreedCode(void)
{
uint8_t uc_rtv = 0;
if(checker_runcfg.uid_len ==0 || checker_runcfg.uid_len > 14 \
|| checker_runcfg.pwd_len ==0 || checker_runcfg.pwd_len > 7)
{
uc_rtv = 1;
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
return;
}
memcpy(checker_runcfg.writeuid,EW_Test_UID,checker_runcfg.uid_len);
memcpy(checker_runcfg.writepwd,EW_Test_PWD,checker_runcfg.pwd_len);
memcpy(EW_RunBuf,EW_Test_UID,checker_runcfg.uid_len);
EW_RunBuf[checker_runcfg.uid_len] = CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len);
uc_rtv = EW_WriteMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1);
delay_os_ms(50);
uc_rtv = EW_WriteMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
delay_os_ms(50);
memcpy(EW_RunBuf,EW_Test_PWD,checker_runcfg.pwd_len);
EW_RunBuf[checker_runcfg.pwd_len] = CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len);
uc_rtv = EW_WriteMTP(checker_runcfg.netid,0x04,EW_RunBuf,checker_runcfg.pwd_len+1);
delay_os_ms(50);
uc_rtv = EW_WriteMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@breif
*/
void EW_Test_VerifyThreedCode(void)
{
uint8_t uc_rtv = 0;
System_State_un state;
//读UID MTP
EW_ReadMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1);
if(EW_RunBuf[checker_runcfg.uid_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,EW_Test_UID,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(1,checker_runcfg.task_info.runindex);
2023-10-31 18:12:21 +08:00
return;
}
EW_ReadMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
if(EW_RunBuf[checker_runcfg.uid_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,EW_Test_UID,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(2,checker_runcfg.task_info.runindex);
2023-10-31 18:12:21 +08:00
return;
}
//读PWD MTP
EW_ReadMTP(checker_runcfg.netid,0x04,EW_RunBuf,checker_runcfg.pwd_len+1);
if(EW_RunBuf[checker_runcfg.pwd_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,EW_Test_PWD,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(3,checker_runcfg.task_info.runindex);
2023-10-31 18:12:21 +08:00
return;
}
EW_ReadMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
if(EW_RunBuf[checker_runcfg.pwd_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,EW_Test_PWD,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(4,checker_runcfg.task_info.runindex);
2023-10-31 18:12:21 +08:00
return;
}
//读UID
uc_rtv = EW_ReadUID(checker_runcfg.netid,EW_RunBuf,checker_runcfg.uid_len);
if(0 != memcmp(EW_RunBuf,EW_Test_UID,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(5,checker_runcfg.task_info.runindex);
2023-10-31 18:12:21 +08:00
return;
}
//验证PWD
memcpy(EW_RunBuf,EW_Test_PWD,checker_runcfg.pwd_len);
delay_ms(200);
2023-10-31 18:12:21 +08:00
uc_rtv = EW_VerfyPWD(checker_runcfg.netid,EW_RunBuf,checker_runcfg.pwd_len);
if(uc_rtv > 0)
{
Checker_MaskResult(6,checker_runcfg.task_info.runindex);
2023-10-31 18:12:21 +08:00
return;
}
//读状态
delay_ms(200);
2023-10-31 18:12:21 +08:00
uc_rtv = EW_ReadState(checker_runcfg.netid,(uint8_t*)state.datas);
// if(uc_rtv > 0 || state.State_st.erprom_error >0 || state.State_st.pswd_flag == 0)
if(uc_rtv > 0 || state.State_st.pswd_flag == 0)
2023-10-31 18:12:21 +08:00
{
Checker_MaskResult(7,checker_runcfg.task_info.runindex);
2023-10-31 18:12:21 +08:00
return;
}
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
2023-10-31 18:12:21 +08:00
}
/*
@brief
@param
@param1 ms
2023-10-31 18:12:21 +08:00
@rtv 0x08
*/
void EW_Test_CheckSelf()
{
uint8_t uc_rtv = 0;
uint32_t ul_temp;
uint8_t uc_mode = checker_runcfg.params[0];
uc_rtv = EW_ChecSelf(checker_runcfg.netid,uc_mode,(uint8_t*)&ul_temp);
delay_ms(checker_runcfg.params[1]);
2023-10-31 18:12:21 +08:00
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_SetRtv((uint16_t*)ul_temp,checker_runcfg.rtv_count);
2023-10-31 18:12:21 +08:00
}
/*
@brief
@param0
@param1
@rtv0 2
@rtv1 2
*/
void EW_Test_CheckeState(void)
{
uint8_t uc_rtv;
System_State_un state;
uc_rtv = EW_ReadState(checker_runcfg.netid,(uint8_t*)state.datas);
if(uc_rtv > 0 || ((state.us_data[0] & checker_runcfg.params[0] )!= checker_runcfg.params[1]))
{
Checker_MaskResult(1,checker_runcfg.task_info.runindex);
2023-12-14 18:57:04 +08:00
Checker_SetRtv((uint16_t*)state.us_data,checker_runcfg.rtv_count);
2023-10-31 18:12:21 +08:00
return;
}
2023-12-14 18:57:04 +08:00
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
2023-10-31 18:12:21 +08:00
Checker_SetRtv((uint16_t*)state.us_data,checker_runcfg.rtv_count);
}
/*
@brief
@param0
@param1
*/
void EW_Test_Charge()
{
uint8_t uc_rtv = 0;
uc_rtv = EW_Charge(checker_runcfg.netid, checker_runcfg.params[0],checker_runcfg.params[1]);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief
@param0
@param1 线,AD值
@param2 0.1uA
@param3 ,100ms
@param4 0.1s
@rtv0 0.1ms
@rtv1 0.1uA
@rtv2 0.1Ma
@rtv3 adv
*/
void EW_Test_ChgEnergy(void)
{
uint8_t uc_charge_class = checker_runcfg.params[0];
uint16_t us_sample_timeout = checker_runcfg.params[1];
uint16_t us_adend = checker_runcfg.params[2];
uint16_t us_chgend_cur = checker_runcfg.params[3];
uint16_t us_timeout = checker_runcfg.params[4];
uint32_t ul_holdtime = checker_runcfg.params[5];
uint16_t us_array[4];
uint16_t us_energy = 0;
uint16_t us_end_cur = 2000;
uint16_t us_max_cur = 0;
uint16_t us_shake = 65535;
uint32_t ul_temp;
uint8_t uc_rtv = 0;
uc_rtv = EW_Charge(0, uc_charge_class,0);
if(us_adend > 10)
{
Power_SetSampleRange_Seep(EWChecker_ChgEnger_Sample_R,ADC_SPEED_HIGH);
delay_ms(1);
us_energy = AD_GetChgEnergy(us_sample_timeout,us_adend,&us_max_cur,&us_shake);
us_max_cur = ( Power_ConvCur(us_max_cur,EWChecker_ChgEnger_Sample_R) /100+5)/10;
ADC_CurChnnelSet(AN_MAL_CH, ADC_SPEED_MIDLE);
ul_temp = AD_CurMonitor(ul_holdtime*1000);
if(ul_temp > us_shake)
{
us_shake = ul_temp;
}
}else{
us_shake = 0;
us_max_cur = 0;
us_energy = 0;
}
us_timeout++;
us_array[0] = ADC_GetBaseStableCur();
us_array[1] = ADC_GetBaseStableCur();
us_array[2] = ADC_GetBaseStableCur();
while(us_timeout > 0)
{
us_array[3] = ADC_GetBaseStableCur();
Bubble_Sort_u16(us_array,4);
2023-10-31 18:12:21 +08:00
us_end_cur = us_array[0];
if(us_end_cur < us_chgend_cur )
{
break;
}
us_timeout--;
}
// if(us_end_cur > us_chgend_cur)
// {
// uc_rtv = 1;
// }
CurrentSampleR_Def;
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
us_array[0] = us_energy;
us_array[1] = us_end_cur;
us_array[2] = us_max_cur;
us_array[3] = us_shake;
Checker_SetRtv(us_array,checker_runcfg.rtv_count);
}
/*
@brief
*/
void EW_Test_DisChg()
{
uint8_t uc_rtv = 0;
uc_rtv = EW_DisCharge(0);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief
@param0
*/
void EW_Test_SetDelay()
{
uint8_t uc_rtv = 0;
uc_rtv = EW_SetDelay(checker_runcfg.netid,checker_runcfg.params[0]);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief
*/
void EW_Test_ReadDelay()
{
uint8_t uc_rtv = 0;
uint16_t aus_temp[2];
uc_rtv = EW_ReadDelay(checker_runcfg.netid,aus_temp);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_SetRtv(aus_temp,checker_runcfg.rtv_count);
}
/*
@brief
@param
@param
@rtv 4
*/
void EW_Test_ClkAmend()
{
uint8_t uc_rtv = 0;
uint32_t ul_temp = 0;
uc_rtv = EW_ClkAmend(checker_runcfg.netid,checker_runcfg.params[0],checker_runcfg.params[1]);
2023-12-14 18:57:04 +08:00
delay_os_ms(1000);
2023-10-31 18:12:21 +08:00
uc_rtv |= EW_ReadClkAmend(checker_runcfg.netid,&ul_temp);
ul_temp >>= 2;
Checker_SetRtv((uint16_t*)&ul_temp,checker_runcfg.rtv_count);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief
@param0
@param1 0: 1UID配置地址 2
@param2
@rtv
*/
void EW_Test_SetAddr(void)
{
uint8_t uc_rtv = 0;
uint16_t us_temp = 0;
checker_runcfg.netid = checker_runcfg.params[0];
if(checker_runcfg.params[1] == 0)
{
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
2023-12-14 18:57:04 +08:00
Checker_SetRtv(&us_temp,checker_runcfg.rtv_count);
2023-10-31 18:12:21 +08:00
return;
}
if(checker_runcfg.params[1] == 1)
{
uc_rtv = EW_SetAddrByUID(checker_runcfg.netid,checker_runcfg.writeuid,checker_runcfg.uid_len);
}else{
uc_rtv = EW_FastSetByUID (checker_runcfg.netid,checker_runcfg.params[2],checker_runcfg.writeuid,checker_runcfg.uid_len,(uint8_t*)&us_temp);
}
Checker_SetRtv(&us_temp,checker_runcfg.rtv_count);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief 11024,256
@param0
@param1
@param2
@rtv
*/
void EW_Test_Inspect(void)
{
uint8_t uc_rtv = 0;
uint16_t us_temp = 0;
uint16_t us_count = 0;
uint8_t uc_temp;
uint16_t uc_rtv_count = 0;
memset(EW_RunBuf,0,EW_CHECKER_RUN_BUF);
if(checker_runcfg.params[0] > 0 || checker_runcfg.params[1] < 1024 \
| checker_runcfg.params[0] < checker_runcfg.params[1] \
| (checker_runcfg.params[1] - checker_runcfg.params[0]) < 256)
{
uc_rtv = 1;
Checker_SetRtv(&us_temp,checker_runcfg.rtv_count);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
return;
}
uc_rtv = EW_Inspect(checker_runcfg.params[0],checker_runcfg.params[1],checker_runcfg.params[2],EW_RunBuf);
us_temp = 0;
for(us_count = 0,uc_rtv_count = 0; us_count < (checker_runcfg.params[1] - checker_runcfg.params[0]);us_count++)
{
uc_temp = EW_RunBuf[us_count >> 3];
uc_temp = uc_temp & (0x01 <<(us_count & 0x07));
if(uc_temp > 0)
{
us_temp = us_count;
uc_rtv_count++;
}
}
if(uc_rtv_count > 1)
{
uc_rtv = 1;
}
Checker_SetRtv(&us_temp,checker_runcfg.rtv_count);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief 使
*/
void EW_Test_EnBoom(void)
{
uint8_t uc_rtv = 0;
uc_rtv = EW_EnWriteMTP(0,1);
uc_rtv |= EW_SaveFireInfo(0);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief
@param0 0.01ms
@param1 AD
@param2 ms
2023-10-31 18:12:21 +08:00
*/
void EW_Test_Boom()
{
uint8_t uc_rtv;
uint16_t us_temp = 0;
uc_rtv = EW_Boom(0,0);
Power_SetSampleRange_Seep(EWChecker_ChgEnger_Sample_R,ADC_SPEED_HIGH);
ADC_GetCurADCFast();
delay_ms(checker_runcfg.params[2]);
2023-10-31 18:12:21 +08:00
if(checker_runcfg.params[0] > 0 || checker_runcfg.params[1] > 0)
{
us_temp = AD_GetBusCurUp(checker_runcfg.params[1],checker_runcfg.params[0]);
}
Checker_SetRtv(&us_temp,checker_runcfg.rtv_count);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief BootLoader
@param0 0 1
*/
void EW_Test_RunBoot()
{
uint8_t uc_rtv = 0;
uc_rtv = EW_RunBootLoader(0,checker_runcfg.params[0]);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief MTP
@param0 MTP地址
@param1
@param2
*/
void EW_Test_WriteFacBuff()
{
uint8_t uc_rtv = 0;
uint8_t uc_mtpAddr = checker_runcfg.params[0] >> 2;
uint8_t uc_bufIndex = checker_runcfg.params[1];
uint8_t uc_writeCount = checker_runcfg.params[2];
//Checker_FacBuf 验证合法性
if(0 != Checker_FacBufCheck())
{
uc_rtv = 1;
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
return;
}
uc_rtv = EW_WriteMTP(checker_runcfg.netid,uc_mtpAddr,(Checker_FacBuf+2+uc_bufIndex),uc_writeCount);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
return;
}
/*
@brief OTP内部与缓存比较
@param0 OTP起始地址
@param1
@param2
*/
void EW_Test_VerifyFacBuff(void)
{
uint8_t uc_rtv = 0;
uint8_t uc_mtpAddr = checker_runcfg.params[0] >> 2;
uint8_t uc_bufIndex = checker_runcfg.params[1];
uint8_t uc_verifyCount = checker_runcfg.params[2];
uint8_t uc_count = 0;
if(0 != Checker_FacBufCheck())
{
uc_rtv = 1;
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
return;
}
EW_ReadMTP(checker_runcfg.netid,uc_mtpAddr,EW_RunBuf,uc_verifyCount);
uc_bufIndex += 2;
for(uc_count = 0; uc_count < uc_verifyCount; uc_count++,uc_bufIndex++)
{
if(EW_RunBuf[uc_count] != Checker_FacBuf[uc_bufIndex])
{
break;
}
}
uc_rtv = 0;
if(uc_verifyCount != uc_count)
{
uc_rtv = 1;
}
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
return;
}
/*
@brief
*/
2023-10-07 18:15:52 +08:00
void EW_Test_PowerOFF(void)
{
uint8_t uc_rtv = 0;
delay_os_ms(100);
XTBUS_OFF;
2023-10-09 18:12:00 +08:00
PowerCalibration_set(POWER_DEF_V,45);
POWER_OFF;
2023-10-07 18:15:52 +08:00
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@brief
*/
void EW_Test_WriteUID(void)
{
uint8_t uc_rtv = 0;
if(JQXT_Test_IsNeedBind() == 0)
{
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
return;
}
memcpy(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len);
EW_RunBuf[checker_runcfg.uid_len] = CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1);
delay_os_ms(50);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
delay_os_ms(50);
memcpy(EW_RunBuf,checker_runcfg.writepwd,checker_runcfg.pwd_len);
EW_RunBuf[checker_runcfg.pwd_len] = CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x04,EW_RunBuf,checker_runcfg.pwd_len+1);
delay_os_ms(50);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@breif
*/
void EW_Test_VerifyUID(void)
{
uint8_t uc_rtv = 0;
System_State_un state;
if(JQXT_Test_IsNeedBind() == 0)
{
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
return;
}
//读UID MTP
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
EW_ReadMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1);
if(EW_RunBuf[checker_runcfg.uid_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(1,checker_runcfg.task_info.runindex);
return;
}
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
EW_ReadMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
if(EW_RunBuf[checker_runcfg.uid_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(2,checker_runcfg.task_info.runindex);
return;
}
//读PWD MTP
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
EW_ReadMTP(checker_runcfg.netid,0x04,EW_RunBuf,checker_runcfg.pwd_len+1);
if(EW_RunBuf[checker_runcfg.pwd_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,checker_runcfg.writepwd,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(3,checker_runcfg.task_info.runindex);
return;
}
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
EW_ReadMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
if(EW_RunBuf[checker_runcfg.pwd_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,checker_runcfg.writepwd,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(4,checker_runcfg.task_info.runindex);
return;
}
//读UID
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
uc_rtv = EW_ReadUID(checker_runcfg.netid,EW_RunBuf,checker_runcfg.uid_len);
if(0 != memcmp(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(5,checker_runcfg.task_info.runindex);
return;
}
//验证PWD
memcpy(EW_RunBuf,checker_runcfg.writepwd,checker_runcfg.pwd_len);
delay_ms(200);
uc_rtv = EW_VerfyPWD(checker_runcfg.netid,EW_RunBuf,checker_runcfg.pwd_len);
if(uc_rtv > 0)
{
Checker_MaskResult(6,checker_runcfg.task_info.runindex);
return;
}
//读状态
delay_ms(200);
uc_rtv = EW_ReadState(checker_runcfg.netid,(uint8_t*)state.datas);
// if(uc_rtv > 0 || state.State_st.erprom_error >0 || state.State_st.pswd_flag == 0)
if(uc_rtv > 0 || state.State_st.pswd_flag == 0)
{
Checker_MaskResult(7,checker_runcfg.task_info.runindex);
return;
}
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
}
// 读mtp
void EW_Test_ReadMTP(void)
{
uint8_t uc_rtv=0;
uint8_t addr=checker_runcfg.params[0];
uint8_t len=checker_runcfg.params[1];
delay_ms(50);
uc_rtv|EW_ReadMTP(checker_runcfg.netid,addr,EW_RunBuf,len);
Checker_SetRtv((uint16_t *)EW_RunBuf,checker_runcfg.rtv_count);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
// 写mtp
void EW_Test_WriteMTP(void)
{
uint8_t uc_rtv=0;
uint8_t addr=checker_runcfg.params[0];
uint8_t len=checker_runcfg.params[1];
delay_ms(50);
memcpy(EW_RunBuf,&checker_runcfg.params[1],len);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,addr,EW_RunBuf,len);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
2023-10-07 18:15:52 +08:00
void EW_Empty(void)
{
Checker_RunCfg_st *cfg=&checker_runcfg;
int count=cfg->rtv_count;
while(count > 0)
{
cfg->Test_Rtv[cfg->rtv_index++] = 0;
count--;
}
Checker_MaskResult(0,cfg->task_info.runindex);
}
2023-10-07 18:15:52 +08:00
CheckerTask ewtaskArray[CHECKER_MAXID_COUNT] ={
2023-10-31 18:12:21 +08:00
Checker_PowerPrapare, //0 电源准备
Checker_WaitDelay, //1 延时等待
Checker_ResistorSample, //2 桥丝电阻测试
EW_Test_PowerOn, //3 上电充能
EW_Test_SetBusV, //4 设置总线电压
EW_Test_BaseCur, //5 获取总线电流
EW_Test_EnMTP , //6 使能MTP
EW_Test_ReadUID, //7 扫描UID
EW_Test_SetRunCfg, //8 写配置参数
EW_Test_CheckRunCfg, //9 检测配置
EW_Test_VerifyRunCfg, //10 验证配置
EW_Test_WriteThreedCode, //11 模拟注码
2023-12-14 18:50:43 +08:00
EW_Test_VerifyThreedCode, //12 验证三码数据
2023-10-31 18:12:21 +08:00
EW_Test_CheckSelf, //13 芯片自检
EW_Test_CheckeState, //14状态检测
EW_Test_Charge, //15 充电
2023-10-31 18:12:21 +08:00
EW_Test_DisChg, //16 放电
EW_Test_SetDelay, //17写延时
EW_Test_ReadDelay, //18读延时
EW_Test_ClkAmend, //19时钟校准
EW_Test_SetAddr, //20设置通信地址
EW_Test_Inspect, //21状态巡检
EW_Test_EnBoom, //22起爆使能
EW_Test_Boom, //23起爆检测
EW_Test_WriteFacBuff, //24缓存数据写入MTP
EW_Test_VerifyFacBuff, //25验证缓存数据
EW_Test_PowerOFF, //26 关总线
EW_Updata, //27 升级
EW_Test_ChgEnergy, //28 充能统计
CheckerExt_CalcErr, //29 计算异常
CheckerExt_Repeat, //30 重新执行一次指定任务
EW_Test_WriteUID, //31 写入三码数据
EW_Test_VerifyUID, //32 验证三码数据
CheckerExt_SetUID, //33 配置三码数据到小板
CheckerExt_Slot, //34 任务插槽
EW_Test_ReadMTP, //35 读取mtp
EW_Test_WriteMTP, //36 写入mtp
CheckerExt_SetCbv, //37 设置电阻校准值
2023-10-31 18:12:21 +08:00
(void*)0 //数组结束
2023-10-07 18:15:52 +08:00
};