diff --git a/CAN_Bootloader/DM_RP_SA.dll b/CAN_Bootloader/DM_RP_SA.dll new file mode 100644 index 0000000..bfde764 Binary files /dev/null and b/CAN_Bootloader/DM_RP_SA.dll differ diff --git a/CAN_Bootloader/USB2XXX.dll b/CAN_Bootloader/USB2XXX.dll index b7649ce..7d01443 100644 Binary files a/CAN_Bootloader/USB2XXX.dll and b/CAN_Bootloader/USB2XXX.dll differ diff --git a/CAN_Bootloader/lib/usb2canfd.aardio b/CAN_Bootloader/lib/usb2canfd.aardio index f5db3cf..730c342 100644 --- a/CAN_Bootloader/lib/usb2canfd.aardio +++ b/CAN_Bootloader/lib/usb2canfd.aardio @@ -137,7 +137,7 @@ namespace usb2canfd{ //加载DLL LoadDll = function(){ try{ - DllHandle = ..raw.loadDll("USB2XXX.dll") + DllHandle = ..raw.loadDll("\USB2XXX.dll") } catch(err) { diff --git a/CAN_Bootloader/main.aardio b/CAN_Bootloader/main.aardio index ecec861..54751b5 100644 --- a/CAN_Bootloader/main.aardio +++ b/CAN_Bootloader/main.aardio @@ -14,6 +14,7 @@ btnReadF199={cls="button";text="读取F199";left=149;top=415;right=248;bottom=44 btnReadHw={cls="button";text="读取硬件版本号";left=149;top=381;right=248;bottom=409;z=12}; btnReadSw={cls="button";text="读取软件版本号";left=37;top=382;right=136;bottom=410;z=10}; btnTest={cls="button";text="停止";left=149;top=316;right=248;bottom=344;z=11}; +button={cls="button";text="Button";left=248;top=445;right=278;bottom=459;z=26}; cbbChannel={cls="combobox";left=58;top=64;right=191;bottom=90;edge=1;items={};mode="dropdown";z=3}; cbbDev={cls="combobox";left=58;top=27;right=191;bottom=53;edge=1;items={};mode="dropdown";z=1}; checkbox={cls="checkbox";text="CANFD设备";left=151;top=101;right=248;bottom=120;checked=1;z=21}; @@ -49,6 +50,7 @@ Display = function(str){//显示日志 } //遍历目录 import console; + /* import fsys.fileInfo; info = fsys.fileInfo("C:\Users\fcb19\Desktop\dll\libusb-1.0.dll"); @@ -62,7 +64,8 @@ if(ret == 0){ Display("DLL加载成功"); } else { - Display("DLL加载失败"); + //Display("DLL加载失败"); + return ; } @@ -246,5 +249,13 @@ mainForm.btnDiag.oncommand = function(id,event){ thrdHandle,thrdId = thread.create( CanThread ) +mainForm.onClose = function(hwnd,message,wParam,lParam){ + ::PostThreadMessage(thrdId,120,1,0) + raw.closehandle(thrdHandle); + thread.waitClose(thrdHandle); + +} + + mainForm.show(); return win.loopMessage(); \ No newline at end of file diff --git a/CAN_Bootloader/user/CanThread.aardio b/CAN_Bootloader/user/CanThread.aardio index 51b07d1..617ab12 100644 --- a/CAN_Bootloader/user/CanThread.aardio +++ b/CAN_Bootloader/user/CanThread.aardio @@ -83,6 +83,9 @@ FuncLoopMsg = function(msg){ case 115 { write2Etest(msg.wParam) } + case 120 { + win.quitMessage() + } else { } @@ -197,14 +200,14 @@ var PackID = 0; var FuncSendPackage = function(){ while(#Packdata > 0) { - sleep(0.3); + //sleep(0.3); var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC}; var max = #Packdata > 7 ? 7 : #Packdata; for(i=1;max;1){ data[i+1] = table.remove(Packdata); } CANHw.SendMsg(PackID,data); - sleep(2); + sleep(1); PackNext += 1; if(PackNext > 0x2f){ PackNext = 0x20; diff --git a/CAN_Bootloader/user/Diag31code.aardio b/CAN_Bootloader/user/Diag31code.aardio index 7cfd4e8..268368a 100644 --- a/CAN_Bootloader/user/Diag31code.aardio +++ b/CAN_Bootloader/user/Diag31code.aardio @@ -1,7 +1,7 @@ FuncReq31EraseFlash = function(addr,len){ FuncDisplay("开始擦除数据") - var data = {0xff,0x00,0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len}; + var data = {0xfd,0x01,0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len}; FuncReq31(data); } @@ -19,6 +19,19 @@ FuncReq31CheckFlash = function(){ FuncReq31(data); } +FuncReq3103 = function(id){ + //停止例程 + var txdata = {0x04,0x31,0x03,id>>8,id&0xff,0x00,0x00,0x00}; + CANHw.SendMsg(DiagReqID,txdata); +} +FuncReq3101FD02 = function(){ + var txdata = {0x04,0x31,0x01,0xfd,0x02,0x00,0x00,0x00}; + CANHw.SendMsg(DiagReqID,txdata); +} +FuncReq3101FD03 = function(){ + var txdata = {0x04,0x31,0x01,0xfd,0x03,0x00,0x00,0x00}; + CANHw.SendMsg(DiagReqID,txdata); +} @@ -48,9 +61,12 @@ FuncDiag31Pro = function(data){ } var rid = (data[2]<<8) + data[3]; select(rid) { - case 0xFF00 { + case 0xFD01 { FuncDisplay("擦除成功") } + case 0xFD02 { + FuncDisplay("flash driver校验成功") + } case 0x0202 { FuncDisplay("校验成功") } diff --git a/CAN_Bootloader/user/Diag34code.aardio b/CAN_Bootloader/user/Diag34code.aardio index 34e36b3..62c238e 100644 --- a/CAN_Bootloader/user/Diag34code.aardio +++ b/CAN_Bootloader/user/Diag34code.aardio @@ -19,7 +19,7 @@ FuncDiag34Pro = function(data){ FuncGetSengLen = function(){ if(maxlen>2){ - return maxlen-2; + return maxlen; } else { return 0; diff --git a/CAN_Bootloader/user/DiagBootcode.aardio b/CAN_Bootloader/user/DiagBootcode.aardio index cab478b..9d0083d 100644 --- a/CAN_Bootloader/user/DiagBootcode.aardio +++ b/CAN_Bootloader/user/DiagBootcode.aardio @@ -79,6 +79,7 @@ var alldata_blocknum = 0; var block_sended = 0; var sendFlashDriverState = 0; var FuncSendBlockApp_sendflag = 0; +var nowid=0; FuncSendBlockInit = function(id){ var len = 0; alldata = FuncGetAllData(id); @@ -90,12 +91,13 @@ FuncSendBlockInit = function(id){ return 1; } for(i=1;#alldata;1){ - len += math.ceil(#alldata[i]["data"] / 0x200) + len += math.ceil(#alldata[i]["data"] / FuncGetSengLen()) } alldata_blocknum = len; block_sended = 0; sendblockstate = 0; FuncSendBlockApp_sendflag = 0; + nowid = id; //console.log("发送数据初始化") return 0; } @@ -142,6 +144,9 @@ FuncSendBlockApp = function(){ FuncSendBlockApp_sendflag = 0; if(FuncGetSendStatus() == true){//所有块发送完成 sendblockstate += 1; + if(nowid == 1){ + sendblockstate += 1; + } } } } @@ -291,29 +296,24 @@ FuncBootSeq = function(){ } case 9 { if(sendstate == 0){ + FuncReq31EraseFlash(0x1FFFF000,0x1000); FuncClearState(); - //FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode } else { - //var ret = FuncWait(0x2E); - nextstate(0); + var ret = FuncWait(0x31); + nextstate(ret); } } case 10 { if(sendstate == 0){//写入installation_date - var year1 = BCD_Conv(time.now().year/100); - var year2 = BCD_Conv(time.now().year%100); - var month = BCD_Conv(time.now().month); - var day = BCD_Conv(time.now().day); - //FuncReq2E(0XF199,{year1,year2,month,day}) + FuncReq3103(0xFD01); FuncClearState(); - //console.log("写入installation_date") } else { - //var ret = FuncWait(0x2E); - nextstate(0); + var ret = FuncWait(0x31); + nextstate(ret); } } case 11 { @@ -329,8 +329,9 @@ FuncBootSeq = function(){ } case 12 { if(sendstate == 0){//CheckLogicBlock - var crc = FuncGetFlashCRC(0); - FuncReq31CheckLogicBlock(crc); + //var crc = FuncGetFlashCRC(0); + //FuncReq31CheckLogicBlock(crc); + FuncReq3101FD02(); FuncClearState(); } else { @@ -339,8 +340,18 @@ FuncBootSeq = function(){ } } case 13 { + if(sendstate == 0){//写入installation_date + FuncReq3103(0xFD02); + FuncClearState(); + } + else { + var ret = FuncWait(0x31); + nextstate(ret); + } + } + case 14 { if(sendstate == 0){//CheckLogicBlock - FuncReq31EraseFlash(0xA000,0x10000); + FuncReq31EraseFlash(0x00010000,0x70000); FuncClearState(); } else { @@ -349,7 +360,7 @@ FuncBootSeq = function(){ } } - case 14 { + case 15 { if(sendstate == 0){//发送数据 FuncSendBlockInit(2); FuncDisplay("开始发送App数据"); @@ -360,20 +371,9 @@ FuncBootSeq = function(){ nextstate(ret); } } - case 15 { - if(sendstate == 0){//CheckLogicBlock - var crc = FuncGetFlashCRC(1); - FuncReq31CheckLogicBlock(crc); - FuncClearState(); - } - else { - var ret = FuncWait(0x31); - nextstate(ret); - } - } case 16 { - if(sendstate == 0){////Programming Dependencies - FuncReq31CheckPD(); + if(sendstate == 0){//CheckLogicBlock + FuncReq3101FD03(); FuncClearState(); } else { @@ -382,6 +382,16 @@ FuncBootSeq = function(){ } } case 17 { + if(sendstate == 0){////Programming Dependencies + FuncReq3103(0xFD03); + FuncClearState(); + } + else { + var ret = FuncWait(0x31); + nextstate(ret); + } + } + case 18 { if(sendstate == 0){//复位 FuncClearState(); FuncReq11(0x03); @@ -392,7 +402,7 @@ FuncBootSeq = function(){ } } - case 18 { + case 19 { if(sendstate == 0){//等待复位完成 delaycount = 0; FuncClearState(); @@ -406,7 +416,7 @@ FuncBootSeq = function(){ } } - case 19 { + case 20 { if(sendstate == 0){ FuncReq10(true,0x03);//进入扩展会话 FuncClearState(); @@ -416,7 +426,7 @@ FuncBootSeq = function(){ nextstate(ret); } } - case 20 { + case 21 { if(sendstate == 0){ FuncReq28(0x00,0x01);//开启发送 FuncClearState(); @@ -426,7 +436,7 @@ FuncBootSeq = function(){ nextstate(ret); } } - case 21 { + case 22 { if(sendstate == 0){ FuncReq85(0x01);//开启DTC FuncClearState(); @@ -436,7 +446,7 @@ FuncBootSeq = function(){ nextstate(ret); } } - case 22 { + case 23 { if(sendstate == 0){ FuncReq10(true,0x01);//进入默认会话 FuncClearState(); diff --git a/CAN_Bootloader/user/S19Decode.aardio b/CAN_Bootloader/user/S19Decode.aardio index d410aef..7e2e93e 100644 --- a/CAN_Bootloader/user/S19Decode.aardio +++ b/CAN_Bootloader/user/S19Decode.aardio @@ -65,6 +65,7 @@ FuncGetFlashCRC = function(id){ return crc; } +var s19crc = {}; FuncOpenS19File = function(id,path){ @@ -147,19 +148,46 @@ FuncOpenS19File = function(id,path){ } - + s19crc = null; + FuncDisplay(string.format("addr=%x ,len = %x",block.address,#block.data))//显示 + if(block.address == 0x10000 && #block.data==0xf0000){ + var last_data_addr = 0; + for(i=1;0x90840-5;1){ + if(block.data[0x90840-5-i] != 0xff){ + last_data_addr = 0x90840-5-i + 0x10000; + var temp = last_data_addr%2048; + if(temp != 0){ + last_data_addr += 2048-temp; + } + s19crc = {}; + s19crc["address"] = 0x7F800; + s19crc["data"] = table.slice(block.data,-0x800,); + s19crc.data[0x7FC] = last_data_addr>>24; + s19crc.data[0x7FB] = last_data_addr>>16; + s19crc.data[0x7FA] = last_data_addr>>8; + s19crc.data[0x7F9] = last_data_addr&0XFF; + + block.data = table.slice(block.data,,last_data_addr-0x10000); + //FuncDisplay(string.format("addr=%x ,Data = %x",last_data_addr,block.data[last_data_addr-0x10000]))//显示 + var crc32temp = FuncCRC32Calc(block.data); + s19crc.data[0x800] = crc32temp>>24; + s19crc.data[0x7FF] = crc32temp>>16; + s19crc.data[0x7FE] = crc32temp>>8; + s19crc.data[0x7FD] = crc32temp&0XFF; + break; + } + } + } if(block != null){ table.push(FlashData,block) } - /* - for(i=1;#FlashData;1){ - var crc = FuncCRC32Calc(FlashData[i].data); - var str = string.format("block %d:addr=0x%X,len=0x%X,crc=0x%X",i,FlashData[i]["address"],#FlashData[i].data,crc); - FuncDisplay(str); + if(s19crc != null){ + table.push(FlashData,s19crc) } - */ + AllData[id] = FlashData; } + //blocknum = 1; return path;