본문 바로가기
임베디드.일렉트로닉스/EFM8

EFM8, C8051F계열 플래시 데이터 기록/읽기.

by i.got.it 2016. 3. 12.
 

개요

 
SIlabs 의 EFM8, C8051F 시리즈 펌웨어에서 플래시 메모리에 데이터 기록, 읽기 방법.

아래 관련 기본재료 중에서는 포럼글의 3번의 구현이 가장 간단함.


기본 재료.
SiLabs 제공 Application Notes.


Flash Securities User's GuideAN120

Writing to Flash from Firmware

AN201 AN201SW
EEPROM Emulation for Flash MicrocontrollersAN568 AN568SW
EEPROM Emulation with Wear-Leveling for 8-Bit Flash MCUs​AN798AN798SW


 


 

 

최종 정리된 코드.

 
- 상기 지저분한 재료대비 깔끔하게 정리된 코드.
- 지우기 수행한 이후에 쓰기 해야 정상적인 기록가능함.
- EFM8UB10F16G 에서 정상작동확인되었음.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
volatile uint8_t code FLASH_8[8] _at_ 0xF800; // flash 영역에 메모리 할당하는것.
 
//-----------------------------------------------------------------------------
// main() Routine
// ----------------------------------------------------------------------------
int main(void) {
 
    uint8_t i = 0;
 
    RSTSRC=RSTSRC_PORSF__BMASK;  // enable VDD monitor as a reset source (dont trust Simplicty Generator)
 
    // test
    FLASH_WriteErase (0xF800,0,0x03); // 지우기. 
 
    FLASH_WriteErase (0xF800,0x41,0x01); // 쓰기.
    FLASH_WriteErase (0xF801,0x42,0x01); // 쓰기.
    FLASH_WriteErase (0xF802,0x43,0x01); // 쓰기.
    FLASH_WriteErase (0xF803,0x44,0x01); // 쓰기.
 
}
 
// Arguments : uint16_t address - 16-bit address in code space to write/erase
//             uint8_t byte - data byte to write (value is don't care on erase)
//             uint8_t write_erase - 0x01 for writes, 0x03 to erase page
void FLASH_WriteErase (uint16_t address, uint8_t byte, uint8_t write_erase)
{
 
  // check address bounds
  if((address >= 0xF800) && (address < 0xFFC0)) // 0xFFC0 부터 16개는 칩아이디 자리임.0xF8000 부터 사용가능하게 한것.
  {
    bit EA_SAVE = IE_EA;                // preserve EA
    uint8_t xdata *pwrite = (uint8_t xdata *) address;
 
    IE_EA = 0;
    FLKEY = 0xa5;
    FLKEY = 0xf1;
 
    PSCTL |= write_erase & (PSCTL_PSEE__BMASK|PSCTL_PSWE__BMASK);
 
    *pwrite = byte;
 
    PSCTL &= ~(PSCTL_PSEE__BMASK|PSCTL_PSWE__BMASK);
 
    IE_EA = EA_SAVE;                     // restore interrupts
  }
}
 

 
 


 


///708.


'임베디드.일렉트로닉스 > EFM8' 카테고리의 다른 글

EFM8 UB1 시리즈 개요.  (0) 2019.09.03
EFM8 UB1 Flash Memory  (0) 2016.06.09
EFM8 부트로더.  (0) 2015.11.29
EFM8 UB1 스타터 키트. - SLSTK2000A  (0) 2015.11.28
EFM8 소프트웨어 리셋 시키는법.  (0) 2015.11.05

댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5