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
LoadDll = function(){
try{
DllHandle = ..raw.loadDll("USB2XXX.dll")
DllHandle = ..raw.loadDll("\USB2XXX.dll")
}
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};
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();

View File

@ -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;

View File

@ -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("校验成功")
}

View File

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

View File

@ -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();

View File

@ -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;