stm32+i
来自「STM32烧写」· 代码 · 共 1,575 行 · 第 1/4 页
TXT
1,575 行
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);
if(COM_is_Open())
COM_Close();
printf("\n Press any key to continue ...");
getchar();
return 1;
}
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);
if(COM_is_Open())
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);
if(COM_is_Open())
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 - 1)
printf("bad parameter [%s] \n", argv[arg_index]);
if(COM_is_Open())
COM_Close();
printf("\n Press any key to continue ...");
getchar();
return 1;
}
}
}
//============================ Set/Unset R/W protection ==========================
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--;
}
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--;
}
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]);
}
printf("\nenabling write protection %i sectors : ", sectors[0]);
#ifndef _VS6_USED
int i;
#endif
for(i = 1; i<= nsec; i++)
{
printf("<%i>", sectors[i]);
}
printf("\n");
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);
}
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--;
}
}
else
{
if (arg_index < argc - 1)
printf("bad parameter [%s] \n", argv[arg_index]);
if(COM_is_Open())
COM_Close();
printf("\n Press any key to continue ...");
getchar();
return 1;
}
}
}
//============================ Run at address ========================================
else if (strcmp(argv[arg_index],"-r")==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;
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]);
if(COM_is_Open())
COM_Close();
printf("\n Press any key to continue ...");
getchar();
return 1;
}
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]);
if(COM_is_Open())
COM_Close();
printf("\n Press any key to continue ...");
getchar();
return 1;
}
}
}
// commented
/*printf("command executed succesfully, press any key to close the COM port and exit");
getchar();*/
if(COM_is_Open())
COM_Close();
return 0;
}
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE******/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?