초보의 아웅다웅 설계하기/STM32

STM32H5 RDP1 Lock

로망와니 2025. 8. 8. 20:01

 

 

 

https://community.st.com/t5/stm32-mcus-security/stm32h503-rdp/td-p/799122

 

STM32H503 RDP

Hello, I am asking for help from the community. My application is completely written, but I can't set read protection. I tried to do all the steps in this guide, but it led to bricking one of my boards. The second board is still in product state = 17? but

community.st.com

 

 

void Set_ProductState_Closed(uint8_t Lock)
{
FLASH_OBProgramInitTypeDef OptionsBytesStruct;//create the OB structure
__HAL_RCC_GET_FLAG(RCC_FLAG_IWDGRST);
__HAL_RCC_CLEAR_RESET_FLAGS();
if(Lock == 1){
HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
OptionsBytesStruct.ProductState = OB_PROD_STATE_IROT_PROVISIONED; // SET THE PRODUCTION STATE
HAL_FLASHEx_OBProgram(&OptionsBytesStruct);
HAL_FLASH_OB_Launch();HAL_FLASH_OB_Lock();HAL_FLASH_Lock();

HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
OptionsBytesStruct.ProductState = OB_PROD_STATE_CLOSED; // SET THE CLOSED STATE
HAL_FLASHEx_OBProgram(&OptionsBytesStruct);
HAL_FLASH_OB_Launch();HAL_FLASH_OB_Lock();HAL_FLASH_Lock();
NVIC_SystemReset(); // reboot for changes to take effect
}
else{
HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
HAL_FLASH_Unlock();
HAL_FLASH_OB_Unlock();
OptionsBytesStruct.ProductState = OB_PROD_STATE_REGRESSION;// full regression
HAL_FLASHEx_OBProgram(&OptionsBytesStruct);
HAL_FLASH_OB_Launch();HAL_FLASH_OB_Lock();HAL_FLASH_Lock();
NVIC_SystemReset();
}
}

 

 

void main(void){

....

 

uint32_t GetOBState =  (FLASH->OPTSR_CUR & FLASH_OPTSR_PRODUCT_STATE);

DEBUGPRINT("OB Stat : %X\r\n", GetOBState);

if(0xED00 == GetOBState){
DEBUGPRINT("RDP\r\n");
Set_ProductState_Closed(1);
}

}

'초보의 아웅다웅 설계하기 > STM32' 카테고리의 다른 글

[STM32]OFFLINE DOWNLOADER PROGRAM  (0) 2025.05.12
[STM32H5]GENERAL TIMER VS ADVANCED TIMER  (0) 2025.02.19
APP 에서 BOOT로  (0) 2025.02.13
[STM32L031]FLASH 라이팅 문제  (0) 2024.12.20
CRC 8-MAXIM, 16-ARC  (0) 2024.11.21