全流程升级验证成功
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
#include "hardware/power.h"
|
||||
#include "ewdriver.h"
|
||||
#include "hardware/timer_cfg.h"
|
||||
#include "debug.h"
|
||||
|
||||
static volatile EWBus_Mod_en bus_mod = OFF_MOD;
|
||||
static volatile CurrentSample_Range_eu buscurrent_range = Current_Max;
|
||||
@@ -474,6 +475,13 @@ static uint8_t SMod_FireBusReadPlus(uint16_t* plus_h, uint16_t* plus_t,uint16_t
|
||||
static uint16_t us_plus_H,us_plus_H2;//高电平采用次数
|
||||
static uint16_t us_plus_T,us_plus_T2;//采样周期
|
||||
uint16_t idle_line = 0;
|
||||
typedef struct{
|
||||
uint16_t cur_idle;
|
||||
uint16_t cur_idle_ad;
|
||||
uint16_t cur_high_value;
|
||||
uint16_t cur_idle_line;
|
||||
uint16_t cur_max;
|
||||
}firebus_def;
|
||||
uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out)
|
||||
{
|
||||
uint32_t ul_ad_sample;
|
||||
@@ -483,7 +491,8 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out)
|
||||
uint32_t us_dataT_Or;//数据周期
|
||||
uint32_t us_temp1,us_temp2;
|
||||
uint16_t ad_max = 0,ad_max_temp = 0;
|
||||
uint16_t ad_high_value=0;
|
||||
firebus_def fire_dat={0};
|
||||
uint8_t ret=0;
|
||||
CurrentSample_Range_eu range = buscurrent_range;//档位保存
|
||||
Power_SetSampleCurrentRange(R10_2mA_30mA_MC);
|
||||
ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_HFAST);
|
||||
@@ -498,6 +507,8 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out)
|
||||
//获取中电平电流
|
||||
PBout(I2IC_SCL_Pin_Nu) = 1 ;
|
||||
DMod_GetIdle2V();
|
||||
fire_dat.cur_idle=SMod_Read_Idle_C;
|
||||
fire_dat.cur_idle_ad=ADC_GetCurADCFast();
|
||||
PBout(I2IC_SCL_Pin_Nu) = 0 ;
|
||||
//读取指定长度数据
|
||||
//读取单字节数据
|
||||
@@ -513,25 +524,30 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out)
|
||||
ad_max = ul_ad_sample;
|
||||
if(ul_ad_sample > SMod_Read_Idle_C)
|
||||
{
|
||||
us_plus_H++;
|
||||
ad_high_value=ad_high_value/2+ul_ad_sample/2;
|
||||
if(ul_ad_sample-SMod_Read_Idle_C>50){
|
||||
us_plus_H++;
|
||||
fire_dat.cur_high_value=fire_dat.cur_high_value/2+ul_ad_sample/2;
|
||||
}else{
|
||||
SMod_Read_Idle_C=ul_ad_sample;
|
||||
}
|
||||
}else{
|
||||
us_plus_H = 0;
|
||||
ad_high_value=0;
|
||||
fire_dat.cur_high_value=0;
|
||||
}
|
||||
delay_us(2);
|
||||
us_time_out--;
|
||||
}
|
||||
while((us_plus_H < 4) && (us_time_out > 0));
|
||||
fire_dat.cur_max=ad_max;
|
||||
if(us_time_out < 1)//等待起始信号超时
|
||||
{
|
||||
EW_DIFF_MOD_H;
|
||||
Power_SetSampleCurrentRange(range);
|
||||
return 1;
|
||||
ret=1;
|
||||
goto end;
|
||||
}
|
||||
|
||||
// 空闲判线以最高电平为基准
|
||||
SMod_Read_Idle_C=ad_high_value-50;
|
||||
SMod_Read_Idle_C=(SMod_Read_Idle_C+fire_dat.cur_high_value)/2;
|
||||
fire_dat.cur_idle_line=SMod_Read_Idle_C;
|
||||
|
||||
while(len > 0)
|
||||
{
|
||||
@@ -548,9 +564,8 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out)
|
||||
// idle_line = (idle_line>>1)+ (idle_line>>4)+ SMod_Read_Idle_C;
|
||||
if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0)
|
||||
{
|
||||
EW_DIFF_MOD_H;
|
||||
Power_SetSampleCurrentRange(range);
|
||||
return 2;
|
||||
ret=2;
|
||||
goto end;
|
||||
}
|
||||
if(us_plus_H2 > (us_plus_T2- us_plus_H2))
|
||||
{
|
||||
@@ -602,34 +617,37 @@ uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out)
|
||||
idle_line = SMod_Read_Idle_C;
|
||||
if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0)
|
||||
{
|
||||
EW_DIFF_MOD_H;
|
||||
Power_SetSampleCurrentRange(range);
|
||||
return 4;
|
||||
ret=4;
|
||||
goto end;
|
||||
}
|
||||
ad_max = (uint16_t)(ad_max * 0.7f + ad_max_temp*0.3f);
|
||||
us_time_out++;
|
||||
}while(us_time_out < 13);
|
||||
if(ul_check_falg == 0)
|
||||
{
|
||||
EW_DIFF_MOD_H;
|
||||
Power_SetSampleCurrentRange(range);
|
||||
return 5;
|
||||
ret=5;
|
||||
goto end;
|
||||
}
|
||||
if(us_time_out != 9)
|
||||
{
|
||||
EW_DIFF_MOD_H;
|
||||
Power_SetSampleCurrentRange(range);
|
||||
return 6;
|
||||
ret=6;
|
||||
goto end;
|
||||
}
|
||||
ul_data >>= 2;
|
||||
*buf = (uint8_t)ul_data;
|
||||
buf++;
|
||||
len--;
|
||||
}
|
||||
delay_us(time_out >> 1);
|
||||
//delay_us(time_out >> 1);
|
||||
|
||||
end:
|
||||
EW_DIFF_MOD_H;
|
||||
Power_SetSampleCurrentRange(range);
|
||||
return 0;
|
||||
if(ret){
|
||||
DBG_LOG("cur_idle=%d,high_value=%d,idle_line=%d.",fire_dat.cur_idle, fire_dat.cur_high_value,fire_dat.cur_idle_line);
|
||||
DBG_LOG("cur_max=%d,cur_idle_ad=%d",fire_dat.cur_max,fire_dat.cur_idle_ad);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -745,7 +763,8 @@ void DMod_SendBytes(uint8_t* buf, uint8_t len, uint16_t pre,uint8_t rw_flag)
|
||||
*/
|
||||
void DMod_SendBytesXor(uint8_t* buf, uint8_t len, uint8_t rw_flag)
|
||||
{
|
||||
DMod_SendBytesSelf(buf,len,EW_DMOD_Peroid,rw_flag,CheckXOR_8);
|
||||
//DMod_SendBytesSelf(buf,len,EW_DMOD_Peroid,rw_flag,CheckXOR_8);
|
||||
DMod_SendBytesSelf(buf,len,200,rw_flag,CheckXOR_8);
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user