diff --git a/checher_slave.uvoptx b/checher_slave.uvoptx index d1f11e4..4bc4463 100644 --- a/checher_slave.uvoptx +++ b/checher_slave.uvoptx @@ -103,7 +103,7 @@ 1 0 0 - 4 + 6 @@ -114,9 +114,14 @@ - Segger\JL2CM3.dll + STLink\ST-LINKIII-KEIL_SWO.dll + + 0 + ST-LINKIII-KEIL_SWO + -U52FF6E065266545441081687 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM) + 0 UL2CM3 @@ -130,7 +135,7 @@ 0 DLGUARM - ? + (105=-1,-1,-1,-1,0) 0 @@ -159,8 +164,8 @@ 1 - 1 - 0x200018F0 + 0 + 0x0801d000 0 @@ -168,7 +173,7 @@ 2 0 - src_data + 0x0803B000 0 @@ -322,7 +327,7 @@ 1 0 0 - 4 + 6 @@ -333,9 +338,19 @@ - Segger\JL2CM3.dll + STLink\ST-LINKIII-KEIL_SWO.dll + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + ST-LINKIII-KEIL_SWO + -U52FF6E065266545441081687 -O206 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F103RC$Flash\STM32F10x_512.FLM) + 0 UL2CM3 @@ -362,24 +377,7 @@ - - - 0 - 0 - 93 - 1 -
0
- 0 - 0 - 0 - 0 - 0 - 0 - .\source\rt_thread\board.c - - -
-
+ 0 diff --git a/checher_slave.uvprojx b/checher_slave.uvprojx index 991cf16..6be32e7 100644 --- a/checher_slave.uvprojx +++ b/checher_slave.uvprojx @@ -10,7 +10,7 @@ app 0x4 ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC 0 @@ -185,7 +185,6 @@ 0 0 0 - 0 0 0 8 @@ -352,7 +351,7 @@ 0 0 0 - 4 + 0 @@ -1073,7 +1072,7 @@ boot 0x4 ARM-ADS - 5060960::V5.06 update 7 (build 960)::.\ARMCC + 5060750::V5.06 update 6 (build 750)::ARMCC 0 @@ -1248,7 +1247,6 @@ 0 0 0 - 0 0 0 8 @@ -1415,7 +1413,7 @@ 0 0 0 - 4 + 0 @@ -1862,7 +1860,7 @@ 2 2 2 - 0 + 2 @@ -2926,7 +2924,7 @@ 2 2 2 - 0 + 2 @@ -3468,7 +3466,7 @@ 2 2 2 - 0 + 2 @@ -3572,7 +3570,7 @@ 2 2 2 - 0 + 2 @@ -3651,7 +3649,7 @@ 2 2 2 - 0 + 2 diff --git a/doc/JW3425_boot_v6.bin b/doc/JW3425_boot_v6.bin new file mode 100644 index 0000000..e861c30 Binary files /dev/null and b/doc/JW3425_boot_v6.bin differ diff --git a/doc/MS-IEpro20231007.bin b/doc/MS-IEpro20231007.bin new file mode 100644 index 0000000..d29b306 Binary files /dev/null and b/doc/MS-IEpro20231007.bin differ diff --git a/doc/creat_jwt_boot.py b/doc/creat_jwt_boot.py new file mode 100644 index 0000000..0d13a99 --- /dev/null +++ b/doc/creat_jwt_boot.py @@ -0,0 +1,47 @@ +import shutil +import sys +import os +import json + + + +BOOT_PATH ="JW3425_boot_v6.bin" +APP_PATH ="MS-IEpro20231007.bin" +OUT_PATH = "jwt_program.jwt" + +# 创建离线下载器的镜像 + + +# 填充指定个数的byte +def arr_byte_copy(byte:int,num:int): + t=bytearray() + for i in range(num): + t.append(byte) + return t +# int转数组 +def arr_from_int(num:int): + return bytearray([num&0xff,(num>>8)&0xff,(num>>16)&0xff,(num>>24)&0xff]) + + +def creat(): + boot=BOOT_PATH + app=APP_PATH + d=bytearray() + with open(boot,"rb") as f: + d+=f.read() + d+=arr_byte_copy(0x00,4096-len(d)) + with open(app,"rb") as f: + d+=f.read() + d+=arr_byte_copy(0x00,0x3c7c-len(d)) + d+=arr_from_int(0x55aa6699) + d+=arr_byte_copy(0x00,1024*16-len(d)) + with open(OUT_PATH,"wb+") as f: + f.write(d) + print(OUT_PATH+" create boot file success.") + + + +if __name__ == "__main__": + creat() + + diff --git a/doc/jwt_program.jwt b/doc/jwt_program.jwt new file mode 100644 index 0000000..442ebbe Binary files /dev/null and b/doc/jwt_program.jwt differ diff --git a/source/ReadMe.txt b/source/ReadMe.txt index e3e7f5a..e9462d0 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -184,4 +184,8 @@ 2023.10.7 添加iic模块升级相关命令 添加下载模块程序指令0xec +2023.10.8 + 发现gd32不能以地址0x00000000来擦除flash + 修改擦除地址为0x08000000来解决无法写入的问题 + 添加设置总线电压cmd命令 diff --git a/source/dev/dev_flash.c b/source/dev/dev_flash.c index ddfdd17..b8e8eaa 100644 --- a/source/dev/dev_flash.c +++ b/source/dev/dev_flash.c @@ -88,10 +88,13 @@ static int flash_erase(uint32_t sector) s->mutex=rt_mutex_create("flash_mutex",RT_IPC_FLAG_FIFO); } rt_mutex_take(s->mutex,RT_WAITING_FOREVER); + //irq_disable(); FLASH_Unlock(); FLASH_CLEAR_FLAG(); // 对于f103 2048byte为一个扇区,这里把扇区地址转化为flash地址 - ret=FLASH_ErasePage(sector*2048); + ret=FLASH_ErasePage(FLASH_BASE+ sector*2048); + //FLASH_Lock(); + //irq_enable(); rt_mutex_release(s->mutex); if(ret!=FLASH_COMPLETE) { @@ -263,20 +266,24 @@ int flash_write(uint8_t *addr,const uint8_t *data,int len) //DBG_LOG("write flash addr=%08x",flash_addr); len+=3;// len不是4字节对齐时强行增加到4字节 + //FLASH_Unlock(); for(int i=0;iSR=%08X",FLASH->SR); + DBG_WARN("addr=%08X",flash_addr); ret=-1; break; } + flash_addr+=4; } + //FLASH_Lock(); if(memcmp(addr,data,(len/4)*4)!=0) { DBG_WARN("addr=%08x write/read data not equate.",addr); diff --git a/source/elec_det/elec_cmd.c b/source/elec_det/elec_cmd.c index 2b93992..77aa022 100644 --- a/source/elec_det/elec_cmd.c +++ b/source/elec_det/elec_cmd.c @@ -1,10 +1,12 @@ #include "elec_det.h" #include "commend.h" #include "mystring.h" +#include "mystdlib.h" #include "hardware/jw3425iic.h" #include "interface/BaseChecker.h" #include "base/define.h" #include "base/utility.h" +#include "interface/EWChecker.h" // 电子模块相关调试命令 @@ -15,8 +17,9 @@ static int cmd_check(list_def *argv) { array_def *data=arr_creat(); cmd_print("start check."); - elec_check_with_scheme(data); + array_def *r=elec_check_with_scheme(data); arr_delete(data); + cmd_print("check end,ret=%s.",str_temp(arr_string(r))); return 0; } commend_export(check,cmd_check,"start check") @@ -94,3 +97,21 @@ commend_export(iic_read,cmd_iic_read,"read mtp via iic,param:mtp_addr,data_lengt +// 设置总线电压 +static int cmd_set_bus_power(list_def *argv) +{ + if(list_length(argv)<2){ + cmd_print("param num too less."); + return -1; + } + int bus_v=str_atoi(list_get_str(argv,1)); + int ret=0; + checker_runcfg.params[0]=(uint16_t)bus_v; + checker_runcfg.param_count=1; + EW_Test_SetBusV(); + ret=checker_runcfg.excue_rtv; + cmd_print("cmd end,ret=%d.",ret); +} +commend_export(bus_power,cmd_set_bus_power,"set bus power,param:bus_power") + + diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c index ce08c16..1c2e62e 100644 --- a/source/elec_det/elec_det.c +++ b/source/elec_det/elec_det.c @@ -18,6 +18,7 @@ #include "interface/BaseChecker.h" #include "interface/JQChecker.h" #include "interface/XTChecker.h" +#include "interface/EWChecker.h" #define PLAN_MAX_TASK 64 @@ -196,7 +197,7 @@ array_def *elec_check_with_scheme(array_def *uid_psw) { self_def *s=&g_self; const uint8_t* ptaskindex = (uint8_t*)(APP_TEST_PLAN_ADDR+4); - CheckerTask *tasks_fun_table[]={jqtaskArray,xttaskArray}; + CheckerTask *tasks_fun_table[]={jqtaskArray,xttaskArray,ewtaskArray}; CheckerTask_Info_st *task_par=0; uint8_t chip_type=0; uint8_t taskid=0; @@ -205,10 +206,12 @@ array_def *elec_check_with_scheme(array_def *uid_psw) array_def *r=arr_creat(); chip_type=(board_st.plan_id >> 12 ) & 0x0F; if(s->scheme_inited==0){ + DBG_WARN("scheme not init."); arr_append(r,1); return arr_temp(r); } if(chip_type>=LENGTH(tasks_fun_table)){ + DBG_WARN("unknown chip type."); arr_append(r,2); return arr_temp(r); } @@ -225,14 +228,17 @@ array_def *elec_check_with_scheme(array_def *uid_psw) checker_runcfg.excue_rtv = 0; checker_runcfg.task_info.retry_time = 0; if(taskid>=CHECKER_MAXID_COUNT){ + DBG_WARN("tiskid out of bound."); break; } task_par= s->task_info_array[task_index]; if(task_par==0){ + DBG_WARN("can not find task params."); break; } task_fun=tasks_fun_table[chip_type][taskid]; if(task_fun==0){ + DBG_WARN("can not find task fun."); break; } diff --git a/source/elec_det/interface/EWChecker.c b/source/elec_det/interface/EWChecker.c index 729ba90..6061e44 100644 --- a/source/elec_det/interface/EWChecker.c +++ b/source/elec_det/interface/EWChecker.c @@ -6,7 +6,7 @@ #include "base/utility.h" #include "hardware/power.h" #include "hardware/timer_cfg.h" - +#include "debug.h" #define UPDATA_PACK_LEN 58 #define UPDATA_BASE_ADDR 0x1000 @@ -23,6 +23,7 @@ static uint8_t EW_Erease(void) uint8_t ret=0; DMod_SendBytesXor(data,2,1); ret=DMod_ReadBytesXor(read,4,100); + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); delay_ms(50); return ret; } @@ -36,6 +37,7 @@ static uint8_t EW_Jump(void) uint8_t ret=0; DMod_SendBytesXor(data,2,1); ret=DMod_ReadBytesXor(read,4,100); + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); delay_ms(50); return ret; } @@ -50,6 +52,7 @@ static uint8_t EW_Charg(void) delay_ms(2000); DMod_SendBytesXor(data,3,1); ret=DMod_ReadBytesXor(read,4,100); + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); delay_ms(5000); return ret; } @@ -70,6 +73,7 @@ static uint8_t EW_Write(uint16_t addr,uint8_t *d,uint16_t len) DMod_SendBytesXor(buf,len+2+2,1); ret=DMod_ReadBytesXor(read,4,100); rt_free(buf); + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); delay_ms(50); return ret; } @@ -89,6 +93,7 @@ static uint8_t EW_CheckCrc(uint16_t adr_start,uint16_t adr_end,uint32_t *crc) *crc=(read[3])|(read[4]<<8)|(read[5]<<16)|(read[6]<<24); } } + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); delay_ms(50); return ret; } @@ -110,12 +115,23 @@ static uint8_t EW_Read(uint16_t adr,uint8_t *buf,uint16_t len) { rt_memcpy(buf,&read[3],len); } + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); delay_ms(50); rt_free(read); return ret; } +// app:通信测试 +static void EW_appCommTest(void) +{ + uint8_t data[4]={0x11,0x22}; + uint8_t ret; + ret=EW_CommTest(data,2,300); + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,data[0],data[1],data[2],data[3]); +} + + // 升级 void EW_Updata(void) { @@ -127,9 +143,11 @@ void EW_Updata(void) uint8_t pack_len=UPDATA_PACK_LEN; uint32_t crc=0; uint32_t crc_module=0; + EW_appCommTest(); ret=EW_Charg(); if(ret) {ret=1;goto err;} ret=EW_Erease(); + //ret=EW_Jump(); if(ret) {ret=2;goto err;} while(len>0){ pack_len=len>UPDATA_PACK_LEN?UPDATA_PACK_LEN:len; @@ -156,6 +174,7 @@ void EW_Updata(void) delay_ms(100); err: + DBG_LOG("ret=%d",ret); Checker_MaskResult(ret,checker_runcfg.task_info.runindex); } @@ -191,8 +210,9 @@ 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]; - us_h_v = 240; + uint16_t power_old; + us_h_v = cfg->params[0]; + power_old=us_h_v; if(us_h_v < 55) { uc_rtv = 1; @@ -207,6 +227,12 @@ void EW_Test_SetBusV(void) us_h_v = Power_GetBousV(); Checker_SetRtv(&us_h_v,cfg->rtv_count); } + if(uc_rtv){ + DBG_WARN("bus power init failed.h"); + } + if((us_h_vpower_old+10)){ + DBG_WARN("power set fialed,want=%d,reality=%d.",power_old,us_h_v); + } Checker_MaskResult(uc_rtv,cfg->task_info.runindex); } diff --git a/source/elec_det/interface/EWChecker.h b/source/elec_det/interface/EWChecker.h index 47b80c3..9a298cf 100644 --- a/source/elec_det/interface/EWChecker.h +++ b/source/elec_det/interface/EWChecker.h @@ -10,6 +10,7 @@ extern CheckerTask ewtaskArray[CHECKER_MAXID_COUNT] ; +void EW_Test_SetBusV(void); diff --git a/source/interface/if_uart.c b/source/interface/if_uart.c index a47f83f..bd891cc 100644 --- a/source/interface/if_uart.c +++ b/source/interface/if_uart.c @@ -87,7 +87,7 @@ static const uart_dtb g_uartdtb[]={ .uart=USART1, .uart_clock_fun=RCC_APB2PeriphClockCmd, .uart_rcc=RCC_APB2Periph_USART1, - .baudrate=115200, + .baudrate=57600, .irq_channel=USART1_IRQn, .gpio_tx_clock_fun=RCC_APB2PeriphClockCmd, diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index 184cfa4..985105b 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-10-07 22:39:04" +#define BUILD_DATE "2023-10-08 17:53:21" #define SOFT_VERSION "0.03"