更新boot上位机,删除flashdrv

This commit is contained in:
sunbeam 2025-03-11 17:03:39 +08:00
parent 35b8ec9963
commit f62d27f6f5
7 changed files with 153 additions and 55 deletions

View File

@ -1,5 +1,5 @@
<?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.10" ProductVersion="0.0.0.10" publishDir="/dist/" dstrip="false" local="false" ignored="false">
<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.11" ProductVersion="0.0.0.11" publishDir="/dist/" dstrip="false" local="false" ignored="false">
<file name="main.aardio" path="main.aardio" comment="main.aardio"/>
<folder name="资源文件" path="res" embed="true" local="false" ignored="false"/>
<folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false">

View File

@ -3,30 +3,31 @@ import win.ui;
mainForm = win.form(text="CAN_Bootloader";right=599;bottom=465;border="dialog frame";max=false)
mainForm.add(
btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=4};
btnFlash={cls="button";text="开始刷写";left=37;top=315;right=136;bottom=343;z=9};
btnExport={cls="button";text="转换烧录文件";left=35;top=294;right=134;bottom=323;z=26};
btnFlash={cls="button";text="开始刷写";left=36;top=329;right=135;bottom=357;z=9};
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};
btnOpenFlashdrv={cls="button";text="打开FlashDriver";left=149;top=282;right=248;bottom=310;z=24};
btnReadF180={cls="button";text="读取boot版本";left=37;top=415;right=136;bottom=443;z=19};
btnReadF186={cls="button";text="读取当前会话";left=37;top=349;right=136;bottom=377;z=13};
btnReadF187={cls="button";text="读取型号";left=149;top=415;right=248;bottom=443;z=20};
btnReadF191={cls="button";text="读取编译日期";left=149;top=348;right=248;bottom=376;z=25};
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};
btnOpen={cls="button";text="打开文件";left=184;top=209;right=283;bottom=237;z=8};
btnOpenFlashdrv={cls="button";text="进入BOOT";left=148;top=296;right=247;bottom=324;z=22};
btnReadF180={cls="button";text="读取boot版本";left=36;top=429;right=135;bottom=457;z=19};
btnReadF186={cls="button";text="读取当前会话";left=36;top=363;right=135;bottom=391;z=13};
btnReadF187={cls="button";text="读取型号";left=148;top=429;right=247;bottom=457;z=20};
btnReadF191={cls="button";text="读取编译日期";left=148;top=362;right=247;bottom=390;z=23};
btnReadHw={cls="button";text="读取硬件版本号";left=148;top=395;right=247;bottom=423;z=12};
btnReadSw={cls="button";text="读取软件版本号";left=36;top=396;right=135;bottom=424;z=10};
btnTest={cls="button";text="停止";left=148;top=330;right=247;bottom=358;z=11};
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};
edFile={cls="richedit";left=8;top=131;right=288;bottom=187;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14};
edFile2={cls="richedit";left=8;top=213;right=288;bottom=269;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=22};
edit={cls="edit";left=294;top=19;right=596;bottom=401;autovscroll=false;edge=1;multiline=1;vscroll=1;z=5};
edFile={cls="richedit";left=8;top=131;right=288;bottom=205;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14};
edit={cls="edit";left=294;top=19;right=596;bottom=401;autohscroll=false;autovscroll=false;edge=1;multiline=1;vscroll=1;z=5};
progress={cls="progress";left=296;top=436;right=596;bottom=464;edge=1;max=100;min=0;z=15};
radiobutton={cls="radiobutton";text="左侧";left=45;top=268;right=121;bottom=288;checked=1;group=1;hide=1;z=24};
radiobutton2={cls="radiobutton";text="右侧";left=163;top=268;right=242;bottom=287;hide=1;z=25};
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};
static3={cls="static";text="刷写进度";left=296;top=409;right=349;bottom=429;transparent=1;z=16};
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};
static6={cls="static";text="FlashDriver";left=13;top=195;right=101;bottom=218;transparent=1;z=23}
static5={cls="static";text="V0.2_20250307";left=451;top=1;right=595;bottom=17;align="right";center=1;transparent=1;z=18}
)
/*}}*/
@ -154,8 +155,8 @@ var CanThread = function(){
DiagReadDID = function(did){
::PostThreadMessage(thrdId,110,did,0)//自定义消息
}
var Diag10Req = function(num){
::PostThreadMessage(thrdId,111,num,0)//自定义消息
var Diag10Req = function(phyaddr,num){
::PostThreadMessage(thrdId,111,phyaddr,num)//自定义消息
}
var DiagBootReq = function(){
::PostThreadMessage(thrdId,102,0,0)//自定义消息
@ -186,10 +187,7 @@ mainForm.btnFlash.oncommand = function(id,event){
Display("请打开烧写文件");
return;
}
if(io.exist(mainForm.edFile2.text) == null){
Display("请打开flashdriver文件");
return;
}
if(flag_connected == 0){
Display("请连接设备");
return;
@ -234,7 +232,8 @@ mainForm.btnReadF187.oncommand = function(id,event){
}
mainForm.btnOpenFlashdrv.oncommand = function(id,event){
::PostThreadMessage(thrdId,104,1,0)//自定义消息-打开flashdriver
//::PostThreadMessage(thrdId,104,1,0)//自定义消息-打开flashdriver
Diag10Req(1,0x02);//进入扩展会话
}
@ -251,5 +250,19 @@ mainForm.btnReadF191.oncommand = function(id,event){
DiagReadDID(0xF191);
}
mainForm.radiobutton.oncommand = function(id,event){
::PostThreadMessage(thrdId,121,0x731,0x7b1)//自定义消息-修改ID
}
mainForm.radiobutton2.oncommand = function(id,event){
::PostThreadMessage(thrdId,121,0x732,0x7b2)//自定义消息-修改ID
}
mainForm.btnExport.oncommand = function(id,event){
::PostThreadMessage(thrdId,106,0,0)//自定义消息-修改ID
}
mainForm.show();
//::PostThreadMessage(thrdId,121,0x731,0x7b1)//自定义消息-修改ID
//Display("121111111111112131232111111111111131111111145451112323232323232323");
return win.loopMessage();

View File

@ -41,23 +41,13 @@ FuncLoopMsg = function(msg){
FuncStopBoot();
}
case 104 {//打开s19文件
if(msg.wParam == 1){
FuncDisplay("打开FlashDriver");
var ret = FuncOpenS19File(msg.wParam);
if(ret != null){
thread.command.$ShowFlashDrvPath(ret);
var crc32 = FuncGetFlashCRC(1);
FuncDisplay("CRC = " ++ string.format("%X",crc32));
}
}
else {
FuncDisplay("打开烧写文件");
var ret = FuncOpenS19File(msg.wParam);
if(ret != null){
thread.command.$ShowPath(ret);
var crc32 = FuncGetFlashCRC(2);
FuncDisplay("CRC = " ++ string.format("%X",crc32));
}
FuncDisplay("打开烧写文件");
var ret = FuncOpenS19File(1);
if(ret != null){
thread.command.$ShowPath(ret);
var crc32 = FuncGetFlashCRC(1);
FuncDisplay("CRC = " ++ string.format("%X",crc32));
}
@ -65,6 +55,9 @@ FuncLoopMsg = function(msg){
case 105 {//停止boot
thread.stop(0);
}
case 106 {//导出
exportbootflag();
}
case 110 {//readDID
FuncReadDID(msg.wParam);
}
@ -86,12 +79,23 @@ FuncLoopMsg = function(msg){
case 120 {
win.quitMessage()
}
case 121 {
SetDiagID(msg.wParam,msg.lParam);
}
else {
}
}
}
SetDiagID = function(reqid,respid){
DiagReqID = reqid;//0x18dadff1;
DiagRespID = respid;//0x18daf1df;
var idstr = string.format("req=0x%x,resp=0x%x",DiagReqID,DiagRespID);
FuncDisplay(idstr);
}
var delay_const = 100000;
DelayTest = function(){
@ -161,6 +165,9 @@ FuncDiagPro = function(diagmsg){
case 0x50 {
FuncDiag10Pro(table.slice(diagmsg.data,1,diagmsg.len))
}
case 0x51 {
FuncDiag11Pro(table.slice(diagmsg.data,1,diagmsg.len))
}
case 0x62 {
FuncDiag22Pro(table.slice(diagmsg.data,1,diagmsg.len))
}
@ -223,7 +230,7 @@ var FuncSendPackage = function(){
while(#Packdata > 0)
{
//sleep(1);
delay(0.5);
delay(1);
var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC};
var max = #Packdata > 7 ? 7 : #Packdata;
for(i=1;max;1){
@ -256,6 +263,17 @@ boottimer.onTimer = function(){
FuncBootSeq();
}
var tab2str = function(data){
if(type(data) != type.table){
return "";
}
var str = "";
for(i=1;#data;1){
str = str ++ string.format(" %02X", data[i]);
}
return string.upper(str);
}
timer1 = win.timer(,1);
diagresp = {}
@ -301,7 +319,17 @@ timer1.onTimer = function(){
}
}
else {
//console.varDump(ret[i].id);
if(ret[i].id & 0x7FFFFFFF == 0x234)
{
FuncDisplay("boot复位信息");
FuncDisplay(tab2str(ret[i].data));
}
elseif(ret[i].id & 0x7FFFFFFF == 0x222){
FuncDisplay(tab2str(ret[i].data));
}
//console.varDump(ret[i]);
//console.dumpJson(ret[i]);
//显示报文
}

View File

@ -2,13 +2,14 @@
//发送
FuncReq34 = function(addr,len){
FuncDisplay("请求下载"++ tostring(addr,16) ++ "," ++ tostring(len,16))
var data = {0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
var txdata = {0x10,2+#data,0x34,0x00,data[1],data[2],data[3],data[4]};
CANHw.SendMsg(DiagReqID,txdata);
FuncPushPackage(DiagReqID,table.slice(data,5));
}
var maxlen = 0;
var maxlen = 2050;
//接收
FuncDiag34Pro = function(data){
//console.dumpJson(data);

View File

@ -20,6 +20,7 @@ FuncGetSendStatus = function(){
}
FuncSendNextBlock = function(){
var len = FuncGetSengLen();
//sleep(500);
if(#alldata>len){
FuncReq36(blocknum,table.slice(alldata,1,len));
alldata = table.slice(alldata,len+1,)

View File

@ -94,6 +94,7 @@ FuncSendBlockInit = function(id){
len += math.ceil(#alldata[i]["data"] / FuncGetSengLen())
}
alldata_blocknum = len;
FuncDisplay("alldata_blocknum = " ++ alldata_blocknum);
block_sended = 0;
sendblockstate = 0;
FuncSendBlockApp_sendflag = 0;
@ -120,6 +121,7 @@ FuncSendBlockApp = function(){
}
else {
if(FuncWait(0x34) == 0){
sleep(200);
FuncSendBlockApp_sendflag = 0;
sendblockstate += 1;
}
@ -334,6 +336,7 @@ FuncBootSeq = function(){
}
}
case 10 {
/*
if(sendstate == 0){
FuncReq31EraseFlash(0x1FFFF000,0x1000);
FuncClearState();
@ -343,9 +346,12 @@ FuncBootSeq = function(){
var ret = FuncWait(0x31);
nextstate(ret);
}
*/
nextstate(0);
}
case 11 {
/*
if(sendstate == 0){//写入installation_date
FuncReq3103(0xFD01);
FuncClearState();
@ -354,8 +360,11 @@ FuncBootSeq = function(){
var ret = FuncWait(0x31);
nextstate(ret);
}
*/
nextstate(0);
}
case 12 {
/*
if(sendstate == 0){//发送数据
FuncSendBlockInit(1);
FuncDisplay("开始发送FlashDrv数据");
@ -365,8 +374,11 @@ FuncBootSeq = function(){
var ret = FuncSendBlockApp();
nextstate(ret);
}
*/
nextstate(0);
}
case 13 {
/*
if(sendstate == 0){//CheckLogicBlock
//var crc = FuncGetFlashCRC(0);
//FuncReq31CheckLogicBlock(crc);
@ -377,18 +389,11 @@ FuncBootSeq = function(){
var ret = FuncWait(0x31);
nextstate(ret);
}
*/
nextstate(0);
}
case 14 {
if(sendstate == 0){//
FuncReq3103(0xFD02);
FuncClearState();
}
else {
var ret = FuncWait(0x31);
nextstate(ret);
}
}
case 15 {
if(sendstate == 0){//CheckLogicBlock
FuncReq31EraseFlash(0x00010000,0x70000);
FuncClearState();
@ -398,10 +403,32 @@ FuncBootSeq = function(){
nextstate(ret);
}
}
case 15 {
/*
if(sendstate == 0){//
FuncReq3103(0xFD02);
FuncClearState();
}
else {
var ret = FuncWait(0x31);
nextstate(ret);
}
*/
if(sendstate == 0){//等待复位完成
delaycount = 0;
FuncClearState();
}
else {
delaycount += 1;
if(delaycount > 20){
nextstate(0);//延时0.1S
}
}
}
case 16 {
if(sendstate == 0){//发送数据
FuncSendBlockInit(2);
FuncSendBlockInit(1);
FuncDisplay("开始发送App数据");
FuncClearState();
}

View File

@ -36,6 +36,8 @@ var Crc32Tble =
var fileinfo = "";
var FlashData = {};
var AllData = {}
var BootData = {};
var S19path = null;
FuncGetAllData = function(id){
if(id > #AllData){
return null;
@ -76,6 +78,7 @@ FuncOpenS19File = function(id,path){
if(io.exist( path )){
//winform.editPath.text = path;
S19path = path;
var readbuf = string.load(path);
readbuf = string.split(readbuf,'\r\n');
@ -180,6 +183,11 @@ FuncOpenS19File = function(id,path){
s19crc.data[0x7FF] = crc32temp>>16;
s19crc.data[0x7FE] = crc32temp>>8;
s19crc.data[0x7FD] = crc32temp&0XFF;
for(i=1;8;1){
BootData[i] = s19crc.data[0x7F8 + i];
}
}
if(block != null){
table.push(FlashData,block)
@ -196,6 +204,26 @@ FuncOpenS19File = function(id,path){
return path;
}
exportbootflag = function(){
if(io.exist( S19path )){
var newpath = S19path++".fix";
fsys.copy(S19path,newpath,,,);
var str = "S20C07FFF8"
var checksum=0x0C+0x07+0xff+0xf8;
for(i=1;8;1){
var num = BootData[i] & 0xff
var tempstr = string.format("%02X",num);
//console.log(tempstr);
str = str++tempstr;
checksum+=BootData[i];
}
checksum = 0xff - (checksum&0xff);
str = str++string.format("%02X",checksum);;
FuncDisplay(str);
string.save(newpath,str,true);
FuncDisplay("转换完成:"++newpath);
}
}