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"