在嵌入式应用开发中,应用开发完成后往往需要对芯片中的程序进行加密处理,用以保护程序安全(不至被竞争对手从芯片把程序固件考走),本节将给大学介绍一个如何实现程序自动给芯片加密功能。下面给大家介绍一个STM32 用程序给MCU加密码的方法:
标准库方式:
// 芯片自加密
void FLashProtectCheck(void)
{
FLASH_Unlock(); // 解锁
FLASH_UnlockBank1();
if( RESET == FLASH_GetReadOutProtectionStatus() )
{
while( FLASH_COMPLETE != FLASH_ReadOutProtection(ENABLE) );
// NVIC_SystemReset();
}
FLASH_LockBank1();
FLASH_Lock(); // 上锁
}
HAL 库方式:
// 芯片自加密
void FLashProtectCheck(void)
{
FLASH_OBProgramInitTypeDef OBInit;
HAL_FLASH_Unlock(); // 解锁
HAL_FLASH_OB_Unlock();
HAL_FLASHEx_OBGetConfig( &OBInit );
if( OBInit.RDPLevel != OB_RDP_LEVEL_1 )
{
OBInit.OptionType = OPTIONBYTE_RDP;
OBInit.RDPLevel = OB_RDP_LEVEL_1;
HAL_FLASHEx_OBProgram( &OBInit );
}
HAL_FLASH_OB_Lock();
HAL_FLASH_Lock(); // 上锁
}
上面的程序只开启了FLASH的读保护,这样操作后,用外部的工具,如JLINK,STLINK等工具就无法读取芯片的固件了!!