优化Boot流程

This commit is contained in:
sunbeam 2023-03-20 19:42:48 +08:00
parent e1c3b5e5a6
commit 8f8a09bfc9
8 changed files with 215 additions and 165 deletions

View File

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<project ver="10" name="CAN_Bootloader" libEmbed="true" icon="..." ui="win" output="CAN_Bootloader.exe" CompanyName="单位名称" FileDescription="CAN_Bootloader" LegalCopyright="Copyright (C) 作者 2022" ProductName="CAN_Bootloader" InternalName="CAN_Bootloader" FileVersion="0.0.0.03" ProductVersion="0.0.0.03" publishDir="/dist/" dstrip="false" local="false" ignored="false"> <project ver="10" name="CAN_Bootloader" libEmbed="true" icon="res\icon.ico" ui="win" output="CAN_Bootloader.exe" CompanyName="单位名称" FileDescription="CAN_Bootloader" LegalCopyright="Copyright (C) 作者 2022" ProductName="CAN_Bootloader" InternalName="CAN_Bootloader" FileVersion="0.0.0.03" ProductVersion="0.0.0.03" publishDir="/dist/" dstrip="false" local="false" ignored="false">
<file name="main.aardio" path="main.aardio" comment="main.aardio"/> <file name="main.aardio" path="main.aardio" comment="main.aardio"/>
<folder name="资源文件" path="res" embed="true" local="false" ignored="false"/> <folder name="资源文件" path="res" embed="true" local="false" ignored="false">
<file name="icon.ico" path="res\icon.ico" comment="res\icon.ico"/>
</folder>
<folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false"> <folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false">
<file name="诊断子窗口.aardio" path="dlg\诊断子窗口.aardio" comment="dlg\诊断子窗口.aardio"/> <file name="诊断子窗口.aardio" path="dlg\诊断子窗口.aardio" comment="dlg\诊断子窗口.aardio"/>
</folder> </folder>

View File

