📄 stmflashloader.cpp
字号:
{
IMAGEELEMENT Element={0};
if (FILES_GetImageElement(Handle, el, &Element) == FILES_NOERROR)
{
Element.Data=(LPBYTE)malloc(Element.dwDataLength);
if (FILES_GetImageElement(Handle, el, &Element) == FILES_NOERROR)
{
if ((strcmp(Ext, ".BIN")==0) && (el==0))
Element.dwAddress = address;
if (STBL_VERIFY(Element.dwAddress, Element.Data, Element.dwDataLength, false /*Optimize*/) != SUCCESS)
{
VerifySuccess = false;
write_debug_info("verifying" ,el ,Element.dwAddress, (float)Element.dwDataLength/(float)1024, KO);
write_debug_info("some pages may be write protected; use -p --dwp to disable write protection." , 0, 0, 0, KO);
COM_Close(); getchar(); return 0;
}
write_debug_info("verifying" ,el ,Element.dwAddress, (float)Element.dwDataLength/(float)1024, OK);
}
}
}
}
}
else if (strcmp(argv[arg_index],"-v")==0)
{
//printf("verifying \n");
if (arg_index< argc) arg_index++;
else break;
}
else if (strcmp(argv[arg_index],"-o")==0)
{
while(arg_index < argc)
{
if (arg_index< argc-1) arg_index++;
else break;
if(Is_Option(argv[arg_index])) break;
else if(Is_SubOption(argv[arg_index]))
{
if (arg_index< argc) arg_index++;
else break;
if (strcmp(argv[arg_index-1],"--get")==0)
{
if (arg_index< argc) arg_index++;
else break;
if (strcmp(argv[arg_index-1],"--fn")==0)
filename = argv[arg_index];
if(TARGET_GetSIFData(&User, &RDP, &Data0, &Data1, &WRP0, &WRP1, &WRP2, &WRP3) == SUCCESS)
{
write_debug_info("Getting Option bytes data" ,0 ,0, 0, OK);
HANDLE Image;
if (FILES_CreateImage(&Image, 1) == FILES_NOERROR)
{
IMAGEELEMENT Element={0};
Element.dwAddress = 0x1FFFF800;
Element.dwDataLength = 16;
Element.Data = (LPBYTE)malloc(Element.dwDataLength);
{
Element.Data[0] = RDP;
Element.Data[1] = ~RDP;
Element.Data[2] = User;
Element.Data[3] = ~User;
Element.Data[4] = Data0;
Element.Data[5] = ~Data0;
Element.Data[6] = Data1;
Element.Data[7] = ~Data1;
Element.Data[8] = WRP0;
Element.Data[9] = ~WRP0;
Element.Data[10] = WRP1;
Element.Data[11] = ~WRP1;
Element.Data[12] = WRP2;
Element.Data[13] = ~WRP2;
Element.Data[14] = WRP3;
Element.Data[15] = ~WRP3;
}
FILES_SetImageElement(Image,0,TRUE,Element);
if (FILES_ImageToFile((LPSTR)(LPCSTR)filename,Image) != FILES_NOERROR)
{
write_debug_info("Saving Option bytes data",0 ,0, 0, KO);
}
else write_debug_info("Saving Option bytes data",0 ,0, 0, OK);
}
}
else write_debug_info("Getting Option bytes data" ,0 ,0, 0, KO);
}
else if (strcmp(argv[arg_index-1],"--set")==0)
{
if (arg_index< argc) arg_index++;
else break;
if (strcmp(argv[arg_index-1],"--fn")==0)
{
filename = argv[arg_index];
HANDLE OPBImage;
if(!FileExist((LPCTSTR)filename))
{
printf( "file does not exist %s \n", filename);
COM_Close(); getchar(); return 0;
}
if (FILES_ImageFromFile((LPSTR)(LPCSTR)filename, &OPBImage, 0) == FILES_NOERROR)
{
DWORD NbElements = 0;
if (FILES_GetImageNbElement(OPBImage, &NbElements) == FILES_NOERROR)
{
if ( NbElements == 1 )
{
IMAGEELEMENT Element={0};
if (FILES_GetImageElement(OPBImage, 0, &Element) == FILES_NOERROR)
{
Element.Data= (LPBYTE)malloc(Element.dwDataLength);
if (FILES_GetImageElement(OPBImage, 0, &Element) == FILES_NOERROR)
{
RDP = Element.Data[0] ;
User = Element.Data[2] ;
Data0 = Element.Data[4] ;
Data1 = Element.Data[6] ;
WRP0 = Element.Data[8] ;
WRP1 = Element.Data[10];
WRP2 = Element.Data[12];
WRP3 = Element.Data[14];
if (TARGET_SetSIFData(User, RDP, Data0, Data1, WRP0, WRP1, WRP2, WRP3) == SUCCESS)
{
write_debug_info("Setting Option bytes data" ,0 ,0, 0, OK);
COM_Close();
COM_Open();
if(STBL_Init_BL() != SUCCESS) write_debug_info("Resetting device" ,0 ,0, 0, KO);
else write_debug_info("Resetting device" ,0 ,0, 0, OK);
}
else write_debug_info("Setting Option bytes data" ,0 ,0, 0, KO);
}
}
}
}
}
}
else if (strcmp(argv[arg_index-1],"--vals")==0)
{
TARGET_GetSIFData(&User, &RDP, &Data0, &Data1, &WRP0, &WRP1, &WRP2, &WRP3);
while(arg_index< argc)
{
if(Is_Option(argv[arg_index])) break;
else if(Is_SubOption(argv[arg_index]))
{
arg_index++;
if(strcmp(argv[arg_index-1],"--RDP")==0) { RDP = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
else if(strcmp(argv[arg_index-1],"--User")==0) { User = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
else if(strcmp(argv[arg_index-1],"--data0")==0){ Data0 = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
else if(strcmp(argv[arg_index-1],"--data1")==0){ Data1 = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
else if(strcmp(argv[arg_index-1],"--WRP0")==0) { WRP0 = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
else if(strcmp(argv[arg_index-1],"--WRP1")==0) { WRP1 = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
else if(strcmp(argv[arg_index-1],"--WRP2")==0) { WRP2 = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
else if(strcmp(argv[arg_index-1],"--WRP3")==0) { WRP3 = _tcstoul(argv[arg_index], 0, 16);arg_index++;}
}
}
if (TARGET_SetSIFData(User, RDP, Data0, Data1, WRP0, WRP1, WRP2, WRP3) != SUCCESS)
write_debug_info("Setting Option bytes data" ,0 ,0, 0, KO);
else
{
write_debug_info("Setting Option bytes data" ,0 ,0, 0, OK);
COM_Close();
COM_Open();
if(STBL_Init_BL() != SUCCESS) write_debug_info("Resetting device" ,0 ,0, 0, KO);
else write_debug_info("Resetting device" ,0 ,0, 0, OK);
}
arg_index--;
}
}
}
else
{
if (arg_index< argc) if (arg_index < argc - 1) printf("bad parameter [%s] \n", argv[arg_index]);
break;
}
}
}
else if (strcmp(argv[arg_index],"-p")==0)
{
while(arg_index < argc)
{
if (arg_index< argc-1) arg_index++;
else break;
if(Is_Option(argv[arg_index])) break;
else if(Is_SubOption(argv[arg_index]))
{
if (arg_index< argc) arg_index++;
else break;
if (strcmp(argv[arg_index-1],"--erp")==0)
{
if(STBL_READOUT_PROTECT() != SUCCESS) write_debug_info( "enabling read protection", 0 , 0, 0, KO);
else write_debug_info( "enabling read protection", 0 , 0, 0, OK);
_sleep(TimeBO);
if(STBL_Init_BL() != SUCCESS) write_debug_info( "reseting device", 0 , 0, 0, KO);
else write_debug_info( "reseting device", 0 , 0, 0, OK);
arg_index--;
//break;
}
else if (strcmp(argv[arg_index-1],"--drp")==0)
{
if(STBL_READOUT_PERM_UNPROTECT() == SUCCESS)
{
write_debug_info( "disabling read protection", 0 , 0, 0, OK);
_sleep(TimeBO);
if(STBL_Init_BL() != SUCCESS) write_debug_info( "reseting device", 0 , 0, 0, KO);
else write_debug_info( "reseting device", 0 , 0, 0, OK);
}
else write_debug_info( "disabling read protection", 0 , 0, 0, KO);
arg_index--;
//break;
}
else if (strcmp(argv[arg_index-1],"--ewp")==0)
{
LPBYTE sectors;
if(Is_Option(argv[arg_index])) break;
nsec = atoi(argv[arg_index]);
sectors = (LPBYTE)malloc(nsec + 1);
sectors[0] = 0;
for(int i = 1; i<= nsec; i++)
{
sectors[0]++;
arg_index++;
sectors[sectors[0]] = atoi(argv[arg_index]);
}
if(STBL_WRITE_PROTECT(((LPBYTE)sectors)[0],&((LPBYTE)sectors)[1]) != SUCCESS) write_debug_info( "enabling write protection", 0 , 0, 0, KO);
else write_debug_info( "enabling write protection", 0 , 0, 0, OK);
_sleep(TimeBO);
if(STBL_Init_BL() != SUCCESS) write_debug_info( "reseting device", 0 , 0, 0, KO);
else write_debug_info( "reseting device", 0 , 0, 0, OK);
//break;
}
else if (strcmp(argv[arg_index-1],"--dwp")==0)
{
if(STBL_WRITE_PERM_UNPROTECT() != SUCCESS) write_debug_info( "disabling write protection", 0 , 0, 0, KO);
else write_debug_info( "disabling write protection", 0 , 0, 0, OK);
_sleep(TimeBO);
if(STBL_Init_BL() != SUCCESS) write_debug_info( "reseting device", 0 , 0, 0, KO);
else write_debug_info( "reseting device", 0 , 0, 0, OK);
arg_index--;
//break;
}
}
else
{
if (arg_index< argc) if (arg_index < argc - 1) printf("bad parameter [%s] \n", argv[arg_index]);
break;
}
}
}
else if (strcmp(argv[arg_index],"-r")==0)
{
//printf("running \n");
while(arg_index < argc)
{
if (arg_index< argc-1) arg_index++;
else break;
if(Is_Option(argv[arg_index])) break;
else if(Is_SubOption(argv[arg_index]))
{
if (arg_index< argc) arg_index++;
else break;
PMAPPINGSECTOR pSector = pMapping->pSectors;
address = pSector->dwStartAddress;
if (strcmp(argv[arg_index-1],"--a")==0)
{
address = _tcstoul(argv[arg_index], 0, 16) ;
}
}
else
{
if (arg_index < argc - 1) printf("bad parameter [%s] \n", argv[arg_index]);
break;
}
if (STBL_GO(address) == SUCCESS)
{
printf("Your code is running...\n");
}
else
{
printf( "run fails \n");
}
}
}
else
{
if (arg_index < argc - 1) printf("bad parameter [%s] \n", argv[arg_index]);
COM_Close();
getchar();
return 1;
}
}
}
COM_Close();
printf("command executes succesfully, press any key to exit");
getchar();
return 1;
}
/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE******/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -