更新
This commit is contained in:
parent
93ac81b835
commit
1328be60b7
@ -15,5 +15,9 @@
|
|||||||
<file name="securety.aardio" path="user\securety.aardio" comment="user\securety.aardio"/>
|
<file name="securety.aardio" path="user\securety.aardio" comment="user\securety.aardio"/>
|
||||||
<file name="Diag2Ecode.aardio" path="user\Diag2Ecode.aardio" comment="user\Diag2Ecode.aardio"/>
|
<file name="Diag2Ecode.aardio" path="user\Diag2Ecode.aardio" comment="user\Diag2Ecode.aardio"/>
|
||||||
<file name="Diag31code.aardio" path="user\Diag31code.aardio" comment="user\Diag31code.aardio"/>
|
<file name="Diag31code.aardio" path="user\Diag31code.aardio" comment="user\Diag31code.aardio"/>
|
||||||
|
<file name="Diag34code.aardio" path="user\Diag34code.aardio" comment="user\Diag34code.aardio"/>
|
||||||
|
<file name="Diag36code.aardio" path="user\Diag36code.aardio" comment="user\Diag36code.aardio"/>
|
||||||
|
<file name="S19Decode.aardio" path="user\S19Decode.aardio" comment="user\S19Decode.aardio"/>
|
||||||
|
<file name="Diag37code.aardio" path="user\Diag37code.aardio" comment="user\Diag37code.aardio"/>
|
||||||
</folder>
|
</folder>
|
||||||
</project>
|
</project>
|
||||||
|
26
main.aardio
26
main.aardio
@ -3,16 +3,16 @@ import win.ui;
|
|||||||
mainForm = win.form(text="CAN_Bootloader";right=599;bottom=399;border="dialog frame";max=false)
|
mainForm = win.form(text="CAN_Bootloader";right=599;bottom=399;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};
|
||||||
btnFlash={cls="button";text="开始刷写";left=152;top=180;right=272;bottom=205;z=10};
|
btnFlash={cls="button";text="开始刷写";left=152;top=180;right=272;bottom=205;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=31;top=180;right=131;bottom=206;z=9};
|
btnOpen={cls="button";text="打开文件";left=31;top=180;right=131;bottom=206;z=8};
|
||||||
btnReadF186={cls="button";text="读取当前会话";left=19;top=293;right=118;bottom=321;z=14};
|
btnReadF186={cls="button";text="读取当前会话";left=19;top=293;right=118;bottom=321;z=13};
|
||||||
btnReadHw={cls="button";text="读取硬件版本号";left=17;top=263;right=116;bottom=291;z=13};
|
btnReadHw={cls="button";text="读取硬件版本号";left=17;top=263;right=116;bottom=291;z=12};
|
||||||
btnReadSw={cls="button";text="读取软件版本号";left=17;top=233;right=116;bottom=261;z=11};
|
btnReadSw={cls="button";text="读取软件版本号";left=17;top=233;right=116;bottom=261;z=10};
|
||||||
btnTest={cls="button";text="测试";left=173;top=355;right=272;bottom=383;z=12};
|
btnTest={cls="button";text="测试";left=173;top=355;right=272;bottom=383;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};
|
||||||
edFile={cls="edit";left=27;top=141;right=281;bottom=165;edge=1;readonly=1;z=8};
|
edFile={cls="richedit";left=8;top=114;right=288;bottom=170;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14};
|
||||||
edit={cls="edit";left=296;top=8;right=582;bottom=383;edge=1;multiline=1;z=5};
|
edit={cls="edit";left=296;top=8;right=582;bottom=383;edge=1;multiline=1;z=5};
|
||||||
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}
|
||||||
@ -22,12 +22,10 @@ static2={cls="static";text="通道";left=1;top=66;right=61;bottom=90;align="cent
|
|||||||
import win;
|
import win;
|
||||||
import usb2canfd;
|
import usb2canfd;
|
||||||
|
|
||||||
|
|
||||||
Display = function(str){
|
Display = function(str){
|
||||||
mainForm.edit.print(tostring(time()) + " " + str);
|
mainForm.edit.print(tostring(time()) + " " + str);
|
||||||
}
|
}
|
||||||
|
mainForm.edFile.wrap = true;
|
||||||
|
|
||||||
|
|
||||||
CANHw = usb2canfd.USB2CANHW();
|
CANHw = usb2canfd.USB2CANHW();
|
||||||
var ret = CANHw.LoadDll();
|
var ret = CANHw.LoadDll();
|
||||||
@ -77,7 +75,9 @@ var listener = thread.command();
|
|||||||
listener.$Display = function(str){
|
listener.$Display = function(str){
|
||||||
Display(str);
|
Display(str);
|
||||||
}
|
}
|
||||||
|
listener.$ShowPath = function(str){
|
||||||
|
mainForm.edFile.text = str;
|
||||||
|
}
|
||||||
//线程函数
|
//线程函数
|
||||||
var CanThread = function(){
|
var CanThread = function(){
|
||||||
|
|
||||||
@ -123,6 +123,10 @@ mainForm.btnFlash.oncommand = function(id,event){
|
|||||||
DiagBootReq();
|
DiagBootReq();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mainForm.btnOpen.oncommand = function(id,event){
|
||||||
|
::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开文件
|
||||||
|
}
|
||||||
|
|
||||||
thrdHandle,thrdId = thread.create( CanThread )
|
thrdHandle,thrdId = thread.create( CanThread )
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,15 +17,22 @@ FuncLoopMsg = function(msg){
|
|||||||
case 100 {//刷新硬件
|
case 100 {//刷新硬件
|
||||||
FuncFreshHw();
|
FuncFreshHw();
|
||||||
}
|
}
|
||||||
case 101 {
|
case 101 {//连接硬件
|
||||||
FuncConnect(msg.wParam,msg.lParam);
|
FuncConnect(msg.wParam,msg.lParam);
|
||||||
}
|
}
|
||||||
case 102 {
|
case 102 {//开始boot
|
||||||
FuncStartBoot();
|
FuncStartBoot();
|
||||||
}
|
}
|
||||||
case 103 {
|
case 103 {//停止boot
|
||||||
FuncStopBoot();
|
FuncStopBoot();
|
||||||
}
|
}
|
||||||
|
case 104 {//打开s19文件
|
||||||
|
FuncDisplay("打开文件");
|
||||||
|
var ret = FuncOpenS19File();
|
||||||
|
if(ret != null){
|
||||||
|
thread.command.$ShowPath(ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
case 110 {//readDID
|
case 110 {//readDID
|
||||||
FuncReadDID(msg.wParam);
|
FuncReadDID(msg.wParam);
|
||||||
}
|
}
|
||||||
@ -84,6 +91,7 @@ loadcodex("\user\Diag27code.aardio");
|
|||||||
loadcodex("\user\Diag2Ecode.aardio");
|
loadcodex("\user\Diag2Ecode.aardio");
|
||||||
loadcodex("\user\DiagBootcode.aardio");
|
loadcodex("\user\DiagBootcode.aardio");
|
||||||
|
|
||||||
|
loadcodex("\user\S19Decode.aardio");
|
||||||
RespState = 0;
|
RespState = 0;
|
||||||
|
|
||||||
FuncDiagPro = function(diagmsg){
|
FuncDiagPro = function(diagmsg){
|
||||||
|
@ -1,14 +1,29 @@
|
|||||||
|
|
||||||
|
FuncReq31EraseFlash = function(addr,len){
|
||||||
|
var data = {0xff,0x00,0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
|
||||||
|
FuncReq31(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//发送
|
//发送
|
||||||
FuncReq31 = function(data){
|
FuncReq31 = function(data){
|
||||||
if(#data > 6){//多帧
|
if(#data > 5){//多帧
|
||||||
|
var txdata = {0x10,2+#data,0x31,0x01,data[1],data[2],data[3],data[4]};
|
||||||
|
CANHw.SendMsg(DiagReqID,txdata);
|
||||||
|
FuncPushPackage(DiagReqID,table.slice(data,5));
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
var txdata = {2+#data,0x31,0x01,0, 0,0,0,0};
|
||||||
|
for(i=1;#data;1){
|
||||||
|
txdata[5+i] = data[i];
|
||||||
|
}
|
||||||
|
CANHw.SendMsg(DiagReqID,txdata);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//接收
|
//接收
|
||||||
FuncDiag28Pro = function(data){
|
FuncDiag31Pro = function(data){
|
||||||
//console.dumpJson(data);
|
//console.dumpJson(data);
|
||||||
select(data[1]) {
|
select(data[1]) {
|
||||||
case 1 {
|
case 1 {
|
||||||
|
25
user/Diag34code.aardio
Normal file
25
user/Diag34code.aardio
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
//发送
|
||||||
|
FuncReq34 = function(addr,len){
|
||||||
|
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));
|
||||||
|
|
||||||
|
}
|
||||||
|
//接收
|
||||||
|
FuncDiag34Pro = function(data){
|
||||||
|
//console.dumpJson(data);
|
||||||
|
select(data[1]) {
|
||||||
|
case 1 {
|
||||||
|
FuncDisplay("使能接收,禁能发送")
|
||||||
|
}
|
||||||
|
case 2 {
|
||||||
|
FuncDisplay("28 - TDB02")
|
||||||
|
}
|
||||||
|
case 3 {
|
||||||
|
FuncDisplay("28 - TDB03")
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
64
user/Diag36code.aardio
Normal file
64
user/Diag36code.aardio
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
//
|
||||||
|
var blocknum=1;
|
||||||
|
var flag_sendend = false;
|
||||||
|
var flag_sending = false;
|
||||||
|
var alldata = {};
|
||||||
|
FuncStartSendBlock = function(data){
|
||||||
|
blocknum = 0x01;
|
||||||
|
flag_sendend = false;
|
||||||
|
flag_sending = true;
|
||||||
|
alldata = data;
|
||||||
|
/*
|
||||||
|
if(alldata>0x400){
|
||||||
|
FuncReq36(blocknum,table.slice(alldata,1,0x400));
|
||||||
|
alldata = table.slice(alldata,0x401,)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
FuncReq36(blocknum,alldata);
|
||||||
|
alldata = {};
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
FuncStopSendBlock = function(data){
|
||||||
|
blocknum = 0x01;
|
||||||
|
flag_sendend = false;
|
||||||
|
flag_sending = false;
|
||||||
|
}
|
||||||
|
FuncGetSendStatus = function(){
|
||||||
|
return flag_sendend;
|
||||||
|
}
|
||||||
|
FuncSendNextBlock = function(){
|
||||||
|
if(alldata>0x400){
|
||||||
|
FuncReq36(blocknum,table.slice(alldata,1,0x400));
|
||||||
|
alldata = table.slice(alldata,0x401,)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
FuncReq36(blocknum,alldata);
|
||||||
|
alldata = {};
|
||||||
|
flag_sendend = true;
|
||||||
|
}
|
||||||
|
blocknum += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//发送
|
||||||
|
FuncReq36 = function(num,data){
|
||||||
|
len = #data+2;
|
||||||
|
var txdata = {0x10+(len>>8),len&0xff,0x36,num&0xff,data[1],data[2],data[3],data[4]};
|
||||||
|
CANHw.SendMsg(DiagReqID,txdata);
|
||||||
|
FuncPushPackage(DiagReqID,table.slice(data,5));
|
||||||
|
|
||||||
|
}
|
||||||
|
//接收
|
||||||
|
FuncDiag36Pro = function(data){
|
||||||
|
//console.dumpJson(data);
|
||||||
|
/*
|
||||||
|
if(data[1] == blocknum){
|
||||||
|
blocknum += 1;
|
||||||
|
if(flag_sending == true){
|
||||||
|
FuncSendNextBlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
9
user/Diag37code.aardio
Normal file
9
user/Diag37code.aardio
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
//发送
|
||||||
|
FuncReq37 = function(){
|
||||||
|
var txdata = {0x1,0x37,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA};
|
||||||
|
CANHw.SendMsg(DiagReqID,txdata);
|
||||||
|
}
|
||||||
|
//接收
|
||||||
|
FuncDiag37Pro = function(data){
|
||||||
|
|
||||||
|
}
|
@ -5,13 +5,13 @@ var bootcount = 0;
|
|||||||
var sendstate = 0;
|
var sendstate = 0;
|
||||||
FuncWait = function(sid){
|
FuncWait = function(sid){
|
||||||
if(RespState == (sid + 0x40)){//正响应
|
if(RespState == (sid + 0x40)){//正响应
|
||||||
|
//bootcount = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
errsid,errnrc = FuncGetNrc();
|
errsid,errnrc = FuncGetNrc();
|
||||||
FuncClrNrc();
|
FuncClrNrc();
|
||||||
if(errsid == sid){
|
if(errsid == sid){
|
||||||
if(errnrc == 0x78){//等待
|
if(errnrc == 0x78){//等待
|
||||||
|
|
||||||
bootcount = 0;
|
bootcount = 0;
|
||||||
return 0xff;
|
return 0xff;
|
||||||
}
|
}
|
||||||
@ -65,7 +65,88 @@ BCD_Conv = function(num){
|
|||||||
return (num/10)*16 + (num%10);
|
return (num/10)*16 + (num%10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var sendblockstate = 0;
|
||||||
|
var alldata = {};
|
||||||
|
var blocknum = 1;
|
||||||
|
FuncSendBlockInit = function(){
|
||||||
|
alldata = FuncGetAllData();
|
||||||
|
blocknum = 1;
|
||||||
|
if(alldata != null){
|
||||||
|
blocknum = 1;
|
||||||
|
FuncStartSendBlock(alldata[blocknum].["data"])
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
var FuncSendBlockApp_sendflag = 0
|
||||||
|
FuncSendBlockApp = function(){
|
||||||
|
select(sendblockstate) {
|
||||||
|
case 0{
|
||||||
|
if(FuncSendBlockApp_sendflag == 0){
|
||||||
|
FuncReq34(alldata[blocknum].["address"],#alldata[blocknum].["data"]);
|
||||||
|
FuncSendBlockApp_sendflag = 1;
|
||||||
|
RespState = 0;
|
||||||
|
bootcount = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(FuncWait(0x34) == 0){
|
||||||
|
FuncSendBlockApp_sendflag = 0;
|
||||||
|
sendblockstate += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
case 1 {
|
||||||
|
FuncStartSendBlock(alldata[blocknum].["data"]);//初始化
|
||||||
|
FuncSendBlockApp_sendflag = 0;
|
||||||
|
sendblockstate += 1;
|
||||||
|
}
|
||||||
|
case 2 {
|
||||||
|
if(FuncSendBlockApp_sendflag == 0){
|
||||||
|
FuncSendNextBlock();
|
||||||
|
FuncSendBlockApp_sendflag = 1;
|
||||||
|
RespState = 0;
|
||||||
|
bootcount = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(FuncWait(0x36) == 0){
|
||||||
|
FuncSendBlockApp_sendflag = 0;
|
||||||
|
if(FuncGetSendStatus() == true){//所有块发送完成
|
||||||
|
sendblockstate += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 3 {
|
||||||
|
if(FuncSendBlockApp_sendflag == 0){
|
||||||
|
FuncReq37();
|
||||||
|
FuncSendBlockApp_sendflag = 1;
|
||||||
|
RespState = 0;
|
||||||
|
bootcount = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(FuncWait(0x37) == 0){
|
||||||
|
FuncSendBlockApp_sendflag = 0;
|
||||||
|
sendblockstate += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(blocknum < #alldata){
|
||||||
|
blocknum += 1;
|
||||||
|
sendblockstate = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//所有数据发送完成
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//boot总流程
|
||||||
FuncBootSeq = function(){
|
FuncBootSeq = function(){
|
||||||
select(bootstate) {
|
select(bootstate) {
|
||||||
case 0 {
|
case 0 {
|
||||||
@ -161,7 +242,7 @@ FuncBootSeq = function(){
|
|||||||
}
|
}
|
||||||
case 9 {
|
case 9 {
|
||||||
if(sendstate == 0){
|
if(sendstate == 0){
|
||||||
FuncDIDWriteStr(0xf198,"0123456789abcdef1234");
|
FuncDIDWriteStr(0xf198,"0123456789abcdef1234");//写入repair_shopcode
|
||||||
FuncClearState();
|
FuncClearState();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -171,7 +252,7 @@ FuncBootSeq = function(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
case 10 {
|
case 10 {
|
||||||
if(sendstate == 0){
|
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);
|
||||||
var month = BCD_Conv(time.now().month);
|
var month = BCD_Conv(time.now().month);
|
||||||
@ -185,6 +266,39 @@ FuncBootSeq = function(){
|
|||||||
nextstate(ret);
|
nextstate(ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case 11 {
|
||||||
|
if(sendstate == 0){//擦除flash
|
||||||
|
FuncReq31EraseFlash(0x00FE0000,0x00019FE0);//
|
||||||
|
FuncClearState();
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var ret = FuncWait(0x31);
|
||||||
|
nextstate(ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 12 {
|
||||||
|
if(sendstate == 0){//发送数据
|
||||||
|
FuncSendBlockInit();
|
||||||
|
FuncClearState();
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var ret = FuncSendBlockApp();
|
||||||
|
nextstate(ret);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 13 {
|
||||||
|
if(sendstate == 0){//发送数据
|
||||||
|
FuncSendBlockInit();
|
||||||
|
FuncClearState();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var ret = FuncSendBlockApp();
|
||||||
|
nextstate(ret);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else {
|
else {
|
||||||
FuncDisplay("刷写完成")
|
FuncDisplay("刷写完成")
|
||||||
|
122
user/S19Decode.aardio
Normal file
122
user/S19Decode.aardio
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
|
||||||
|
var fileinfo = "";
|
||||||
|
var FlashData = {};
|
||||||
|
|
||||||
|
FuncGetAllData = function(){
|
||||||
|
return FlashData;
|
||||||
|
}
|
||||||
|
FuncGetFileInfo = function(){
|
||||||
|
return fileinfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
FuncOpenS19File = function(path){
|
||||||
|
import fsys.dlg;
|
||||||
|
if(path == null){
|
||||||
|
path = fsys.dlg.open('S19文件|*.sx;*.s19;*.srec|所有文件|*.*||',,,winform);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(io.exist( path )){
|
||||||
|
//winform.editPath.text = path;
|
||||||
|
var readbuf = string.load(path);
|
||||||
|
|
||||||
|
readbuf = string.split(readbuf,'\r\n');
|
||||||
|
//console.dumpJson(readbuf);
|
||||||
|
var block = null;
|
||||||
|
FlashData = {};
|
||||||
|
for(i=1;#readbuf;1){
|
||||||
|
if(#readbuf[i] == 0){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var str = readbuf[i];
|
||||||
|
var data = "";
|
||||||
|
var addr = 0;
|
||||||
|
var len = 0;
|
||||||
|
select(string.slice(str,1,2)) {
|
||||||
|
case "S0"{
|
||||||
|
//S0为文件信息
|
||||||
|
var fileinfobuf = string.slice(str,9,-3);//取出文件信息
|
||||||
|
fileinfo = "file info:"+string.unhex(fileinfobuf,"")//解码
|
||||||
|
fileinfo = string.replace(fileinfo,"\z"," ");//替换空字符
|
||||||
|
FuncDisplay(fileinfo)//显示
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
case "S1"{
|
||||||
|
len = tonumber(string.slice(str,3,4),16)
|
||||||
|
addr = tonumber(string.slice(str,5,8),16)
|
||||||
|
data = string.slice(str,9,-3)
|
||||||
|
}
|
||||||
|
case "S2"{
|
||||||
|
len = tonumber(string.slice(str,3,4),16)
|
||||||
|
addr = tonumber(string.slice(str,5,10),16)
|
||||||
|
data = string.slice(str,11,-3)
|
||||||
|
|
||||||
|
}
|
||||||
|
case "S3"{
|
||||||
|
len = tonumber(string.slice(str,3,4),16)
|
||||||
|
addr = tonumber(string.slice(str,5,12),16)
|
||||||
|
data = string.slice(str,13,-3)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(block == null){
|
||||||
|
//空表,第一次进入
|
||||||
|
block = {};
|
||||||
|
block["address"] = addr;
|
||||||
|
block["data"] = {};
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//非空表
|
||||||
|
if(addr == (block["address"]+#block["data"])){
|
||||||
|
//连续,无动作
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//不同块,新建块
|
||||||
|
FlashData[#FlashData+1]={"address" = block["address"];"data" = block["data"];}
|
||||||
|
block["address"] = addr;
|
||||||
|
block["data"] = {};
|
||||||
|
//不连续,判断是否填充
|
||||||
|
/*不填充,所以注释了
|
||||||
|
if((addr & 0xfff800) == ((block["address"]+#block["data"])&0xfff800)){
|
||||||
|
//同一个块,填充FF
|
||||||
|
for(i=1;addr - (block["address"]+#block["data"]);1){
|
||||||
|
table.push(block["data"],0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
FlashData[#FlashData+1]={"address" = block["address"];"data" = block["data"];}
|
||||||
|
block["address"] = addr;
|
||||||
|
block["data"] = {};
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
data = string.unhex(data,"")
|
||||||
|
for(i=1;#data;1){
|
||||||
|
var bytedata = string.unpack(data,i)
|
||||||
|
table.push(block["data"],bytedata)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(block != null){
|
||||||
|
table.push(FlashData,block)
|
||||||
|
//console.dumpTable(block["data"]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
//blocknum = 1;
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user