From e66bf71bf57a3fdb942eb1a0b0db874a005b2e57 Mon Sep 17 00:00:00 2001 From: ranchuan Date: Thu, 16 Nov 2023 18:27:16 +0800 Subject: [PATCH] =?UTF-8?q?EW=E5=8D=87=E7=BA=A7=E5=8D=95=E5=9D=97=E6=9D=BF?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E6=88=90=E5=8A=9F=EF=BC=8C=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E9=AA=8C=E8=AF=81=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 +- checher_slave.uvoptx | 124 ++++--- checher_slave.uvprojx | 15 + doc/JW3425_boot_v10.bin | Bin 4056 -> 0 bytes doc/JW3425_boot_v10.jwt | Bin 16412 -> 0 bytes doc/JW3425_boot_v11.bin | Bin 4056 -> 0 bytes doc/MS-10-30-1.bin | Bin 0 -> 16384 bytes doc/MS-IEpro20231007.bin | Bin 10540 -> 0 bytes doc/creat_jwt_boot.py | 10 +- doc/ms-10-30.bin | Bin 0 -> 9800 bytes source/ReadMe.txt | 4 +- source/elec_det/interface/EWChecker.c | 369 +------------------- source/elec_det/interface/EWUpdata.c | 480 ++++++++++++++++++++++++++ source/elec_det/interface/EWUpdata.h | 15 + source/main/compiler_info.h | 2 +- 15 files changed, 593 insertions(+), 429 deletions(-) delete mode 100644 doc/JW3425_boot_v10.bin delete mode 100644 doc/JW3425_boot_v10.jwt delete mode 100644 doc/JW3425_boot_v11.bin create mode 100644 doc/MS-10-30-1.bin delete mode 100644 doc/MS-IEpro20231007.bin create mode 100644 doc/ms-10-30.bin create mode 100644 source/elec_det/interface/EWUpdata.c create mode 100644 source/elec_det/interface/EWUpdata.h diff --git a/.vscode/settings.json b/.vscode/settings.json index 2c3f921..579b074 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,6 +7,7 @@ "if_can.h": "c", "board.h": "c", "prot_uc.h": "c", - "tran_for_slave.h": "c" + "tran_for_slave.h": "c", + "ewupdata.h": "c" } } \ No newline at end of file diff --git a/checher_slave.uvoptx b/checher_slave.uvoptx index 2d8676c..0f354f2 100644 --- a/checher_slave.uvoptx +++ b/checher_slave.uvoptx @@ -299,7 +299,7 @@ 1 0 - 0 + 1 18 @@ -523,7 +523,7 @@ 1 0 - 1 + 0 18 @@ -1399,6 +1399,18 @@ 0 0 0 + .\source\elec_det\interface\EWUpdata.c + EWUpdata.c + 0 + 0 + + + 6 + 55 + 1 + 0 + 0 + 0 .\source\elec_det\test\EW_TestUsartApp.c EW_TestUsartApp.c 0 @@ -1406,7 +1418,7 @@ 6 - 55 + 56 1 0 0 @@ -1418,7 +1430,7 @@ 6 - 56 + 57 1 0 0 @@ -1430,7 +1442,7 @@ 6 - 57 + 58 1 0 0 @@ -1442,7 +1454,7 @@ 6 - 58 + 59 1 0 0 @@ -1454,7 +1466,7 @@ 6 - 59 + 60 1 0 0 @@ -1466,7 +1478,7 @@ 6 - 60 + 61 1 0 0 @@ -1478,7 +1490,7 @@ 6 - 61 + 62 1 0 0 @@ -1498,7 +1510,7 @@ 0 7 - 62 + 63 1 0 0 @@ -1510,7 +1522,7 @@ 7 - 63 + 64 1 0 0 @@ -1530,7 +1542,7 @@ 0 8 - 64 + 65 1 0 0 @@ -1542,7 +1554,7 @@ 8 - 65 + 66 1 0 0 @@ -1554,7 +1566,7 @@ 8 - 66 + 67 1 0 0 @@ -1566,7 +1578,7 @@ 8 - 67 + 68 1 0 0 @@ -1578,7 +1590,7 @@ 8 - 68 + 69 1 0 0 @@ -1590,7 +1602,7 @@ 8 - 69 + 70 1 0 0 @@ -1602,7 +1614,7 @@ 8 - 70 + 71 1 0 0 @@ -1614,7 +1626,7 @@ 8 - 71 + 72 1 0 0 @@ -1626,7 +1638,7 @@ 8 - 72 + 73 1 0 0 @@ -1638,7 +1650,7 @@ 8 - 73 + 74 1 0 0 @@ -1650,7 +1662,7 @@ 8 - 74 + 75 1 0 0 @@ -1662,7 +1674,7 @@ 8 - 75 + 76 1 0 0 @@ -1674,7 +1686,7 @@ 8 - 76 + 77 1 0 0 @@ -1686,7 +1698,7 @@ 8 - 77 + 78 1 0 0 @@ -1698,7 +1710,7 @@ 8 - 78 + 79 1 0 0 @@ -1710,7 +1722,7 @@ 8 - 79 + 80 1 0 0 @@ -1722,7 +1734,7 @@ 8 - 80 + 81 1 0 0 @@ -1734,7 +1746,7 @@ 8 - 81 + 82 1 0 0 @@ -1746,7 +1758,7 @@ 8 - 82 + 83 2 0 0 @@ -1766,7 +1778,7 @@ 0 9 - 83 + 84 1 0 0 @@ -1778,7 +1790,7 @@ 9 - 84 + 85 1 0 0 @@ -1790,7 +1802,7 @@ 9 - 85 + 86 1 0 0 @@ -1802,7 +1814,7 @@ 9 - 86 + 87 1 0 0 @@ -1814,7 +1826,7 @@ 9 - 87 + 88 1 0 0 @@ -1826,7 +1838,7 @@ 9 - 88 + 89 1 0 0 @@ -1838,7 +1850,7 @@ 9 - 89 + 90 1 0 0 @@ -1850,7 +1862,7 @@ 9 - 90 + 91 1 0 0 @@ -1862,7 +1874,7 @@ 9 - 91 + 92 1 0 0 @@ -1874,7 +1886,7 @@ 9 - 92 + 93 1 0 0 @@ -1886,7 +1898,7 @@ 9 - 93 + 94 1 0 0 @@ -1906,7 +1918,7 @@ 0 10 - 94 + 95 1 0 0 @@ -1918,7 +1930,7 @@ 10 - 95 + 96 1 0 0 @@ -1930,7 +1942,7 @@ 10 - 96 + 97 1 0 0 @@ -1942,7 +1954,7 @@ 10 - 97 + 98 1 0 0 @@ -1954,7 +1966,7 @@ 10 - 98 + 99 1 0 0 @@ -1974,7 +1986,7 @@ 0 11 - 99 + 100 1 0 0 @@ -1994,7 +2006,7 @@ 0 12 - 100 + 101 1 0 0 @@ -2006,7 +2018,7 @@ 12 - 101 + 102 1 0 0 @@ -2018,7 +2030,7 @@ 12 - 102 + 103 1 0 0 @@ -2030,7 +2042,7 @@ 12 - 103 + 104 1 0 0 @@ -2042,7 +2054,7 @@ 12 - 104 + 105 1 0 0 @@ -2054,7 +2066,7 @@ 12 - 105 + 106 1 0 0 @@ -2074,7 +2086,7 @@ 0 13 - 106 + 107 5 0 0 @@ -2094,7 +2106,7 @@ 0 14 - 107 + 108 5 0 0 @@ -2106,7 +2118,7 @@ 14 - 108 + 109 5 0 0 diff --git a/checher_slave.uvprojx b/checher_slave.uvprojx index eabb1f5..94d9064 100644 --- a/checher_slave.uvprojx +++ b/checher_slave.uvprojx @@ -894,6 +894,11 @@ 1 .\source\elec_det\interface\EWChecker.c + + EWUpdata.c + 1 + .\source\elec_det\interface\EWUpdata.c + EW_TestUsartApp.c 1 @@ -3450,6 +3455,11 @@ 1 .\source\elec_det\interface\EWChecker.c + + EWUpdata.c + 1 + .\source\elec_det\interface\EWUpdata.c + EW_TestUsartApp.c 1 @@ -4894,6 +4904,11 @@ 1 .\source\elec_det\interface\EWChecker.c + + EWUpdata.c + 1 + .\source\elec_det\interface\EWUpdata.c + EW_TestUsartApp.c 1 diff --git a/doc/JW3425_boot_v10.bin b/doc/JW3425_boot_v10.bin deleted file mode 100644 index ec66ab81e8d6f00d692fccb284a3b87922e45f12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4056 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 Jk2kF+{~s|ZB$5CC diff --git a/doc/JW3425_boot_v11.bin b/doc/JW3425_boot_v11.bin deleted file mode 100644 index 43b7f664f58e463ddd7e8f55fbd0eb793086d35d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4056 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 diff --git a/doc/MS-10-30-1.bin b/doc/MS-10-30-1.bin new file mode 100644 index 0000000000000000000000000000000000000000..7a3998254a01e469a5fb7f20866842d3847d57cf GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/doc/MS-IEpro20231007.bin b/doc/MS-IEpro20231007.bin deleted file mode 100644 index d29b306386825de75da8faee355e405da292c20c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10540 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

6q7+>Fu`d%B`%36|AoX zNw*Cnf|>aZ`SF57$X0D2=Cp3xIicK%Sq=2u;JZN66c5B|0UIHLxg5$@(m5dnu0e7&1`GQVN|Ne1q2geeA^LBGeTF5QI#@S3hUG6yLwEYmeH@IvG(dG7K$2I7^kNwS|%WT|Rd zZ9*9o*hJfn#Fd>m>tuP>A!^kcTsJr^fqc3h{7g7`Wc{$_Y-;p-tR78zYrTmx!5(%+ zvb<9$KZS2f9*i^L&RZ$(iYAVRhuSlIO}5`^6L3T8Jt^VmUB7hhrE~#a*-i#t1Vghti7)NG@KODcoKhn zuG=9fTxEJ|I^pa{d?QXbs1(2}nQwUN zGY(@e>bEri&Sca{Rs&fBvxeNtj`aTca8g!1=;DPxL)_epE5X?rSzFcn1;cd6k>I%u zeSDG@&t+&Y>>l4l?dP^P%BY6BFYNy(*g1d(K%cpeSf$SilhUU()cfOIavy1IpVkoe zQS4K$-wBq391z9;=m5LN6ajabTnRIbpn?ITFF!gm=?g19gM3q6`y3G^ z4X7yZMNdM$Ow8x@K@PqVPnscnEYlhJchg^gduF}X8{ameBv+b(IJbP!yh7|Mct>T^s%W^hsi=Vv{?o`@-xLamBvf^_Za%SeX zfz&_epU-zZ9lxSs#p=~4^S{JFQP%_eLzJ7)JpW*^xxh5VYiZMVI2?|=_`HTJ{3iz? z)5=u5G?+lD+h*2?cC9viUHK=MbqP&b+i6W|*+H>*c|x0*Z~fQzi1leN(Q3=IfuFwz z7GwRwN2)8ASBehW5&qgyQsy|ZAXRiYX3_2}t8j=Mp$}!XdhlN6ShE029gZ@G)lU=a zBAPstfo-ui@Xz$OSX%&X4nZ42RBq$&#MCc7NmMVS;yKF2UF zr(B)$DwSi$&+&MJpVCK#eGCTp#y;3rcdOrtoZ~sIIaoIcUgQ2`4cQFWOpAuR2G^%> zeFfJNPD5UVYa3iU;Q9qz18}8H){q~-wHB_I;PS%td$KlXv5$B;17K&g8x&Lf755ERBA$gbg=V}{|&oW1yuk5 diff --git a/doc/creat_jwt_boot.py b/doc/creat_jwt_boot.py index cd7a779..8a7dac2 100644 --- a/doc/creat_jwt_boot.py +++ b/doc/creat_jwt_boot.py @@ -6,8 +6,8 @@ import json BOOT_PATH ="JW3425_boot_v12.bin" -APP_PATH ="MS-IEpro20231007.bin" -OUT_PATH = BOOT_PATH.split('.')[0]+".jwt" +APP_PATH ="ms-10-30.bin" +OUT_PATH = BOOT_PATH.split('.')[0]+APP_PATH.split('.')[0]+".jwt" # 创建离线下载器的镜像 @@ -78,5 +78,11 @@ def creat(): if __name__ == "__main__": creat() + # d=bytearray() + # with open("MS-10-30-1.bin","rb") as f: + # d+=f.read() + # with open("ms-10-30.bin","wb+") as f: + # f.write(d[4096:4096+9800]) + diff --git a/doc/ms-10-30.bin b/doc/ms-10-30.bin new file mode 100644 index 0000000000000000000000000000000000000000..9017d57e88800bd55b541b5d2e4dfd737bc14e82 GIT binary patch literal 9800 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 b|LAEc3)k;CMdm%A8oN%&kB;>I5#Rqe=`Y8y literal 0 HcmV?d00001 diff --git a/source/ReadMe.txt b/source/ReadMe.txt index 57da295..6f38059 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -263,4 +263,6 @@ 添加跳转到bootloader命令 jwt_app_runboot 解决 EW WriteMTP 命令异常 debug 输出设备改为 host - +2023.11.16 + 完成方案中updata调试,支持不处于bootloader中时自动跳转至bootloader + 单块板验证成功,批量验证失败 diff --git a/source/elec_det/interface/EWChecker.c b/source/elec_det/interface/EWChecker.c index 326baeb..c45783a 100644 --- a/source/elec_det/interface/EWChecker.c +++ b/source/elec_det/interface/EWChecker.c @@ -1,5 +1,6 @@ #include "EWChecker.h" +#include "EWUpdata.h" #include "driver/EWDriver.h" #include "base/delay.h" #include "hardware/adc_cfg.h" @@ -12,15 +13,6 @@ #include "mystdlib.h" -#define UPDATA_PACK_LEN 128 -#define UPDATA_BASE_ADDR 0x1000 -#define UPDATA_DATA_LEN (12*1024) -#define UPDATA_FLAG_ADDR (0x7c) -//#define UPDATA_FLAG ((uint8_t []){0x99,0x66,0xaa,0x55}) -#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] #define EW_CHECKER_RUN_BUF 32 @@ -29,365 +21,6 @@ uint8_t EW_Test_PWD[8]="FBCDabcd"; uint8_t EW_RunBuf[EW_CHECKER_RUN_BUF]; -// 擦除 -static uint8_t EW_bootErease(void) -{ - uint8_t data[3]={0xfe,0x00,0x00}; - uint8_t read[4]={0}; - uint8_t ret=0; - DMod_SendBytesXor(data,2,1); - delay_ms(50); - ret=DMod_ReadBytesXor(read,4,100); - DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); - return ret; -} -static int cmd_jwt_boot_erase(list_def *argv) -{ - int ret=0; - ret=EW_bootErease(); - return ret; -} -commend_export(jwt_boot_erase,cmd_jwt_boot_erase,"jwt srase in boot") - - -// 跳转 -static uint8_t EW_bootJump(void) -{ - uint8_t data[3]={0xf9,0x00,0x00}; - uint8_t read[4]={0}; - 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]); - return ret; -} -static int cmd_jwt_boot_jump(list_def *argv) -{ - int ret=0; - ret=EW_bootJump(); - return ret; -} -commend_export(jwt_boot_jump,cmd_jwt_boot_jump,"jwt jump in boot") - - -// 充电 -static uint8_t EW_bootCharg(void) -{ - uint8_t data[4]={0xf8,0x01,0x01,0x00}; - uint8_t read[4]={0}; - uint8_t ret=0; - DMod_SendBytesXor(data,3,1); - delay_ms(2); - ret=DMod_ReadBytesXor(read,4,100); - DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); - return ret; -} -static int cmd_jwt_boot_charg(list_def *argv) -{ - int ret=0; - ret=EW_bootCharg(); - return ret; -} -commend_export(jwt_boot_charg,cmd_jwt_boot_charg,"jwt charg in boot") - - - -// 放电 -static uint8_t EW_bootDisCharg(void) -{ - uint8_t data[4]={0xf8,0x01,0x00,0x00}; - uint8_t read[4]={0}; - uint8_t ret=0; - 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]); - return ret; -} -static int cmd_jwt_boot_discharg(list_def *argv) -{ - int ret=0; - ret=EW_bootDisCharg(); - return ret; -} -commend_export(jwt_boot_discharg,cmd_jwt_boot_discharg,"jwt discharg in boot") - - - -// 发送数据 -// len 最长为128字节 -static uint8_t EW_bootWrite(uint16_t addr,uint8_t *d,uint16_t len) -{ - uint8_t ret=0; - uint8_t read[4]={0}; - uint8_t *buf=rt_malloc(len+2+2+1); - if(buf==RT_NULL) return 1; - buf[0]=0xfc; - buf[1]=2+len; - buf[2]=addr&0xff; - buf[3]=addr>>8; - rt_memcpy(&buf[4],d,len); - LED2_Out=0; - DMod_SendBytesXor(buf,len+2+2,1); - LED2_Out=1; - ret=DMod_ReadBytesXor(read,4,100); - rt_free(buf); - if(ret){ - DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); - } - return ret; -} - - - -// 校验 -static uint8_t EW_bootCheckCrc(uint16_t adr_start,uint16_t adr_end,uint32_t *crc) -{ - uint8_t ret=0; - uint8_t cmd[7]={0xfb,0x04,adr_start&0xff,adr_start>>8,adr_end&0xff,adr_end>>8}; - uint8_t read[4+4]={0}; - DMod_SendBytesXor(cmd,6,1); - delay_ms(10); - ret=DMod_ReadBytesXor(read,8,100); - if(ret==0){ - if(crc){ - *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("ret=%d,dat=%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,", - ret,read[0],read[1],read[2],read[3],read[4],read[5],read[6],read[7]); - return ret; -} -static int cmd_jwt_boot_checkcrc(list_def *argv) -{ - int ret=0; - uint32_t crc=0; - ret=EW_bootCheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc); - cmd_print("jwt crc32=0x%04x.",crc); - //crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN); - crc=UPDATA_CRC_APP; - cmd_print("local crc32=0x%04x.",crc); - return ret; -} -commend_export(jwt_boot_checkcrc,cmd_jwt_boot_checkcrc,"jwt checkcrc in boot") - - - -// 读取 -static uint8_t EW_bootRead(uint16_t adr,uint8_t *buf,uint16_t len) -{ - uint8_t ret=0; - uint8_t cmd[7]={0xfa,0x03,adr&0xff,adr>>8,len}; - uint16_t read_len=2+len+1+1; - uint8_t *read=rt_malloc(read_len); - if(read==RT_NULL) return 1; - DMod_SendBytesXor(cmd,6,1); - ret=DMod_ReadBytesXor(read,read_len,100); - rt_memset(buf,0,len); - if(ret==0) - { - rt_memcpy(buf,&read[3],len); - } - DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); - rt_free(read); - return ret; -} - - - - - -// app:通信测试 -static int EW_appCommTest(void) -{ - uint8_t data[4]={0x11,0x22}; - uint8_t ret; - DBG_LOG("send:%02x,%02x.",data[0],data[1]); - ret=EW_CommTest(data,2,300); - DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,data[0],data[1],data[2],data[3]); - return ret; -} -static int cmd_jwt_app_commtest(list_def *argv) -{ - int ret=0; - ret=EW_appCommTest(); - return ret; -} -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]); - return ret; -} -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") - - -// app:runbootloader -static void EW_appRunBoot(void) -{ - EW_Charge(1,0,0); - delay_ms(6000); - EW_RunBootLoader(1,1); - DBG_LOG("run boot"); -} -static int cmd_jwt_app_runboot(list_def *argv) -{ - int ret=0; - EW_appRunBoot(); - return ret; -} -commend_export(jwt_app_runboot,cmd_jwt_app_runboot,"jwt turn to bootloader") - - - - -// 升级 -void EW_Updata(void) -{ - Checker_RunCfg_st *cfg=&checker_runcfg; - uint16_t ret=0; - uint8_t read_buf[4]={0}; - uint8_t *data=(uint8_t *)MC_CODE_ADDR+UPDATA_BASE_ADDR; - uint16_t len=UPDATA_DATA_LEN; - uint16_t addr=UPDATA_BASE_ADDR; - uint8_t pack_len=UPDATA_PACK_LEN; - uint32_t crc=0; - uint32_t crc_module=0; - - // 充电时间 6000 - int time_charg=checker_runcfg.params[0]; - // 加载app时间 6000 - int time_loadapp=checker_runcfg.params[1]; - // 总线关断时间 1000 - int time_poweroff=checker_runcfg.params[2]; - // 升级模式,0,无app时升级;1,无条件升级 - int updata_mode=checker_runcfg.params[3]; - - retry: - delay_ms(100); - ret=EW_bootCharg(); - if(ret){ - // 有可能在app中 - delay_ms(time_loadapp); - EW_Charge(1,0,0); - delay_ms(time_charg); - if(EW_appCommTest()==0){ - if(updata_mode==1){ - delay_ms(50); - EW_RunBootLoader(0,1); - updata_mode=2; - DBG_LOG("turn to bootloader,retry."); - goto retry; - }else if(updata_mode==2){ - // 已经重试过一次了,bootloader还是不能通信 - DBG_WARN("boot commit failed."); - ret=12; - goto err; - }else if(updata_mode==0){ - // 有app的时候不需要升级 - DBG_WARN("no need updata."); - ret=0; - goto err; - } - }else{ - if(updata_mode!=2){ - // bootloader 和 app 都不能通信 - DBG_WARN("commit failed"); - delay_ms(50); - EW_RunBootLoader(0,1); - updata_mode=2; - goto retry; - }else{ - DBG_WARN("retry failed."); - ret=13; - goto err; - } - } - } - if(ret) {ret=1;goto err;} - delay_ms(time_charg); - ret=EW_bootErease(); - if(ret) {ret=2;goto err;} - delay_ms(600); - while(len>0){ - pack_len=len>UPDATA_PACK_LEN?UPDATA_PACK_LEN:len; - LED1_Out=!LED1_Out; - ret=EW_bootWrite(addr,data,pack_len); - addr+=pack_len; - data+=pack_len; - len-=pack_len; - if(ret) {ret=3;goto err;} - delay_ms(1); - } - //crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN); - crc=UPDATA_CRC_APP; - DBG_LOG("local crc:0x%04x.",crc); - ret=EW_bootCheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc_module); - DBG_LOG("module crc:0x%04x.",crc_module); - if(ret) {ret=4;goto err;} - if(crc!=crc_module){ret=5;goto err;} - delay_ms(50); - ret=EW_bootJump(); - if(ret) {ret=6;goto err;} - delay_ms(time_loadapp); - ret=EW_EnWriteMTP(0,1); - if(ret) {ret=7;goto err;} - DBG_LOG("EW_EnWriteMTP success."); - delay_ms(1); - - ret=EW_WriteMTP(1,(uint8_t)(UPDATA_FLAG_ADDR/4),UPDATA_FLAG,4); - if(ret) {ret=8;goto err;} - 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(time_poweroff); - XTBUS_ON; - delay_ms(time_loadapp); - ret=EW_appCommTest(); - if(ret) {ret=11;goto err;} - DBG_LOG("EW_appCommTest success."); - - err: - DBG_LOG("ret=%d",ret); - Checker_SetRtv(&ret,checker_runcfg.rtv_count); - Checker_MaskResult(ret,checker_runcfg.task_info.runindex); -} -static int cmd_jwt_updata(list_def *argv) -{ - int ret=0; - checker_runcfg.params[0]=6000; - checker_runcfg.params[1]=6000; - checker_runcfg.params[2]=1000; - checker_runcfg.params[3]=0; - checker_runcfg.rtv_count=0; - EW_Updata(); - return ret; -} -commend_export(jwt_updata,cmd_jwt_updata,"jwt updata") - /* diff --git a/source/elec_det/interface/EWUpdata.c b/source/elec_det/interface/EWUpdata.c new file mode 100644 index 0000000..a376ca7 --- /dev/null +++ b/source/elec_det/interface/EWUpdata.c @@ -0,0 +1,480 @@ + + + +#include "base/define.h" +#include "basechecker.h" +#include "stdint.h" +#include "EWUpdata.h" +#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" +#include "debug.h" +#include "commend.h" +#include "mystring.h" +#include "mystdlib.h" + + + + + +#define UPDATA_PACK_LEN 128 +#define UPDATA_BASE_ADDR 0x1000 +#define UPDATA_DATA_LEN (12*1024) +#define UPDATA_FLAG_ADDR (0x7c) +#define BOOT_FLAG ((uint8_t []){0x99,0x66,0xaa,0x55}) +#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_bootErease(void) +{ + uint8_t data[3]={0xfe,0x00,0x00}; + uint8_t read[4]={0}; + uint8_t ret=0; + DMod_SendBytesXor(data,2,1); + delay_ms(50); + ret=DMod_ReadBytesXor(read,4,100); + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); + return ret; +} +static int cmd_jwt_boot_erase(list_def *argv) +{ + int ret=0; + ret=EW_bootErease(); + return ret; +} +commend_export(jwt_boot_erase,cmd_jwt_boot_erase,"jwt srase in boot") + + +// 跳转 +static uint8_t EW_bootJump(void) +{ + uint8_t data[3]={0xf9,0x00,0x00}; + uint8_t read[4]={0}; + 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]); + return ret; +} +static int cmd_jwt_boot_jump(list_def *argv) +{ + int ret=0; + ret=EW_bootJump(); + return ret; +} +commend_export(jwt_boot_jump,cmd_jwt_boot_jump,"jwt jump in boot") + + +// 充电 +static uint8_t EW_bootCharg(void) +{ + uint8_t data[4]={0xf8,0x01,0x01,0x00}; + uint8_t read[4]={0}; + uint8_t ret=0; + DMod_SendBytesXor(data,3,1); + delay_ms(2); + ret=DMod_ReadBytesXor(read,4,100); + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); + return ret; +} +static int cmd_jwt_boot_charg(list_def *argv) +{ + int ret=0; + ret=EW_bootCharg(); + return ret; +} +commend_export(jwt_boot_charg,cmd_jwt_boot_charg,"jwt charg in boot") + + + +// 放电 +static uint8_t EW_bootDisCharg(void) +{ + uint8_t data[4]={0xf8,0x01,0x00,0x00}; + uint8_t read[4]={0}; + uint8_t ret=0; + 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]); + return ret; +} +static int cmd_jwt_boot_discharg(list_def *argv) +{ + int ret=0; + ret=EW_bootDisCharg(); + return ret; +} +commend_export(jwt_boot_discharg,cmd_jwt_boot_discharg,"jwt discharg in boot") + + + +// 发送数据 +// len 最长为128字节 +static uint8_t EW_bootWrite(uint16_t addr,uint8_t *d,uint16_t len) +{ + uint8_t ret=0; + uint8_t read[4]={0}; + uint8_t *buf=rt_malloc(len+2+2+1); + if(buf==RT_NULL) return 1; + buf[0]=0xfc; + buf[1]=2+len; + buf[2]=addr&0xff; + buf[3]=addr>>8; + rt_memcpy(&buf[4],d,len); + LED2_Out=0; + DMod_SendBytesXor(buf,len+2+2,1); + LED2_Out=1; + ret=DMod_ReadBytesXor(read,4,100); + rt_free(buf); + if(ret){ + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); + } + return ret; +} + + + +// 校验 +static uint8_t EW_bootCheckCrc(uint16_t adr_start,uint16_t adr_end,uint32_t *crc) +{ + uint8_t ret=0; + uint8_t cmd[7]={0xfb,0x04,adr_start&0xff,adr_start>>8,adr_end&0xff,adr_end>>8}; + uint8_t read[4+4]={0}; + DMod_SendBytesXor(cmd,6,1); + delay_ms(10); + ret=DMod_ReadBytesXor(read,8,100); + if(ret==0){ + if(crc){ + *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("ret=%d,dat=%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,", + ret,read[0],read[1],read[2],read[3],read[4],read[5],read[6],read[7]); + return ret; +} +static int cmd_jwt_boot_checkcrc(list_def *argv) +{ + int ret=0; + uint32_t crc=0; + ret=EW_bootCheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc); + cmd_print("jwt crc32=0x%04x.",crc); + //crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN); + crc=UPDATA_CRC_APP; + cmd_print("local crc32=0x%04x.",crc); + return ret; +} +commend_export(jwt_boot_checkcrc,cmd_jwt_boot_checkcrc,"jwt checkcrc in boot") + + + +// 读取 +static uint8_t EW_bootRead(uint16_t adr,uint8_t *buf,uint16_t len) +{ + uint8_t ret=0; + uint8_t cmd[7]={0xfa,0x03,adr&0xff,adr>>8,len}; + uint16_t read_len=2+len+1+1; + uint8_t *read=rt_malloc(read_len); + if(read==RT_NULL) return 1; + DMod_SendBytesXor(cmd,6,1); + ret=DMod_ReadBytesXor(read,read_len,100); + rt_memset(buf,0,len); + if(ret==0) + { + rt_memcpy(buf,&read[3],len); + } + DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,read[0],read[1],read[2],read[3]); + rt_free(read); + return ret; +} + + + +// 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]); + return ret; +} +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") + + +// app:通信测试 +static int EW_appCommTest(void) +{ +// uint8_t data[4]={0x11,0x22}; +// uint8_t ret; +// DBG_LOG("send:%02x,%02x.",data[0],data[1]); +// ret=EW_CommTest(data,2,300); +// DBG_LOG("ret=%d,dat=%02x,%02x,%02x,%02x,",ret,data[0],data[1],data[2],data[3]); +// return ret; + return EW_appRead(); +} +static int cmd_jwt_app_commtest(list_def *argv) +{ + int ret=0; + ret=EW_appCommTest(); + return ret; +} +commend_export(jwt_app_commtest,cmd_jwt_app_commtest,"jwt commtest in app") + + + + + +// app:runbootloader +static void EW_appRunBoot(void) +{ + EW_Charge(1,0,0); + delay_ms(6000); + EW_RunBootLoader(1,1); + DBG_LOG("run boot"); +} +static int cmd_jwt_app_runboot(list_def *argv) +{ + int ret=0; + EW_appRunBoot(); + return ret; +} +commend_export(jwt_app_runboot,cmd_jwt_app_runboot,"jwt turn to bootloader") + + + + +typedef struct{ + // 充电时间 6000 + int time_charg; + // 加载app时间 6000 + int time_loadapp; + // 总线关断时间 1000 + int time_poweroff; + // 升级模式,0,无app时升级;1,无条件升级 + int updata_mode; + // 模块状态 + int state; +}ew_updata_def; + + + +// 硬复位 +int EW_HardReset(ew_updata_def *e) +{ + EW_BUS_OFF; + delay_ms(e->time_poweroff); + EW_BUS_ON; + return 0; +} + + +// 判断模块在何种工作状态 1:boot 2:app +// 3:boot失败且app也失败 +int EW_CheckState(ew_updata_def *e) +{ + uint16_t ret=0; + delay_ms(100); + ret=EW_bootCharg(); + if(ret==0){ + delay_ms(e->time_charg); + e->state=1; + }else{ + EW_HardReset(e); + delay_ms(e->time_loadapp); + ret=EW_appCommTest(); + delay_ms(5); + if(ret==0){ + e->state=2; + }else{ + e->state=3; + } + } + return e->state; +} + + + +// 跳转到app的方式 +static int EW_TurnToBoot1(ew_updata_def *e) +{ + DBG_LOG("turn to boot1"); + delay_ms(5); + EW_EnWriteMTP(0,1); + delay_ms(5); + EW_RunBootLoader(0,1); + delay_ms(500); + if(EW_bootCharg()==0) + return 0; + else + return 1; +} +static int EW_TurnToBoot2(ew_updata_def *e) +{ + DBG_LOG("turn to boot2"); + delay_ms(5); + EW_EnWriteMTP(0,1); + delay_ms(5); + EW_WriteMTP(0,(uint8_t)(UPDATA_FLAG_ADDR/4),BOOT_FLAG,4); + delay_ms(5); + return 1; +} + +// 跳转到bootloader +int EW_TurnToBoot(ew_updata_def *e) +{ + typedef int (*turnfun)(ew_updata_def *e); + turnfun func_table[]={EW_TurnToBoot2,EW_TurnToBoot2}; + int ret=0; + for(int i=0;i<2;i++){ + if(e->state!=1){ + ret=func_table[i](e); + if(ret){ + EW_HardReset(e); + } + EW_CheckState(e); + }else{ + break; + } + } + return e->state; +} + + + +static void EW_ParamPrint(ew_updata_def *e) +{ + DBG_LOG("time_charg=%d",e->time_charg); + DBG_LOG("time_loadapp=%d",e->time_loadapp); + DBG_LOG("time_poweroff=%d",e->time_poweroff); + DBG_LOG("updata_mode=%d",e->updata_mode); +} + + +// 升级 +void EW_Updata(void) +{ + Checker_RunCfg_st *cfg=&checker_runcfg; + uint16_t ret=0; + uint8_t read_buf[4]={0}; + uint8_t *data=(uint8_t *)MC_CODE_ADDR+UPDATA_BASE_ADDR; + uint16_t len=UPDATA_DATA_LEN; + uint16_t addr=UPDATA_BASE_ADDR; + uint8_t pack_len=UPDATA_PACK_LEN; + uint32_t crc=0; + uint32_t crc_module=0; + + ew_updata_def ew_updata={0}; + // 充电时间 6000 + ew_updata.time_charg=checker_runcfg.params[0]; + // 加载app时间 6000 + ew_updata.time_loadapp=checker_runcfg.params[1]; + // 总线关断时间 1000 + ew_updata.time_poweroff=checker_runcfg.params[2]; + // 升级模式,0,无app时升级;1,无条件升级 + ew_updata.updata_mode=checker_runcfg.params[3]; + EW_ParamPrint(&ew_updata); + PowerCalibration_set(200,120); + ret=EW_CheckState(&ew_updata); + if(ret==2){ + // 在app中 + if(ew_updata.updata_mode==0){ + DBG_LOG("no need updata."); + ret=0; + goto err; + } + } + ret=EW_TurnToBoot(&ew_updata); + // ret!=1 跳转到bootloader失败 + if(ret!=1) { + DBG_WARN("turn to boot bailed.ret=%d",ret); + ret=1; + goto err; + } + DBG_LOG("erase app"); + ret=EW_bootErease(); + if(ret) {ret=2;goto err;} + delay_ms(600); + while(len>0){ + pack_len=len>UPDATA_PACK_LEN?UPDATA_PACK_LEN:len; + LED1_Out=!LED1_Out; + ret=EW_bootWrite(addr,data,pack_len); + addr+=pack_len; + data+=pack_len; + len-=pack_len; + if(ret) {ret=3;goto err;} + delay_ms(1); + } + //crc=Crc32Calu((uint32_t *)(MC_CODE_ADDR+UPDATA_BASE_ADDR),UPDATA_DATA_LEN); + crc=UPDATA_CRC_APP; + DBG_LOG("local crc:0x%04x.",crc); + ret=EW_bootCheckCrc(UPDATA_BASE_ADDR,UPDATA_BASE_ADDR+UPDATA_DATA_LEN,&crc_module); + DBG_LOG("module crc:0x%04x.",crc_module); + if(ret) {ret=4;goto err;} + if(crc!=crc_module){ret=5;goto err;} + delay_ms(50); + ret=EW_bootJump(); + if(ret) {ret=6;goto err;} + delay_ms(ew_updata.time_loadapp); + ret=EW_EnWriteMTP(0,1); + if(ret) {ret=7;goto err;} + DBG_LOG("EW_EnWriteMTP success."); + delay_ms(1); + + ret=EW_WriteMTP(1,(uint8_t)(UPDATA_FLAG_ADDR/4),UPDATA_FLAG,4); + if(ret) {ret=8;goto err;} + 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(ew_updata.time_poweroff); + XTBUS_ON; + delay_ms(ew_updata.time_loadapp); + ret=EW_appCommTest(); + if(ret) {ret=11;goto err;} + DBG_LOG("EW_appCommTest success."); + + err: + DBG_LOG("ret=%d",ret); + Checker_SetRtv(&ret,checker_runcfg.rtv_count); + Checker_MaskResult(ret,checker_runcfg.task_info.runindex); +} +static int cmd_jwt_updata(list_def *argv) +{ + int ret=0; + checker_runcfg.params[0]=6000; + checker_runcfg.params[1]=6000; + checker_runcfg.params[2]=1000; + checker_runcfg.params[3]=0; + checker_runcfg.rtv_count=0; + EW_Updata(); + return ret; +} +commend_export(jwt_updata,cmd_jwt_updata,"jwt updata") + + + + diff --git a/source/elec_det/interface/EWUpdata.h b/source/elec_det/interface/EWUpdata.h new file mode 100644 index 0000000..dce6f2b --- /dev/null +++ b/source/elec_det/interface/EWUpdata.h @@ -0,0 +1,15 @@ + +#ifndef EWUpdata_h__ +#define EWUpdata_h__ + + + +void EW_Updata(void); + + + + + +#endif + + diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index d42d6de..d209367 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-11-15 17:56:15" +#define BUILD_DATE "2023-11-16 17:26:38" #define SOFT_VERSION "2.06"