STM32 Infomation block EEPROM처럼 사용하기
STM32는 AVR과 달리 내부 EEPROM이 없다. 대신 내부 플래시를 EEPROM처럼 쓸 수 있다고 한다.
제작한 보드에 ID를 부여해 인식하려고 하는데.. 데이트시트를 보면 내부 영역중 Information block 이 있다.
이부분은 ST에서 제공하는 플래시 프로그램으로 제어 가능하기 때문에 PC 소프웨어 부담없이 가능할것 같다.
Option Byte 영역을 수정하여 ID를 부여해 보도록 하겠다.
Flash Loder에서 Edit Option Byte를 선택하여 수정할 수 있다.
Option Byte에서 Byte for user data storage 부분을 FF에서 EC로 변경하고 저장한다.
이제 펌웨어에서 이부분을 읽어서 ID를 처리하면 쉽게 해결된다.
STM32 User Data Read 프로그램 실행 결과
변경한 데이터 EC를 플래시 영역에서 확인 할 수 있다.
00: FF5AA5
01: FF13EC
02: FF00FF
03: FF00FF
04: FFFFFFFF
05: FFFFFFFF
06: FFFFFFFF
07: FFFFFFFF
08: FFFFFFFF
09: FFFFFFFF
0A: FFFFFFFF
0B: FFFFFFFF
0C: FFFFFFFF
0D: FFFFFFFF
0E: FFFFFFFF
0F: FFFFFFFF
STM32는 AVR과 달리 내부 EEPROM이 없다. 대신 내부 플래시를 EEPROM처럼 쓸 수 있다고 한다.
제작한 보드에 ID를 부여해 인식하려고 하는데.. 데이트시트를 보면 내부 영역중 Information block 이 있다.
이부분은 ST에서 제공하는 플래시 프로그램으로 제어 가능하기 때문에 PC 소프웨어 부담없이 가능할것 같다.
Option Byte 영역을 수정하여 ID를 부여해 보도록 하겠다.
Flash Loder에서 Edit Option Byte를 선택하여 수정할 수 있다.
Option Byte에서 Byte for user data storage 부분을 FF에서 EC로 변경하고 저장한다.
이제 펌웨어에서 이부분을 읽어서 ID를 처리하면 쉽게 해결된다.
#define StartAddr ((uint32_t)0x1FFFF800)
unsigned long Address = 0x00;
Address = StartAddr;
for(i=0;i<16;i++)
{
DebugPrint("%02X: %X\r\n", i, *(vu32*)Address);
Address += 4;
}
unsigned long Address = 0x00;
Address = StartAddr;
for(i=0;i<16;i++)
{
DebugPrint("%02X: %X\r\n", i, *(vu32*)Address);
Address += 4;
}
STM32 User Data Read 프로그램 실행 결과
변경한 데이터 EC를 플래시 영역에서 확인 할 수 있다.
00: FF5AA5
01: FF13EC
02: FF00FF
03: FF00FF
04: FFFFFFFF
05: FFFFFFFF
06: FFFFFFFF
07: FFFFFFFF
08: FFFFFFFF
09: FFFFFFFF
0A: FFFFFFFF
0B: FFFFFFFF
0C: FFFFFFFF
0D: FFFFFFFF
0E: FFFFFFFF
0F: FFFFFFFF
반응형