@ -1,32 +1,32 @@
import win.ui; import win.ui;
/*DSG{{*/ /*DSG{{*/
mainForm = win.form(text="CAN_Bootloader";right=599;bottom=465;border="dialog frame";max=false) mainForm = win.form(text="CAN_Bootloader";right=699;bottom=465;border="dialog frame";max=false)
mainForm.add( mainForm.add(
btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=4}; btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=4};
btnDiag={cls="button";text="诊断";left=149;top=350;right=248;bottom=375;z=25}; btnDiag1001={cls="button";text="默认会话";left=98;top=229;right=190;bottom=260;z=23};
btnFlash={cls="button";text="开始刷写";left=37;top=315;right=136;bottom=343;z=9}; btnDiag1002={cls="button";text="boot会话";left=192;top=229;right=284;bottom=260;z=22};
btnDiag1003={cls="button";text="扩展会话";left=286;top=229;right=378;bottom=260;z=21};
btnFlash={cls="button";text="开始刷写";left=276;top=368;right=375;bottom=396;z=9};
btnFresh={cls="button";text="刷新";left=204;top=28;right=288;bottom=54;z=2}; btnFresh={cls="button";text="刷新";left=204;top=28;right=288;bottom=54;z=2};
btnOpen={cls="button";text="打开文件";left=37;top=282;right=136;bottom=310;z=8}; btnOpen={cls="button";text="打开文件";left=272;top=101;right=371;bottom=129;z=8};
btnOpenFlashdrv={cls="button";text="打开FlashDriver";left=149;top=282;right=248;bottom=310;z=24}; btnReadF186={cls="button";text="读取当前会话";left=4;top=229;right=96;bottom=260;z=13};
btnReadF186={cls="button";text="读取当前会话";left=37;top=349;right=136;bottom=377;z=13}; btnReadF198={cls="button";text="读取F198";left=286;top=261;right=378;bottom=289;z=19};
btnReadF198={cls="button";text="读取F198";left=37;top=415;right=136;bottom=443;z=19}; btnReadF199={cls="button";text="读取F199";left=192;top=261;right=284;bottom=289;z=20};
btnReadF199={cls="button";text="读取F199";left=149;top=415;right=248;bottom=443;z=20}; btnReadHw={cls="button";text="硬件版本号";left=98;top=261;right=190;bottom=289;z=12};
btnReadHw={cls="button";text="读取硬件版本号";left=149;top=381;right=248;bottom=409;z=12}; btnReadSw={cls="button";text="软件版本号";left=4;top=261;right=96;bottom=289;z=10};
btnReadSw={cls="button";text="读取软件版本号";left=37;top=382;right=136;bottom=410;z=10}; btnTest={cls="button";text="停止";left=277;top=400;right=376;bottom=428;z=11};
btnTest={cls="button";text="停止";left=149;top=316;right=248;bottom=344;z=11};
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}; edFile={cls="richedit";left=8;top=131;right=371;bottom=209;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14};
edFile={cls="richedit";left=8;top=131;right=288;bottom=187;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14}; edit={cls="edit";left=390;top=19;right=692;bottom=401;autovscroll=false;edge=1;multiline=1;vscroll=1;z=5};
edFile2={cls="richedit";left=8;top=213;right=288;bottom=269;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=22}; progress={cls="progress";left=389;top=435;right=689;bottom=463;edge=1;max=100;min=0;z=15};
edit={cls="edit";left=294;top=19;right=596;bottom=401;autovscroll=false;edge=1;multiline=1;vscroll=1;z=5}; radiobutton={cls="radiobutton";text="左板";left=277;top=310;right=365;bottom=329;checked=1;z=24};
progress={cls="progress";left=296;top=436;right=596;bottom=464;edge=1;max=100;min=0;z=15}; radiobutton2={cls="radiobutton";text="右板";left=277;top=336;right=365;bottom=355;z=25};
static={cls="static";text="设备";left=1;top=28;right=61;bottom=52;align="center";center=1;transparent=1;z=6}; static={cls="static";text="设备";left=1;top=28;right=61;bottom=52;align="center";center=1;transparent=1;z=6};
static2={cls="static";text="通道";left=1;top=66;right=61;bottom=90;align="center";center=1;transparent=1;z=7}; static2={cls="static";text="通道";left=1;top=66;right=61;bottom=90;align="center";center=1;transparent=1;z=7};
static3={cls="static";text="刷写进度";left=296;top=409;right=349;bottom=429;transparent=1;z=16}; static3={cls="static";text="刷写进度";left=389;top=408;right=442;bottom=428;transparent=1;z=16};
static4={cls="static";text="烧录APP";left=13;top=108;right=85;bottom=132;center=1;transparent=1;z=17}; static4={cls="static";text="烧录APP";left=13;top=108;right=85;bottom=132;center=1;transparent=1;z=17};
static5={cls="static";text="V0.1_20220518";left=451;top=1;right=595;bottom=17;align="right";center=1;transparent=1;z=18}; static5={cls="static";text="V0.1_20230320";left=545;top=1;right=689;bottom=17;align="right";center=1;transparent=1;z=18}
static6={cls="static";text="FlashDriver";left=13;top=195;right=101;bottom=218;transparent=1;z=23}
) )
/*}}*/ /*}}*/
@ -43,7 +43,9 @@ timer_bootcount.onTimer = function(){//boot时间定时器100ms间隔
} }
Display = function(str){//显示日志 Display = function(str){//显示日志
mainForm.edit.print(tostring(time()) + " " + str); var nowtime = time();
nowtime.format="%H:%M:%S";
mainForm.edit.print(tostring(nowtime) + " " + str);
} }
//遍历目录 //遍历目录
import console; import console;
@ -88,7 +90,7 @@ mainForm.btnFresh.oncommand = function(id,event){
} }
mainForm.btnConnect.oncommand = function(id,event){ mainForm.btnConnect.oncommand = function(id,event){
var canfd_check = mainForm.checkbox.checked?0x80:0x00; var canfd_check = 0x80;//mainForm.checkbox.checked?0x80:0x00;
::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,(mainForm.cbbChannel.selIndex - 1)|canfd_check)//自定义消息 ::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,(mainForm.cbbChannel.selIndex - 1)|canfd_check)//自定义消息
/* /*
var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1 var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1
@ -110,6 +112,7 @@ listener.$Display = function(str){
} }
listener.$ShowPath = function(str){ listener.$ShowPath = function(str){
mainForm.edFile.text = str; mainForm.edFile.text = str;
} }
listener.$ShowFlashDrvPath = function(str){ listener.$ShowFlashDrvPath = function(str){
mainForm.edFile2.text = str; mainForm.edFile2.text = str;
@ -138,7 +141,6 @@ listener.$SendEnd = function(isSuccess){
//线程函数 //线程函数
var CanThread = function(){ var CanThread = function(){
//线程函数内部要添加自已的import语句 //线程函数内部要添加自已的import语句
import win; import win;
import console; import console;
@ -161,12 +163,12 @@ var DiagStopReq = function(){
} }
mainForm.btnReadSw.oncommand = function(id,event){ mainForm.btnReadSw.oncommand = function(id,event){
DiagReadDID(0xF188); DiagReadDID(0xF195);
} }
mainForm.btnReadHw.oncommand = function(id,event){ mainForm.btnReadHw.oncommand = function(id,event){
DiagReadDID(0xF191); DiagReadDID(0xF193);
} }
mainForm.btnReadF186.oncommand = function(id,event){ mainForm.btnReadF186.oncommand = function(id,event){
@ -189,6 +191,21 @@ mainForm.btnFlash.oncommand = function(id,event){
if(bootstate == true){ if(bootstate == true){
return ; return ;
} }
import fsys;
var filename = fsys.getFileName(mainForm.edFile.text);
if(mainForm.radiobutton.checked){
if(string.find(filename,"SWTL") == null){
Display("请打开正确的文件");
return;
}
}
else {
if(string.find(filename,"SWTR") == null){
Display("请打开正确的文件");
return;
}
}
bootstate = true; bootstate = true;
mainForm.edit.text = ""; mainForm.edit.text = "";
Display("开始刷写流程"); Display("开始刷写流程");
@ -218,29 +235,43 @@ mainForm.onClose = function(hwnd,message,wParam,lParam){
} }
mainForm.btnReadF198.oncommand = function(id,event){ mainForm.btnReadF198.oncommand = function(id,event){
DiagReadDID(0x1701); DiagReadDID(0xF198);
} }
mainForm.btnReadF199.oncommand = function(id,event){ mainForm.btnReadF199.oncommand = function(id,event){
DiagReadDID(0x1702); DiagReadDID(0xF199);
} }
mainForm.btnOpenFlashdrv.oncommand = function(id,event){
::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开flashdriver
}
var frmChild = win.loadForm("\dlg\诊断子窗口.aardio"); var frmChild = win.loadForm("\dlg\诊断子窗口.aardio");
frmChild.show(false); frmChild.show(false);
mainForm.btnDiag.oncommand = function(id,event){ mainForm.btnDiag1003.oncommand = function(id,event){
Diag10Req(0x03);
frmChild.show();
} }
mainForm.btnDiag1002.oncommand = function(id,event){
Diag10Req(0x02);
}
mainForm.btnDiag1001.oncommand = function(id,event){
Diag10Req(0x01);
}
mainForm.text += " "
mainForm.radiobutton.oncommand = function(id,event){
if(mainForm.radiobutton.checked){
::PostThreadMessage(thrdId,106,0x720,0x620);//自定义消息
}
}
mainForm.radiobutton2.oncommand = function(id,event){
if(mainForm.radiobutton.checked){
::PostThreadMessage(thrdId,106,0x710,0x610);//自定义消息
}
}
mainForm.text += mainForm.static5.text;
thrdHandle,thrdId = thread.create( CanThread ) thrdHandle,thrdId = thread.create( CanThread )
mainForm.show(); mainForm.show();
return win.loopMessage(); return win.loopMessage();

View File

@ -5,8 +5,8 @@ import win.timer;
CANHw = usb2canfd.USB2CANHW(); CANHw = usb2canfd.USB2CANHW();
CANHw.LoadDll(); CANHw.LoadDll();
DiagReqID = 0x741;//0x18dadff1; DiagReqID = 0x720;//0x18dadff1;
DiagRespID = 0x751;//0x18daf1df; DiagRespID = 0x620;//0x18daf1df;
DiagGloableID = 0x7DF;//0x18DB33F1; DiagGloableID = 0x7DF;//0x18DB33F1;
stopflag = 0; stopflag = 0;
//注册一个消息钩子函数 //注册一个消息钩子函数
@ -39,6 +39,8 @@ FuncLoopMsg = function(msg){
var ret = FuncOpenS19File(msg.wParam); var ret = FuncOpenS19File(msg.wParam);
if(ret != null){ if(ret != null){
thread.command.$ShowPath(ret); thread.command.$ShowPath(ret);
var crc32 = FuncGetFlashCRC(msg.wParam);
FuncDisplay("CRC = " ++ string.format("%X",crc32));
} }
} }
@ -47,11 +49,14 @@ FuncLoopMsg = function(msg){
case 105 {//停止boot case 105 {//停止boot
thread.stop(0); thread.stop(0);
} }
case 106 {
FuncSetCANID(msg.wParam,msg.lParam);
}
case 110 {//readDID case 110 {//readDID
FuncReadDID(msg.wParam); FuncReadDID(msg.wParam);
} }
case 111 { case 111 {
FuncReq10(msg.wParam); FuncReq10(false,msg.wParam);
} }
case 112 { case 112 {
FuncReq28(msg.wParam); FuncReq28(msg.wParam);
@ -68,6 +73,10 @@ FuncLoopMsg = function(msg){
} }
} }
FuncSetCANID = function(req,resp){
DiagReqID = req;
DiagRespID = resp;
}
@ -182,6 +191,7 @@ var FuncSendPackage = function(){
for(i=1;max;1){ for(i=1;max;1){
data[i+1] = table.remove(Packdata); data[i+1] = table.remove(Packdata);
} }
sleep(1);
CANHw.SendMsg(PackID,data); CANHw.SendMsg(PackID,data);
PackNext += 1; PackNext += 1;

View File

@ -23,13 +23,27 @@ FuncDiag22Pro = function(data){
case 0xF186 { case 0xF186 {
FuncDisplay("当前会话: " + data[3]); FuncDisplay("当前会话: " + data[3]);
} }
case 0xF191 { case 0xF193 {
FuncDisplay("硬件版本号"); var len = string.len(string.pack(table.slice(data,3)),3);
FuncDisplay(string.pack(table.slice(data,3))); if(data[3] != 0){
var str = string.pack(table.slice(data,3,len+3));
FuncDisplay("硬件版本号:" ++ str);
}
else {
FuncDisplay("硬件版本号未读到");
}
}
case 0xF195 {
var len = string.len(string.pack(table.slice(data,3)),3);
if(data[3] != 0){
var str = string.pack(table.slice(data,3,len+3));
FuncDisplay("软件版本号:" ++ str);
}
else {
FuncDisplay("软件版本号未读到");
} }
case 0xF188 {
FuncDisplay("软件版本号");
FuncDisplay(string.pack(table.slice(data,3)));
} }
case 0xF198 { case 0xF198 {
FuncDisplay("repair_shopcode"); FuncDisplay("repair_shopcode");
@ -37,7 +51,7 @@ FuncDiag22Pro = function(data){
} }
case 0xF199 { case 0xF199 {
FuncDisplay("installation_date"); FuncDisplay("installation_date");
FuncDisplay(string.format("%x%X%x%x",data[3],data[4],data[5],data[6])); FuncDisplay(string.format("%02x%02x%02x%02x",data[3],data[4],data[5],data[6]));
} }
case 0xF187 { case 0xF187 {
FuncDisplay("车辆备用零部件编号"); FuncDisplay("车辆备用零部件编号");
@ -54,77 +68,6 @@ FuncDiag22Pro = function(data){
FuncDisplay(string.pack(table.slice(data,3))); FuncDisplay(string.pack(table.slice(data,3)));
} }
case 0x1701 {
var 水平 = (data[3]<<8) + (data[4]);
var 靠背 = (data[5]<<8) + (data[6]);
FuncDisplay("水平电机当前位置霍尔数: " + 水平 + "靠背电机当前位置数" + 靠背);
}
case 0x1702 {
if(#data < 10){
FuncDisplay("DID-0x1702长度错误")
return;
}
var 水平1 = (data[3]<<8) + (data[4]);
var 水平2 = (data[5]<<8) + (data[6]);
var 靠背1 = (data[7]<<8) + (data[8]);
var 靠背2 = (data[9]<<8) + (data[10]);
FuncDisplay("水平1: " + 水平1 + "水平2" + 水平2);
FuncDisplay("靠背1: " + 靠背1 + "靠背2" + 靠背2);
}
case 0x1706 {
var 水平 = data[3]&0x01;
var 靠背 = (data[3]>>1)&0x01;
FuncDisplay("座椅水平方向电机学习状态: " + 水平 + "座椅靠背方向电机学习状态" + 靠背);
}
case 0x1707 {
var 电流 = (data[3]<<8) + data[4];
FuncDisplay("电流: " + tostring(电流));
}
case 0x1708 {
FuncDisplay("输入状态: ");
var 座椅向前 = data[3]&0x01;
var 座椅向后 = (data[3]>>1)&0x01;
var 靠背向前 = (data[3]>>2)&0x01;
var 靠背向后 = (data[3]>>3)&0x01;
var 快进按键 = (data[3]>>4)&0x01;
var 快出按键 = (data[3]>>5)&0x01;
var 锁扣状态 = (data[3]>>6)&0x01;
var 坐人状态 = (data[3]>>7)&0x01;
FuncDisplay("座椅向前: " + 座椅向前);
FuncDisplay("座椅向后: " + 座椅向后);
FuncDisplay("靠背向前: " + 靠背向前);
FuncDisplay("靠背向后: " + 靠背向后);
FuncDisplay("快进按键: " + 快进按键);
FuncDisplay("快进按键: " + 快进按键);
FuncDisplay("锁扣状态: " + 锁扣状态);
FuncDisplay("坐人状态: " + 坐人状态);
}
case 0x1709 {
FuncDisplay("输出状态: ");
var 座椅向前 = data[3]&0x01;
var 座椅向后 = (data[3]>>1)&0x01;
var 靠背向前 = (data[3]>>2)&0x01;
var 靠背向后 = (data[3]>>3)&0x01;
var 快进按键 = (data[3]>>4)&0x01;
var 快出按键 = (data[3]>>5)&0x01;
FuncDisplay("座椅向前: " + 座椅向前);
FuncDisplay("座椅向后: " + 座椅向后);
FuncDisplay("靠背向前: " + 靠背向前);
FuncDisplay("靠背向后: " + 靠背向后);
FuncDisplay("快进输出: " + 快进按键);
FuncDisplay("快出输出: " + 快进按键);
}
case 0x170B {
var 系统供电电压 = data[3]/10;
FuncDisplay("系统供电电压: " + tostring(系统供电电压) + " V");
}
else {
FuncDisplay("未知DID - " + tostring(did,16));
}
} }
} }

View File

@ -21,7 +21,7 @@ FuncReq2E = function(did,data){
var txdata = {0x10,3+#data,0x2E,did>>8,did&0xff,data[1],data[2],data[3]}; var txdata = {0x10,3+#data,0x2E,did>>8,did&0xff,data[1],data[2],data[3]};
CANHw.SendMsg(DiagReqID,txdata); CANHw.SendMsg(DiagReqID,txdata);
//等待发送 //等待发送
FuncPushPackage(DiagReqID,table.slice(data,3)); FuncPushPackage(DiagReqID,table.slice(data,4));
} }
else { else {
var txdata = {3+#data,0x2E,did>>8,did&0xff,0,0,0,0}; var txdata = {3+#data,0x2E,did>>8,did&0xff,0,0,0,0};

View File

@ -42,6 +42,10 @@ FuncReq31 = function(data){
//接收 //接收
FuncDiag31Pro = function(data){ FuncDiag31Pro = function(data){
//console.dumpJson(data); //console.dumpJson(data);
if(#data < 3){
//FuncDisplay("31长度错误");
return;
}
var rid = (data[2]<<8) + data[3]; var rid = (data[2]<<8) + data[3];
select(rid) { select(rid) {
case 0xFF00 { case 0xFF00 {

View File

@ -83,7 +83,7 @@ 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"] / 0x400)
} }
alldata_blocknum = len; alldata_blocknum = len;
block_sended = 0; block_sended = 0;
@ -102,6 +102,7 @@ FuncSendBlockApp = function(){
select(sendblockstate) { select(sendblockstate) {
case 0{ case 0{
if(FuncSendBlockApp_sendflag == 0){ if(FuncSendBlockApp_sendflag == 0){
FuncDisplay("请求下载");
FuncReq34(alldata[blocknum]["address"],#alldata[blocknum]["data"]); FuncReq34(alldata[blocknum]["address"],#alldata[blocknum]["data"]);
FuncSendBlockApp_sendflag = 1; FuncSendBlockApp_sendflag = 1;
RespState = 0; RespState = 0;
@ -111,6 +112,7 @@ FuncSendBlockApp = function(){
if(FuncWait(0x34) == 0){ if(FuncWait(0x34) == 0){
FuncSendBlockApp_sendflag = 0; FuncSendBlockApp_sendflag = 0;
sendblockstate += 1; sendblockstate += 1;
} }
} }
@ -119,9 +121,11 @@ FuncSendBlockApp = function(){
FuncStartSendBlock(alldata[blocknum]["data"]);//初始化 FuncStartSendBlock(alldata[blocknum]["data"]);//初始化
FuncSendBlockApp_sendflag = 0; FuncSendBlockApp_sendflag = 0;
sendblockstate += 1; sendblockstate += 1;
FuncDisplay("发送App数据中...");
} }
case 2 { case 2 {
if(FuncSendBlockApp_sendflag == 0){ if(FuncSendBlockApp_sendflag == 0){
sleep(20);
FuncSendNextBlock(); FuncSendNextBlock();
FuncSendBlockApp_sendflag = 1; FuncSendBlockApp_sendflag = 1;
block_sended += 1; block_sended += 1;
@ -157,7 +161,7 @@ FuncSendBlockApp = function(){
sendblockstate = 0; sendblockstate = 0;
} }
else { else {
//所有数据发送完成 FuncDisplay("所有App数据发送完成");
return 0; return 0;
} }
@ -188,6 +192,8 @@ FuncBootSeq = function(){
select(bootstate) { select(bootstate) {
case 0 { case 0 {
boottime = 1; boottime = 1;
nextstate(0);
/*
if(sendstate == 0){ if(sendstate == 0){
//FuncSendBlockInit(0); //FuncSendBlockInit(0);
FuncReadDID(0xF186); FuncReadDID(0xF186);
@ -197,15 +203,18 @@ FuncBootSeq = function(){
var ret = FuncWait(0x22); var ret = FuncWait(0x22);
nextstate(ret); nextstate(ret);
} }
*/
} }
case 1 { case 1 {
//nextstate(0);
if(sendstate == 0){ if(sendstate == 0){
FuncDisplay("读取版本");
FuncReadDID(0xF195);//读取软件版本 FuncReadDID(0xF195);//读取软件版本
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x22); var ret = FuncWait(0x22);
nextstate(ret); nextstate(0);
} }
} }
case 2 { case 2 {
@ -215,52 +224,72 @@ FuncBootSeq = function(){
} }
else { else {
var ret = FuncWait(0x22); var ret = FuncWait(0x22);
nextstate(ret); nextstate(0);
} }
} }
case 3 { case 3 {
if(sendstate == 0){ if(sendstate == 0){
FuncReq10(true,0x03);//进入扩展会话 FuncDisplay("进入扩展会话");
FuncReq10(false,0x03);//进入扩展会话
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x10); var ret = FuncWait(0x10);
nextstate(ret); nextstate(0);
} }
} }
case 4 { case 4 {
nextstate(0);
/*
if(sendstate == 0){ if(sendstate == 0){
FuncReq85(0x02);//关闭DTC FuncReq85(0x02);//关闭DTC
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x85); var ret = FuncWait(0x85);
nextstate(ret); nextstate(0);//跳过
} }
*/
} }
case 5 { case 5 {
delaycount++;
if(delaycount > 10){
nextstate(0);
delaycount = 0;
}
/*
if(sendstate == 0){ if(sendstate == 0){
FuncReq28(0x01,0x01);//禁止发送 FuncReq28(0x01,0x01);//禁止发送
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x28); var ret = FuncWait(0x28);
nextstate(ret); nextstate(0);//跳过
} }
*/
} }
case 6 { case 6 {
if(sendstate == 0){ if(sendstate == 0){
FuncDisplay("进入编程会话");
FuncReq10(false,0x02);//进入编程会话 FuncReq10(false,0x02);//进入编程会话
FuncClearState(); FuncClearState();
} }
else { else {
delaycount++;
if(delaycount > 10){
//nextstate(0);
//delaycount = 0;
var ret = FuncWait(0x10); var ret = FuncWait(0x10);
nextstate(ret); nextstate(ret);
} }
}
} }
case 7 { case 7 {
if(sendstate == 0){ if(sendstate == 0){
FuncReq27(0x11);//解密 FuncDisplay("等待解锁");
FuncReq27(0x03);//解密
FuncClearState(); FuncClearState();
} }
else { else {
@ -272,27 +301,31 @@ FuncBootSeq = function(){
if(sendstate == 0){ if(sendstate == 0){
//FuncReq27(02);//发送key //FuncReq27(02);//发送key
FuncClearState(); FuncClearState();
FuncDisplay("等待解锁");
} }
else { else {
//var ret = FuncWait(0x27); //var ret = FuncWait(0x27);
var ret = FuncDiag27GetState(); var ret = FuncDiag27GetState();
nextstate(ret); nextstate(ret);//
} }
} }
case 9 { case 9 {
nextstate(0);
/*
if(sendstate == 0){ if(sendstate == 0){
FuncClearState(); FuncClearState();
FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode
} }
else { else {
var ret = FuncWait(0x2E); //var ret = FuncWait(0x2E);
nextstate(ret); nextstate(0);//
} }
*/
} }
case 10 { case 10 {
nextstate(0);
/*
if(sendstate == 0){//写入installation_date if(sendstate == 0){//写入installation_date
var year1 = BCD_Conv(time.now().year/100); var year1 = BCD_Conv(time.now().year/100);
var year2 = BCD_Conv(time.now().year%100); var year2 = BCD_Conv(time.now().year%100);
@ -303,35 +336,21 @@ FuncBootSeq = function(){
//console.log("写入installation_date") //console.log("写入installation_date")
} }
else { else {
var ret = FuncWait(0x2E); //var ret = FuncWait(0x2E);
nextstate(ret); nextstate(0);
} }
*/
} }
case 11 { case 11 {
if(sendstate == 0){//发送数据 nextstate(0);
FuncSendBlockInit(0);
FuncDisplay("开始发送FlashDrv数据");
FuncClearState();
}
else {
var ret = FuncSendBlockApp();
nextstate(ret);
}
} }
case 12 { case 12 {
if(sendstate == 0){//CheckLogicBlock nextstate(0);
var crc = FuncGetFlashCRC(0);
FuncReq31CheckLogicBlock(crc);
FuncClearState();
}
else {
var ret = FuncWait(0x31);
nextstate(ret);
}
} }
case 13 { case 13 {
if(sendstate == 0){//CheckLogicBlock if(sendstate == 0){//CheckLogicBlock
FuncReq31EraseFlash(0xA000,0x10000); FuncDisplay("擦除APP");
FuncReq31EraseFlash(0x18000,0x20000);
FuncClearState(); FuncClearState();
} }
else { else {
@ -343,7 +362,7 @@ FuncBootSeq = function(){
case 14 { case 14 {
if(sendstate == 0){//发送数据 if(sendstate == 0){//发送数据
FuncSendBlockInit(1); FuncSendBlockInit(1);
FuncDisplay("开始发送App数据"); //FuncDisplay("开始发送App数据");
FuncClearState(); FuncClearState();
} }
else { else {
@ -353,6 +372,7 @@ FuncBootSeq = function(){
} }
case 15 { case 15 {
if(sendstate == 0){//CheckLogicBlock if(sendstate == 0){//CheckLogicBlock
FuncDisplay("CRC校验");
var crc = FuncGetFlashCRC(1); var crc = FuncGetFlashCRC(1);
FuncReq31CheckLogicBlock(crc); FuncReq31CheckLogicBlock(crc);
FuncClearState(); FuncClearState();
@ -364,6 +384,7 @@ FuncBootSeq = function(){
} }
case 16 { case 16 {
if(sendstate == 0){////Programming Dependencies if(sendstate == 0){////Programming Dependencies
FuncDisplay("检查标志");
FuncReq31CheckPD(); FuncReq31CheckPD();
FuncClearState(); FuncClearState();
} }
@ -374,8 +395,9 @@ FuncBootSeq = function(){
} }
case 17 { case 17 {
if(sendstate == 0){//复位 if(sendstate == 0){//复位
FuncDisplay("复位");
FuncClearState(); FuncClearState();
FuncReq11(0x03); FuncReq11(0x01);
} }
else { else {
var ret = FuncWait(0x11); var ret = FuncWait(0x11);
@ -398,16 +420,32 @@ FuncBootSeq = function(){
} }
case 19 { case 19 {
//nextstate(0);
if(sendstate == 0){ if(sendstate == 0){
FuncReq10(true,0x03);//进入扩展会话 FuncReq10(false,0x03);//进入扩展会话
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x10); var ret = FuncWait(0x10);
nextstate(ret); nextstate(ret);
} }
} }
case 20 { case 20 {
if(sendstate == 0){
FuncDisplay("写入刷写信息");
FuncClearState();
FuncDIDWriteStr(0xf198,"DM_Bootloader ");//写入repair_shopcode
}
else {
var ret = FuncWait(0x2E);
nextstate(ret);//
}
//nextstate(0);
/*
if(sendstate == 0){ if(sendstate == 0){
FuncReq28(0x00,0x01);//开启发送 FuncReq28(0x00,0x01);//开启发送
FuncClearState(); FuncClearState();
@ -416,8 +454,24 @@ FuncBootSeq = function(){
var ret = FuncWait(0x28); var ret = FuncWait(0x28);
nextstate(ret); nextstate(ret);
} }
*/
} }
case 21 { case 21 {
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})
FuncClearState();
//console.log("写入installation_date")
}
else {
var ret = FuncWait(0x2E);
nextstate(ret);
}
//nextstate(0);
/*
if(sendstate == 0){ if(sendstate == 0){
FuncReq85(0x01);//开启DTC FuncReq85(0x01);//开启DTC
FuncClearState(); FuncClearState();
@ -426,16 +480,20 @@ FuncBootSeq = function(){
var ret = FuncWait(0x85); var ret = FuncWait(0x85);
nextstate(ret); nextstate(ret);
} }
*/
} }
case 22 { case 22 {
//nextstate(0);
if(sendstate == 0){ if(sendstate == 0){
FuncReq10(true,0x01);//进入默认会话 FuncReq10(true,0x01);//进入默认会话
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x10); var ret = FuncWait(0x10);
nextstate(ret); nextstate(0);
} }
} }
else { else {
thread.command.$SendEnd(true); thread.command.$SendEnd(true);

View File

@ -5,6 +5,8 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){
var seed = {0,0,0,0}; var seed = {0,0,0,0};
var key = {0,0,0,0}; var key = {0,0,0,0};
var cal = {0,0,0,0}; var cal = {0,0,0,0};
var pucKey = {1,2,3,4};
return pucKey; //跳过
seed[1]=pucSeed[4]; seed[1]=pucSeed[4];
seed[2]=pucSeed[3]; seed[2]=pucSeed[3];
seed[3]=pucSeed[2]; seed[3]=pucSeed[2];
@ -73,7 +75,7 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){
else { else {
} }
} }
var pucKey = {0,0,0,0};
pucKey[1]=key[4]; pucKey[1]=key[4];
pucKey[2]=key[3]; pucKey[2]=key[3];
pucKey[3]=key[2]; pucKey[3]=key[2];