Firmware/Nuvoton

FMC data RW 플래쉬 데이터 저장기능

또난 2019. 2. 22. 11:41

 printf("\nFMC Sample Code Completed.[0x%08x] \n", FMC_Read(DATA_FLASH_TEST_BASE));

//FMC_Close();

SYS_LockReg();

    while(1)

{

if(test++>200000)

{

 

SYS_UnlockReg();

//FMC_Open();

FMC_Erase(DATA_FLASH_TEST_BASE);

FMC_Write(DATA_FLASH_TEST_BASE, testcode++);

test = FMC_Read(DATA_FLASH_TEST_BASE);

printf("test %d \r\n", test);

//FMC_Close();

SYS_LockReg();

//if(test == 30)  NVIC_SystemReset();

test = 0;

}

 

}

 

언락레지 => FMC_Open=> 지우고 다시 쓰고 다시 FMC_Close=> 락레지

 

쓰기전에 무조건 지워야 동작됨..

 

한번 FMC_Open 후 FMC_Close 안하면....계속 사용가능한가?

 

================ 029FAE 경우 =================

FMC_EnableAPUpdate / FMC_DisableAPUpdate 을 추가해야 저장됨...확인 필요?

 

int32_t Wirte_Flash_data(int32_t addr, uint32_t data)

{

uint32_t befor_data;

SYS_UnlockReg();

FMC_Open();

befor_data = FMC_Read(addr);

        if(befor_data != data)  {

FMC_EnableAPUpdate();

FMC_Erase(addr);

FMC_Write(addr, data);

d_msg("Wirte_Flash_addr[0x%08x] bf[%d] new[%d]\r\n", addr, befor_data, data);

FMC_DisableAPUpdate();

}

FMC_Close();

SYS_LockReg();

return data;

}

 

 

int32_t Read_Flash_data(int32_t addr)

{

int32_t data = 0, i;

SYS_UnlockReg();

FMC_Open();

data = FMC_Read(addr);

FMC_Close();

SYS_LockReg();

d_msg("Read_Flash_addr[0x%08x] data[%d]\r\n",addr, data);

return data;

}

 

 

 

'Firmware > Nuvoton' 카테고리의 다른 글

GPIO 변수 할당  (0) 2020.01.02
Completed Cross-Module-Optimization (Keil 컴파일) MDK-ARM  (0) 2019.05.07