boot流程OK

This commit is contained in:
sunbeam 2024-05-09 11:11:34 +08:00
parent ffedf209af
commit 1c0d34995d
9 changed files with 116 additions and 48 deletions

BIN
CAN_Bootloader/DM_RP_SA.dll Normal file

Binary file not shown.

Binary file not shown.

View File

@ -137,7 +137,7 @@ namespace usb2canfd{
//加载DLL //加载DLL
LoadDll = function(){ LoadDll = function(){
try{ try{
DllHandle = ..raw.loadDll("USB2XXX.dll") DllHandle = ..raw.loadDll("\USB2XXX.dll")
} }
catch(err) catch(err)
{ {

View File

@ -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}; 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}; 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}; 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}; 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}; 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}; 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 console;
/* /*
import fsys.fileInfo; import fsys.fileInfo;
info = fsys.fileInfo("C:\Users\fcb19\Desktop\dll\libusb-1.0.dll"); info = fsys.fileInfo("C:\Users\fcb19\Desktop\dll\libusb-1.0.dll");
@ -62,7 +64,8 @@ if(ret == 0){
Display("DLL加载成功"); Display("DLL加载成功");
} }
else { else {
Display("DLL加载失败"); //Display("DLL加载失败");
return ;
} }
@ -246,5 +249,13 @@ mainForm.btnDiag.oncommand = function(id,event){
thrdHandle,thrdId = thread.create( CanThread ) 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(); mainForm.show();
return win.loopMessage(); return win.loopMessage();

View File

@ -83,6 +83,9 @@ FuncLoopMsg = function(msg){
case 115 { case 115 {
write2Etest(msg.wParam) write2Etest(msg.wParam)
} }
case 120 {
win.quitMessage()
}
else { else {
} }
@ -197,14 +200,14 @@ var PackID = 0;
var FuncSendPackage = function(){ var FuncSendPackage = function(){
while(#Packdata > 0) while(#Packdata > 0)
{ {
sleep(0.3); //sleep(0.3);
var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC}; var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC};
var max = #Packdata > 7 ? 7 : #Packdata; var max = #Packdata > 7 ? 7 : #Packdata;
for(i=1;max;1){ for(i=1;max;1){
data[i+1] = table.remove(Packdata); data[i+1] = table.remove(Packdata);
} }
CANHw.SendMsg(PackID,data); CANHw.SendMsg(PackID,data);
sleep(2); sleep(1);
PackNext += 1; PackNext += 1;
if(PackNext > 0x2f){ if(PackNext > 0x2f){
PackNext = 0x20; PackNext = 0x20;

View File

@ -1,7 +1,7 @@
FuncReq31EraseFlash = function(addr,len){ FuncReq31EraseFlash = function(addr,len){
FuncDisplay("开始擦除数据") 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); FuncReq31(data);
} }
@ -19,6 +19,19 @@ FuncReq31CheckFlash = function(){
FuncReq31(data); 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]; var rid = (data[2]<<8) + data[3];
select(rid) { select(rid) {
case 0xFF00 { case 0xFD01 {
FuncDisplay("擦除成功") FuncDisplay("擦除成功")
} }
case 0xFD02 {
FuncDisplay("flash driver校验成功")
}
case 0x0202 { case 0x0202 {
FuncDisplay("校验成功") FuncDisplay("校验成功")
} }

View File

@ -19,7 +19,7 @@ FuncDiag34Pro = function(data){
FuncGetSengLen = function(){ FuncGetSengLen = function(){
if(maxlen>2){ if(maxlen>2){
return maxlen-2; return maxlen;
} }
else { else {
return 0; return 0;

View File

@ -79,6 +79,7 @@ var alldata_blocknum = 0;
var block_sended = 0; var block_sended = 0;
var sendFlashDriverState = 0; var sendFlashDriverState = 0;
var FuncSendBlockApp_sendflag = 0; var FuncSendBlockApp_sendflag = 0;
var nowid=0;
FuncSendBlockInit = function(id){ FuncSendBlockInit = function(id){
var len = 0; var len = 0;
alldata = FuncGetAllData(id); alldata = FuncGetAllData(id);
@ -90,12 +91,13 @@ FuncSendBlockInit = function(id){
return 1; return 1;
} }
for(i=1;#alldata;1){ for(i=1;#alldata;1){
len += math.ceil(#alldata[i]["data"] / 0x200) len += math.ceil(#alldata[i]["data"] / FuncGetSengLen())
} }
alldata_blocknum = len; alldata_blocknum = len;
block_sended = 0; block_sended = 0;
sendblockstate = 0; sendblockstate = 0;
FuncSendBlockApp_sendflag = 0; FuncSendBlockApp_sendflag = 0;
nowid = id;
//console.log("发送数据初始化") //console.log("发送数据初始化")
return 0; return 0;
} }
@ -142,6 +144,9 @@ FuncSendBlockApp = function(){
FuncSendBlockApp_sendflag = 0; FuncSendBlockApp_sendflag = 0;
if(FuncGetSendStatus() == true){//所有块发送完成 if(FuncGetSendStatus() == true){//所有块发送完成
sendblockstate += 1; sendblockstate += 1;
if(nowid == 1){
sendblockstate += 1;
}
} }
} }
} }
@ -291,29 +296,24 @@ FuncBootSeq = function(){
} }
case 9 { case 9 {
if(sendstate == 0){ if(sendstate == 0){
FuncReq31EraseFlash(0x1FFFF000,0x1000);
FuncClearState(); FuncClearState();
//FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode
} }
else { else {
//var ret = FuncWait(0x2E); var ret = FuncWait(0x31);
nextstate(0); nextstate(ret);
} }
} }
case 10 { case 10 {
if(sendstate == 0){//写入installation_date if(sendstate == 0){//写入installation_date
var year1 = BCD_Conv(time.now().year/100); FuncReq3103(0xFD01);
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})
FuncClearState(); FuncClearState();
//console.log("写入installation_date")
} }
else { else {
//var ret = FuncWait(0x2E); var ret = FuncWait(0x31);
nextstate(0); nextstate(ret);
} }
} }
case 11 { case 11 {
@ -329,8 +329,9 @@ FuncBootSeq = function(){
} }
case 12 { case 12 {
if(sendstate == 0){//CheckLogicBlock if(sendstate == 0){//CheckLogicBlock
var crc = FuncGetFlashCRC(0); //var crc = FuncGetFlashCRC(0);
FuncReq31CheckLogicBlock(crc); //FuncReq31CheckLogicBlock(crc);
FuncReq3101FD02();
FuncClearState(); FuncClearState();
} }
else { else {
@ -339,8 +340,18 @@ FuncBootSeq = function(){
} }
} }
case 13 { case 13 {
if(sendstate == 0){//写入installation_date
FuncReq3103(0xFD02);
FuncClearState();
}
else {
var ret = FuncWait(0x31);
nextstate(ret);
}
}
case 14 {
if(sendstate == 0){//CheckLogicBlock if(sendstate == 0){//CheckLogicBlock
FuncReq31EraseFlash(0xA000,0x10000); FuncReq31EraseFlash(0x00010000,0x70000);
FuncClearState(); FuncClearState();
} }
else { else {
@ -349,7 +360,7 @@ FuncBootSeq = function(){
} }
} }
case 14 { case 15 {
if(sendstate == 0){//发送数据 if(sendstate == 0){//发送数据
FuncSendBlockInit(2); FuncSendBlockInit(2);
FuncDisplay("开始发送App数据"); FuncDisplay("开始发送App数据");
@ -360,20 +371,9 @@ FuncBootSeq = function(){
nextstate(ret); nextstate(ret);
} }
} }
case 15 {
if(sendstate == 0){//CheckLogicBlock
var crc = FuncGetFlashCRC(1);
FuncReq31CheckLogicBlock(crc);
FuncClearState();
}
else {
var ret = FuncWait(0x31);
nextstate(ret);
}
}
case 16 { case 16 {
if(sendstate == 0){////Programming Dependencies if(sendstate == 0){//CheckLogicBlock
FuncReq31CheckPD(); FuncReq3101FD03();
FuncClearState(); FuncClearState();
} }
else { else {
@ -382,6 +382,16 @@ FuncBootSeq = function(){
} }
} }
case 17 { case 17 {
if(sendstate == 0){////Programming Dependencies
FuncReq3103(0xFD03);
FuncClearState();
}
else {
var ret = FuncWait(0x31);
nextstate(ret);
}
}
case 18 {
if(sendstate == 0){//复位 if(sendstate == 0){//复位
FuncClearState(); FuncClearState();
FuncReq11(0x03); FuncReq11(0x03);
@ -392,7 +402,7 @@ FuncBootSeq = function(){
} }
} }
case 18 { case 19 {
if(sendstate == 0){//等待复位完成 if(sendstate == 0){//等待复位完成
delaycount = 0; delaycount = 0;
FuncClearState(); FuncClearState();
@ -406,7 +416,7 @@ FuncBootSeq = function(){
} }
} }
case 19 { case 20 {
if(sendstate == 0){ if(sendstate == 0){
FuncReq10(true,0x03);//进入扩展会话 FuncReq10(true,0x03);//进入扩展会话
FuncClearState(); FuncClearState();
@ -416,7 +426,7 @@ FuncBootSeq = function(){
nextstate(ret); nextstate(ret);
} }
} }
case 20 { case 21 {
if(sendstate == 0){ if(sendstate == 0){
FuncReq28(0x00,0x01);//开启发送 FuncReq28(0x00,0x01);//开启发送
FuncClearState(); FuncClearState();
@ -426,7 +436,7 @@ FuncBootSeq = function(){
nextstate(ret); nextstate(ret);
} }
} }
case 21 { case 22 {
if(sendstate == 0){ if(sendstate == 0){
FuncReq85(0x01);//开启DTC FuncReq85(0x01);//开启DTC
FuncClearState(); FuncClearState();
@ -436,7 +446,7 @@ FuncBootSeq = function(){
nextstate(ret); nextstate(ret);
} }
} }
case 22 { case 23 {
if(sendstate == 0){ if(sendstate == 0){
FuncReq10(true,0x01);//进入默认会话 FuncReq10(true,0x01);//进入默认会话
FuncClearState(); FuncClearState();

View File

@ -65,6 +65,7 @@ FuncGetFlashCRC = function(id){
return crc; return crc;
} }
var s19crc = {};
FuncOpenS19File = function(id,path){ 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){ if(block != null){
table.push(FlashData,block) table.push(FlashData,block)
} }
/* if(s19crc != null){
for(i=1;#FlashData;1){ table.push(FlashData,s19crc)
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);
} }
*/
AllData[id] = FlashData; AllData[id] = FlashData;
} }
//blocknum = 1; //blocknum = 1;
return path; return path;