全流程升级验证成功
This commit is contained in:
@@ -10,7 +10,7 @@
|
|||||||
<TargetName>app</TargetName>
|
<TargetName>app</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
|
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
|
||||||
<uAC6>0</uAC6>
|
<uAC6>0</uAC6>
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
@@ -185,7 +185,6 @@
|
|||||||
<uocXRam>0</uocXRam>
|
<uocXRam>0</uocXRam>
|
||||||
<RvdsVP>0</RvdsVP>
|
<RvdsVP>0</RvdsVP>
|
||||||
<RvdsMve>0</RvdsMve>
|
<RvdsMve>0</RvdsMve>
|
||||||
<RvdsCdeCp>0</RvdsCdeCp>
|
|
||||||
<hadIRAM2>0</hadIRAM2>
|
<hadIRAM2>0</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
@@ -352,7 +351,7 @@
|
|||||||
<NoWarn>0</NoWarn>
|
<NoWarn>0</NoWarn>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
<useXO>0</useXO>
|
<useXO>0</useXO>
|
||||||
<ClangAsOpt>4</ClangAsOpt>
|
<uClangAs>0</uClangAs>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
@@ -1248,7 +1247,6 @@
|
|||||||
<uocXRam>0</uocXRam>
|
<uocXRam>0</uocXRam>
|
||||||
<RvdsVP>0</RvdsVP>
|
<RvdsVP>0</RvdsVP>
|
||||||
<RvdsMve>0</RvdsMve>
|
<RvdsMve>0</RvdsMve>
|
||||||
<RvdsCdeCp>0</RvdsCdeCp>
|
|
||||||
<hadIRAM2>0</hadIRAM2>
|
<hadIRAM2>0</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
@@ -1415,7 +1413,7 @@
|
|||||||
<NoWarn>0</NoWarn>
|
<NoWarn>0</NoWarn>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
<useXO>0</useXO>
|
<useXO>0</useXO>
|
||||||
<ClangAsOpt>4</ClangAsOpt>
|
<uClangAs>0</uClangAs>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
@@ -1862,7 +1860,7 @@
|
|||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
<useXO>2</useXO>
|
<useXO>2</useXO>
|
||||||
<ClangAsOpt>0</ClangAsOpt>
|
<uClangAs>2</uClangAs>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
@@ -2926,7 +2924,7 @@
|
|||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
<useXO>2</useXO>
|
<useXO>2</useXO>
|
||||||
<ClangAsOpt>0</ClangAsOpt>
|
<uClangAs>2</uClangAs>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
@@ -3468,7 +3466,7 @@
|
|||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
<useXO>2</useXO>
|
<useXO>2</useXO>
|
||||||
<ClangAsOpt>0</ClangAsOpt>
|
<uClangAs>2</uClangAs>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
@@ -3572,7 +3570,7 @@
|
|||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
<useXO>2</useXO>
|
<useXO>2</useXO>
|
||||||
<ClangAsOpt>0</ClangAsOpt>
|
<uClangAs>2</uClangAs>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
@@ -3651,7 +3649,7 @@
|
|||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
<useXO>2</useXO>
|
<useXO>2</useXO>
|
||||||
<ClangAsOpt>0</ClangAsOpt>
|
<uClangAs>2</uClangAs>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
BIN
doc/JW3425_boot_v10.bin
Normal file
BIN
doc/JW3425_boot_v10.bin
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -5,9 +5,9 @@ import json
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
BOOT_PATH ="JW3425_boot_v8.bin"
|
BOOT_PATH ="JW3425_boot_v10.bin"
|
||||||
APP_PATH ="MS-IEpro20231007.bin"
|
APP_PATH ="MS-IEpro20231007.bin"
|
||||||
OUT_PATH = "jwt_program.jwt"
|
OUT_PATH = BOOT_PATH.split('.')[0]+".jwt"
|
||||||
|
|
||||||
# 创建离线下载器的镜像
|
# 创建离线下载器的镜像
|
||||||
|
|
||||||
@@ -23,6 +23,11 @@ def arr_from_int(num:int):
|
|||||||
return bytearray([num&0xff,(num>>8)&0xff,(num>>16)&0xff,(num>>24)&0xff])
|
return bytearray([num&0xff,(num>>8)&0xff,(num>>16)&0xff,(num>>24)&0xff])
|
||||||
|
|
||||||
|
|
||||||
|
def arr_from_str(txt:str):
|
||||||
|
t=bytearray(txt.encode(encoding="utf-8"))
|
||||||
|
t+=arr_byte_copy(0,1)
|
||||||
|
return t
|
||||||
|
|
||||||
|
|
||||||
def crc32(data:bytearray):
|
def crc32(data:bytearray):
|
||||||
temp=0
|
temp=0
|
||||||
@@ -57,8 +62,13 @@ def creat():
|
|||||||
d+=arr_from_int(0x55aa6699)
|
d+=arr_from_int(0x55aa6699)
|
||||||
d+=arr_byte_copy(0x00,1024*16-len(d))
|
d+=arr_byte_copy(0x00,1024*16-len(d))
|
||||||
|
|
||||||
print("crc32 of all data:",hex(crc32(d)))
|
crc_all=crc32(d)
|
||||||
print("crc32 for 0x1000:",hex(crc32(d[4096:])))
|
crc_app=crc32(d[4096:])
|
||||||
|
print("crc32 of all data:",hex(crc_all))
|
||||||
|
print("crc32 for 0x1000:",hex(crc_app))
|
||||||
|
d+=arr_from_int(crc_all)
|
||||||
|
d+=arr_from_int(crc_app)
|
||||||
|
d+=arr_from_str(OUT_PATH)
|
||||||
|
|
||||||
with open(OUT_PATH,"wb+") as f:
|
with open(OUT_PATH,"wb+") as f:
|
||||||
f.write(d)
|
f.write(d)
|
||||||
|
@@ -194,3 +194,7 @@
|
|||||||
2023.10.9
|
2023.10.9
|
||||||
解决任务重试会导致返回数据长度增加的问题
|
解决任务重试会导致返回数据长度增加的问题
|
||||||
修改jwt读取空闲判线算法以自适应返回电流挡位,未验证
|
修改jwt读取空闲判线算法以自适应返回电流挡位,未验证
|
||||||
|
2023.10.10
|
||||||
|
自适应回复电流挡位,boot与app中均通信正常
|
||||||
|
全流程升级验证成功
|
||||||
|
拟实现主机发开始检测之后等待300ms再启动检测,防止主机未收到回应
|
||||||
|
@@ -7,6 +7,7 @@
|
|||||||
#include "hardware/power.h"
|
#include "hardware/power.h"
|
||||||
#include "ewdriver.h"
|
#include "ewdriver.h"
|
||||||
#include "hardware/timer_cfg.h"
|
#include "hardware/timer_cfg.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
static volatile EWBus_Mod_en bus_mod = OFF_MOD;
|
static volatile EWBus_Mod_en bus_mod = OFF_MOD;
|
||||||
static volatile CurrentSample_Range_eu buscurrent_range = Current_Max;
|
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_H,us_plus_H2;//高电平采用次数
|
||||||
static uint16_t us_plus_T,us_plus_T2;//采样周期
|
static uint16_t us_plus_T,us_plus_T2;//采样周期
|
||||||
uint16_t idle_line = 0;
|
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)
|
uint8_t DMod_FireBusReadDatasV2(uint8_t* buf, uint8_t len, uint32_t time_out)
|
||||||
{
|
{
|
||||||
uint32_t ul_ad_sample;
|
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_dataT_Or;//数据周期
|
||||||
uint32_t us_temp1,us_temp2;
|
uint32_t us_temp1,us_temp2;
|
||||||
uint16_t ad_max = 0,ad_max_temp = 0;
|
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;//档位保存
|
CurrentSample_Range_eu range = buscurrent_range;//档位保存
|
||||||
Power_SetSampleCurrentRange(R10_2mA_30mA_MC);
|
Power_SetSampleCurrentRange(R10_2mA_30mA_MC);
|
||||||
ADC_CurChnnelSet(AN_MAL_CH,ADC_SPEED_HFAST);
|
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 ;
|
PBout(I2IC_SCL_Pin_Nu) = 1 ;
|
||||||
DMod_GetIdle2V();
|
DMod_GetIdle2V();
|
||||||
|
fire_dat.cur_idle=SMod_Read_Idle_C;
|
||||||
|
fire_dat.cur_idle_ad=ADC_GetCurADCFast();
|
||||||
PBout(I2IC_SCL_Pin_Nu) = 0 ;
|
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;
|
ad_max = ul_ad_sample;
|
||||||
if(ul_ad_sample > SMod_Read_Idle_C)
|
if(ul_ad_sample > SMod_Read_Idle_C)
|
||||||
{
|
{
|
||||||
us_plus_H++;
|
if(ul_ad_sample-SMod_Read_Idle_C>50){
|
||||||
ad_high_value=ad_high_value/2+ul_ad_sample/2;
|
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{
|
}else{
|
||||||
us_plus_H = 0;
|
us_plus_H = 0;
|
||||||
ad_high_value=0;
|
fire_dat.cur_high_value=0;
|
||||||
}
|
}
|
||||||
delay_us(2);
|
delay_us(2);
|
||||||
us_time_out--;
|
us_time_out--;
|
||||||
}
|
}
|
||||||
while((us_plus_H < 4) && (us_time_out > 0));
|
while((us_plus_H < 4) && (us_time_out > 0));
|
||||||
|
fire_dat.cur_max=ad_max;
|
||||||
if(us_time_out < 1)//等待起始信号超时
|
if(us_time_out < 1)//等待起始信号超时
|
||||||
{
|
{
|
||||||
EW_DIFF_MOD_H;
|
ret=1;
|
||||||
Power_SetSampleCurrentRange(range);
|
goto end;
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 空闲判线以最高电平为基准
|
// 空闲判线以最高电平为基准
|
||||||
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)
|
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;
|
// 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)
|
if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0)
|
||||||
{
|
{
|
||||||
EW_DIFF_MOD_H;
|
ret=2;
|
||||||
Power_SetSampleCurrentRange(range);
|
goto end;
|
||||||
return 2;
|
|
||||||
}
|
}
|
||||||
if(us_plus_H2 > (us_plus_T2- us_plus_H2))
|
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;
|
idle_line = SMod_Read_Idle_C;
|
||||||
if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0)
|
if(SMod_FireBusReadPlus(&us_plus_H,&us_plus_T,time_out,idle_line,&ad_max_temp ) > 0)
|
||||||
{
|
{
|
||||||
EW_DIFF_MOD_H;
|
ret=4;
|
||||||
Power_SetSampleCurrentRange(range);
|
goto end;
|
||||||
return 4;
|
|
||||||
}
|
}
|
||||||
ad_max = (uint16_t)(ad_max * 0.7f + ad_max_temp*0.3f);
|
ad_max = (uint16_t)(ad_max * 0.7f + ad_max_temp*0.3f);
|
||||||
us_time_out++;
|
us_time_out++;
|
||||||
}while(us_time_out < 13);
|
}while(us_time_out < 13);
|
||||||
if(ul_check_falg == 0)
|
if(ul_check_falg == 0)
|
||||||
{
|
{
|
||||||
EW_DIFF_MOD_H;
|
ret=5;
|
||||||
Power_SetSampleCurrentRange(range);
|
goto end;
|
||||||
return 5;
|
|
||||||
}
|
}
|
||||||
if(us_time_out != 9)
|
if(us_time_out != 9)
|
||||||
{
|
{
|
||||||
EW_DIFF_MOD_H;
|
ret=6;
|
||||||
Power_SetSampleCurrentRange(range);
|
goto end;
|
||||||
return 6;
|
|
||||||
}
|
}
|
||||||
ul_data >>= 2;
|
ul_data >>= 2;
|
||||||
*buf = (uint8_t)ul_data;
|
*buf = (uint8_t)ul_data;
|
||||||
buf++;
|
buf++;
|
||||||
len--;
|
len--;
|
||||||
}
|
}
|
||||||
delay_us(time_out >> 1);
|
//delay_us(time_out >> 1);
|
||||||
|
|
||||||
|
end:
|
||||||
EW_DIFF_MOD_H;
|
EW_DIFF_MOD_H;
|
||||||
Power_SetSampleCurrentRange(range);
|
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)
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -13,6 +13,12 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define UPDATA_CRC_ALL ((uint32_t *)(MC_CODE_ADDR+16*1024))[0]
|
||||||
|
#define UPDATA_CRC_APP ((uint32_t *)(MC_CODE_ADDR+16*1024))[1]
|
||||||
|
#define UPDATA_FILE_NAME ((const char *)(MC_CODE_ADDR+16*1024+8))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 运行检测方案
|
// 运行检测方案
|
||||||
static int cmd_check(list_def *argv)
|
static int cmd_check(list_def *argv)
|
||||||
{
|
{
|
||||||
@@ -63,7 +69,9 @@ static int cmd_iic_updata(list_def *argv)
|
|||||||
checker_runcfg.params[0]=(uint16_t)mtp_addr;
|
checker_runcfg.params[0]=(uint16_t)mtp_addr;
|
||||||
checker_runcfg.params[1]=(uint16_t)data_length;
|
checker_runcfg.params[1]=(uint16_t)data_length;
|
||||||
checker_runcfg.param_count=2;
|
checker_runcfg.param_count=2;
|
||||||
crc32=Crc32Calu((uint32_t*)MC_CODE_ADDR,16*1024);
|
//crc32=Crc32Calu((uint32_t*)MC_CODE_ADDR,16*1024);
|
||||||
|
crc32=UPDATA_CRC_ALL;
|
||||||
|
cmd_print("rom name:%s.",UPDATA_FILE_NAME);
|
||||||
boardinfo_un.boardinfo.mc_ICodeCrc32=crc32;
|
boardinfo_un.boardinfo.mc_ICodeCrc32=crc32;
|
||||||
cmd_print("crc32=0x%04x.",crc32);
|
cmd_print("crc32=0x%04x.",crc32);
|
||||||
|
|
||||||
|
@@ -73,13 +73,13 @@ uint8_t elec_local_addr(void)
|
|||||||
// 设置led1状态
|
// 设置led1状态
|
||||||
void elec_led1_power(int power)
|
void elec_led1_power(int power)
|
||||||
{
|
{
|
||||||
LED1_Out=power?1:0;
|
LED1_Out=power?0:1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置led2状态
|
// 设置led2状态
|
||||||
void elec_led2_power(int power)
|
void elec_led2_power(int power)
|
||||||
{
|
{
|
||||||
LED2_Out=power?1:0;
|
LED2_Out=power?0:1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -15,17 +15,21 @@
|
|||||||
#define UPDATA_PACK_LEN 128
|
#define UPDATA_PACK_LEN 128
|
||||||
#define UPDATA_BASE_ADDR 0x1000
|
#define UPDATA_BASE_ADDR 0x1000
|
||||||
#define UPDATA_DATA_LEN (12*1024)
|
#define UPDATA_DATA_LEN (12*1024)
|
||||||
#define UPDATA_FLAG_ADDR (0x3c7c)
|
#define UPDATA_FLAG_ADDR (0x7c)
|
||||||
//#define UPDATA_FLAG ((uint8_t []){0x99,0x66,0xaa,0x55})
|
//#define UPDATA_FLAG ((uint8_t []){0x99,0x66,0xaa,0x55})
|
||||||
#define UPDATA_FLAG ((uint8_t []){0xaa,0xbb,0xcc,0xdd})
|
#define UPDATA_FLAG ((uint8_t []){0xaa,0xbb,0xcc,0xdd})
|
||||||
|
|
||||||
|
#define UPDATA_CRC_ALL ((uint32_t *)(MC_CODE_ADDR+16*1024))[0]
|
||||||
|
#define UPDATA_CRC_APP ((uint32_t *)(MC_CODE_ADDR+16*1024))[1]
|
||||||
|
|
||||||
// 擦除
|
// 擦除
|
||||||
static uint8_t EW_Erease(void)
|
static uint8_t EW_bootErease(void)
|
||||||
{
|
{
|
||||||
uint8_t data[3]={0xfe,0x00,0x00};
|
uint8_t data[3]={0xfe,0x00,0x00};
|
||||||
uint8_t read[4]={0};
|
uint8_t read[4]={0};
|
||||||
uint8_t ret=0;
|
uint8_t ret=0;
|
||||||
DMod_SendBytesXor(data,2,1);
|
DMod_SendBytesXor(data,2,1);
|
||||||
|
delay_ms(10);
|
||||||
ret=DMod_ReadBytesXor(read,4,100);
|
ret=DMod_ReadBytesXor(read,4,100);
|
||||||
DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]);
|
DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -33,14 +37,14 @@ static uint8_t EW_Erease(void)
|
|||||||
static int cmd_jwt_boot_erase(list_def *argv)
|
static int cmd_jwt_boot_erase(list_def *argv)
|
||||||
{
|
{
|
||||||
int ret=0;
|
int ret=0;
|
||||||
ret=EW_Erease();
|
ret=EW_bootErease();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
commend_export(jwt_boot_erase,cmd_jwt_boot_erase,"jwt srase in boot")
|
commend_export(jwt_boot_erase,cmd_jwt_boot_erase,"jwt srase in boot")
|
||||||
|
|
||||||
|
|
||||||
// 跳转
|
// 跳转
|
||||||
static uint8_t EW_Jump(void)
|
static uint8_t EW_bootJump(void)
|
||||||
{
|
{
|
||||||
uint8_t data[3]={0xf9,0x00,0x00};
|
uint8_t data[3]={0xf9,0x00,0x00};
|
||||||
uint8_t read[4]={0};
|
uint8_t read[4]={0};
|
||||||
@@ -53,19 +57,20 @@ static uint8_t EW_Jump(void)
|
|||||||
static int cmd_jwt_boot_jump(list_def *argv)
|
static int cmd_jwt_boot_jump(list_def *argv)
|
||||||
{
|
{
|
||||||
int ret=0;
|
int ret=0;
|
||||||
ret=EW_Jump();
|
ret=EW_bootJump();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
commend_export(jwt_boot_jump,cmd_jwt_boot_jump,"jwt jump in boot")
|
commend_export(jwt_boot_jump,cmd_jwt_boot_jump,"jwt jump in boot")
|
||||||
|
|
||||||
|
|
||||||
// 充电
|
// 充电
|
||||||
static uint8_t EW_Charg(void)
|
static uint8_t EW_bootCharg(void)
|
||||||
{
|
{
|
||||||
uint8_t data[4]={0xf8,0x01,0x01,0x00};
|
uint8_t data[4]={0xf8,0x01,0x01,0x00};
|
||||||
uint8_t read[4]={0};
|
uint8_t read[4]={0};
|
||||||
uint8_t ret=0;
|
uint8_t ret=0;
|
||||||
DMod_SendBytesXor(data,3,1);
|
DMod_SendBytesXor(data,3,1);
|
||||||
|
delay_ms(2);
|
||||||
ret=DMod_ReadBytesXor(read,4,100);
|
ret=DMod_ReadBytesXor(read,4,100);
|
||||||
DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]);
|
DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -73,7 +78,7 @@ static uint8_t EW_Charg(void)
|
|||||||
static int cmd_jwt_boot_charg(list_def *argv)
|
static int cmd_jwt_boot_charg(list_def *argv)
|
||||||
{
|
{
|
||||||
int ret=0;
|
int ret=0;
|
||||||
ret=EW_Charg();
|
ret=EW_bootCharg();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
commend_export(jwt_boot_charg,cmd_jwt_boot_charg,"jwt charg in boot")
|
commend_export(jwt_boot_charg,cmd_jwt_boot_charg,"jwt charg in boot")
|
||||||
@@ -81,7 +86,7 @@ commend_export(jwt_boot_charg,cmd_jwt_boot_charg,"jwt charg in boot")
|
|||||||
|
|
||||||
|
|
||||||
// 放电
|
// 放电
|
||||||
static uint8_t EW_DisCharg(void)
|
static uint8_t EW_bootDisCharg(void)
|
||||||
{
|
{
|
||||||
uint8_t data[4]={0xf8,0x01,0x00,0x00};
|
uint8_t data[4]={0xf8,0x01,0x00,0x00};
|
||||||
uint8_t read[4]={0};
|
uint8_t read[4]={0};
|
||||||
@@ -94,7 +99,7 @@ static uint8_t EW_DisCharg(void)
|
|||||||
static int cmd_jwt_boot_discharg(list_def *argv)
|
static int cmd_jwt_boot_discharg(list_def *argv)
|
||||||
{
|
{
|
||||||
int ret=0;
|
int ret=0;
|
||||||
ret=EW_Charg();
|
ret=EW_bootDisCharg();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
commend_export(jwt_boot_discharg,cmd_jwt_boot_discharg,"jwt discharg in boot")
|
commend_export(jwt_boot_discharg,cmd_jwt_boot_discharg,"jwt discharg in boot")
|
||||||
@@ -103,7 +108,7 @@ commend_export(jwt_boot_discharg,cmd_jwt_boot_discharg,"jwt discharg in boot")
|
|||||||
|
|
||||||
// 发送数据
|
// 发送数据
|
||||||
// len 最长为128字节
|
// len 最长为128字节
|
||||||
static uint8_t EW_Write(uint16_t addr,uint8_t *d,uint16_t len)
|
static uint8_t EW_bootWrite(uint16_t addr,uint8_t *d,uint16_t len)
|
||||||
{
|
{
|
||||||
uint8_t ret=0;
|
uint8_t ret=0;
|
||||||
uint8_t read[4]={0};
|
uint8_t read[4]={0};
|
||||||
@@ -114,26 +119,31 @@ static uint8_t EW_Write(uint16_t addr,uint8_t *d,uint16_t len)
|
|||||||
buf[2]=addr&0xff;
|
buf[2]=addr&0xff;
|
||||||
buf[3]=addr>>8;
|
buf[3]=addr>>8;
|
||||||
rt_memcpy(&buf[4],d,len);
|
rt_memcpy(&buf[4],d,len);
|
||||||
|
LED2_Out=0;
|
||||||
DMod_SendBytesXor(buf,len+2+2,1);
|
DMod_SendBytesXor(buf,len+2+2,1);
|
||||||
|
LED2_Out=1;
|
||||||
ret=DMod_ReadBytesXor(read,4,100);
|
ret=DMod_ReadBytesXor(read,4,100);
|
||||||
rt_free(buf);
|
rt_free(buf);
|
||||||
DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]);
|
if(ret){
|
||||||
|
DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 校验
|
// 校验
|
||||||
static uint8_t EW_CheckCrc(uint16_t adr_start,uint16_t adr_end,uint32_t *crc)
|
static uint8_t EW_bootCheckCrc(uint16_t adr_start,uint16_t adr_end,uint32_t *crc)
|
||||||
{
|
{
|
||||||
uint8_t ret=0;
|
uint8_t ret=0;
|
||||||
uint8_t cmd[7]={0xfb,0x04,adr_start&0xff,adr_start>>8,adr_end&0xff,adr_end>>8};
|
uint8_t cmd[7]={0xfb,0x04,adr_start&0xff,adr_start>>8,adr_end&0xff,adr_end>>8};
|
||||||
uint8_t read[4+4]={0};
|
uint8_t read[4+4]={0};
|
||||||
DMod_SendBytesXor(cmd,6,1);
|
DMod_SendBytesXor(cmd,6,1);
|
||||||
|
delay_ms(10);
|
||||||
ret=DMod_ReadBytesXor(read,8,100);
|
ret=DMod_ReadBytesXor(read,8,100);
|
||||||
if(ret==0){
|
if(ret==0){
|
||||||
if(crc){
|
if(crc){
|
||||||
*crc=(read[3])|(read[4]<<8)|(read[5]<<16)|(read[6]<<24);
|
*crc=(read[3]<<24)|(read[4]<<16)|(read[5]<<8)|(read[6]<<0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBG_LOG("addr_start=0x%04x,addr_end=0x%04x.",adr_start,adr_end);
|
DBG_LOG("addr_start=0x%04x,addr_end=0x%04x.",adr_start,adr_end);
|
||||||
@@ -145,9 +155,10 @@ static int cmd_jwt_boot_checkcrc(list_def *argv)
|
|||||||
{
|
{
|
||||||
int ret=0;
|
int ret=0;
|
||||||
uint32_t crc=0;
|
uint32_t crc=0;
|
||||||
ret=EW_CheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc);
|
ret=EW_bootCheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc);
|
||||||
cmd_print("jwt crc32=0x%04x.",crc);
|
cmd_print("jwt crc32=0x%04x.",crc);
|
||||||
crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN);
|
//crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN);
|
||||||
|
crc=UPDATA_CRC_APP;
|
||||||
cmd_print("local crc32=0x%04x.",crc);
|
cmd_print("local crc32=0x%04x.",crc);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -156,7 +167,7 @@ commend_export(jwt_boot_checkcrc,cmd_jwt_boot_checkcrc,"jwt checkcrc in boot")
|
|||||||
|
|
||||||
|
|
||||||
// 读取
|
// 读取
|
||||||
static uint8_t EW_Read(uint16_t adr,uint8_t *buf,uint16_t len)
|
static uint8_t EW_bootRead(uint16_t adr,uint8_t *buf,uint16_t len)
|
||||||
{
|
{
|
||||||
uint8_t ret=0;
|
uint8_t ret=0;
|
||||||
uint8_t cmd[7]={0xfa,0x03,adr&0xff,adr>>8,len};
|
uint8_t cmd[7]={0xfa,0x03,adr&0xff,adr>>8,len};
|
||||||
@@ -198,11 +209,35 @@ static int cmd_jwt_app_commtest(list_def *argv)
|
|||||||
commend_export(jwt_app_commtest,cmd_jwt_app_commtest,"jwt commtest in app")
|
commend_export(jwt_app_commtest,cmd_jwt_app_commtest,"jwt commtest in app")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// app:读取数据
|
||||||
|
static int EW_appRead(void)
|
||||||
|
{
|
||||||
|
uint8_t read_buf[4]={0};
|
||||||
|
int ret=0;
|
||||||
|
uint8_t addr=(uint8_t)(UPDATA_FLAG_ADDR/4);
|
||||||
|
DBG_LOG("addr=0x%02x.",addr);
|
||||||
|
ret=EW_ReadMTP(1,addr,read_buf,4);
|
||||||
|
DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read_buf[0],read_buf[1],read_buf[2],read_buf[3]);
|
||||||
|
}
|
||||||
|
static int cmd_jwt_app_read(list_def *argv)
|
||||||
|
{
|
||||||
|
int ret=0;
|
||||||
|
ret=EW_appRead();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
commend_export(jwt_app_read,cmd_jwt_app_read,"jwt read in app")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 升级
|
// 升级
|
||||||
void EW_Updata(void)
|
void EW_Updata(void)
|
||||||
{
|
{
|
||||||
Checker_RunCfg_st *cfg=&checker_runcfg;
|
Checker_RunCfg_st *cfg=&checker_runcfg;
|
||||||
uint8_t ret=0;
|
uint8_t ret=0;
|
||||||
|
uint8_t read_buf[4]={0};
|
||||||
uint8_t *data=(uint8_t *)MC_CODE_ADDR+UPDATA_BASE_ADDR;
|
uint8_t *data=(uint8_t *)MC_CODE_ADDR+UPDATA_BASE_ADDR;
|
||||||
uint16_t len=UPDATA_DATA_LEN;
|
uint16_t len=UPDATA_DATA_LEN;
|
||||||
uint16_t addr=UPDATA_BASE_ADDR;
|
uint16_t addr=UPDATA_BASE_ADDR;
|
||||||
@@ -210,38 +245,57 @@ void EW_Updata(void)
|
|||||||
uint32_t crc=0;
|
uint32_t crc=0;
|
||||||
uint32_t crc_module=0;
|
uint32_t crc_module=0;
|
||||||
delay_ms(100);
|
delay_ms(100);
|
||||||
ret=EW_Charg();
|
ret=EW_bootCharg();
|
||||||
if(ret) {ret=1;goto err;}
|
if(ret) {ret=1;goto err;}
|
||||||
delay_ms(6000);
|
delay_ms(6000);
|
||||||
ret=EW_Erease();
|
ret=EW_bootErease();
|
||||||
if(ret) {ret=2;goto err;}
|
if(ret) {ret=2;goto err;}
|
||||||
delay_ms(600);
|
delay_ms(600);
|
||||||
while(len>0){
|
while(len>0){
|
||||||
pack_len=len>UPDATA_PACK_LEN?UPDATA_PACK_LEN:len;
|
pack_len=len>UPDATA_PACK_LEN?UPDATA_PACK_LEN:len;
|
||||||
ret=EW_Write(addr,data,pack_len);
|
LED1_Out=!LED1_Out;
|
||||||
|
ret=EW_bootWrite(addr,data,pack_len);
|
||||||
addr+=pack_len;
|
addr+=pack_len;
|
||||||
data+=pack_len;
|
data+=pack_len;
|
||||||
len-=pack_len;
|
len-=pack_len;
|
||||||
if(ret) {ret=3;goto err;}
|
if(ret) {ret=3;goto err;}
|
||||||
delay_ms(50);
|
delay_ms(1);
|
||||||
}
|
}
|
||||||
crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN);
|
//crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN);
|
||||||
|
crc=UPDATA_CRC_APP;
|
||||||
DBG_LOG("local crc:0x%04x.",crc);
|
DBG_LOG("local crc:0x%04x.",crc);
|
||||||
ret=EW_CheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc_module);
|
ret=EW_bootCheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc_module);
|
||||||
DBG_LOG("module crc:0x%04x.",crc_module);
|
DBG_LOG("module crc:0x%04x.",crc_module);
|
||||||
if(ret) {ret=4;goto err;}
|
if(ret) {ret=4;goto err;}
|
||||||
if(crc!=crc_module){ret=5;goto err;}
|
if(crc!=crc_module){ret=5;goto err;}
|
||||||
delay_ms(50);
|
delay_ms(50);
|
||||||
ret=EW_Jump();
|
ret=EW_bootJump();
|
||||||
if(ret) {ret=6;goto err;}
|
if(ret) {ret=6;goto err;}
|
||||||
delay_ms(100);
|
delay_ms(6000);
|
||||||
ret=EW_EnWriteMTP(0,1);
|
ret=EW_EnWriteMTP(0,1);
|
||||||
if(ret) {ret=7;goto err;}
|
if(ret) {ret=7;goto err;}
|
||||||
delay_ms(100);
|
DBG_LOG("EW_EnWriteMTP success.");
|
||||||
// 数据溢出
|
delay_ms(1);
|
||||||
// ret=EW_WriteMTP(0,(uint8_t)(UPDATA_FLAG_ADDR/4),UPDATA_FLAG,4);
|
|
||||||
|
ret=EW_WriteMTP(1,(uint8_t)(UPDATA_FLAG_ADDR/4),UPDATA_FLAG,4);
|
||||||
if(ret) {ret=8;goto err;}
|
if(ret) {ret=8;goto err;}
|
||||||
delay_ms(100);
|
DBG_LOG("EW_WriteMTP success.");
|
||||||
|
delay_ms(1);
|
||||||
|
ret=EW_ReadMTP(1,(uint8_t)(UPDATA_FLAG_ADDR/4),read_buf,4);
|
||||||
|
if(ret) {ret=9;goto err;}
|
||||||
|
if(memcmp(read_buf,UPDATA_FLAG,4)!=0){
|
||||||
|
DBG_LOG("read_buf=0x%02d,0x%02d,0x%02d,0x%02d.",read_buf[0],read_buf[1],read_buf[2],read_buf[3]);
|
||||||
|
ret=10;goto err;
|
||||||
|
}
|
||||||
|
DBG_LOG("EW_ReadMTP check success.");
|
||||||
|
delay_ms(1);
|
||||||
|
XTBUS_OFF;
|
||||||
|
delay_ms(1000);
|
||||||
|
XTBUS_ON;
|
||||||
|
delay_ms(6000);
|
||||||
|
ret=EW_appCommTest();
|
||||||
|
if(ret) {ret=11;goto err;}
|
||||||
|
DBG_LOG("EW_appCommTest success.");
|
||||||
|
|
||||||
err:
|
err:
|
||||||
DBG_LOG("ret=%d",ret);
|
DBG_LOG("ret=%d",ret);
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define BUILD_DATE "2023-10-09 22:54:36"
|
#define BUILD_DATE "2023-10-10 16:36:03"
|
||||||
#define SOFT_VERSION "0.03"
|
#define SOFT_VERSION "0.03"
|
||||||
|
|
||||||
|
|
||||||
|
@@ -19,11 +19,18 @@
|
|||||||
typedef struct{
|
typedef struct{
|
||||||
ucport_def u;
|
ucport_def u;
|
||||||
rt_timer_t timer;
|
rt_timer_t timer;
|
||||||
|
array_def *data;
|
||||||
}slave_def;
|
}slave_def;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void slave_dolater(ucport_def *u,int delay_ms)
|
||||||
|
{
|
||||||
|
slave_def *s=(slave_def *)u;
|
||||||
|
}
|
||||||
|
|
||||||
static void slave_del(ucport_def *u)
|
static void slave_del(ucport_def *u)
|
||||||
{
|
{
|
||||||
slave_def *s=(slave_def *)u;
|
slave_def *s=(slave_def *)u;
|
||||||
|
Reference in New Issue
Block a user