NVM 영역 데이터 백업기구

이전 NVM 영역이 주로 취급시주의 사항 설명이 문서는 부분 NVM 영역에 언급 된 데이터 백업 방법에 대한 보충 설명합니다.
NVM 영역의 주요 특성은, 비 휘발성 기록 될 영구히 일반적으로 자주 수정 된 데이터를 저장하는 데 사용되는 데이터를 저장할 수 있으며,이 함수는 깜박 유사하다. NVM 영역에 데이터를 기록하는이 세 단계로 나누어 질 수있다 : 첫 번째 단계는, 상기 타겟 섹터의 원래의 데이터가 RAM에 판독되고, 제 2 단계를 상기 타겟 섹터 데이터 NVM 소거, 제 3 단계, 새로운 데이터 및 이 분야에 RAM에서 오래된 데이터를 기록합니다. 기록 동작의 상기 특성에 기초하여 두번째 단계 또는 칩의 전원 공급이 중단 번째 단계의 기록 동작 NVM 영역은, 원래의 데이터를 NVM 영역 발생할 경우에 손실, 알 수있는, 새로운 데이터가 NVM을 나타내는 실패하도록 작성된 지역 데이터 장애 현상. 이것은 단지 작은 확률 이벤트이지만, 제품의 안정성 및 내구성에도 데이터 백업 장치를 추가하는 것을 고려한다하더라도.
데이터 및 데이터 시나리오의 많은 양의 적은 양에 대한 각각의 데이터 백업을위한 두 가지 기본 시나리오가있다. 각각의 업데이트 데이터를 요청 데이터 백업 방식의 현재 소량 섹터 크기 영하 1 미만인 설명 255 바이트까지의 데이터의 최대 양을 업데이트하는 본 실시 형태의 256 바이트의 섹터 크기. (참고 : 칩 NVM 섹터 크기의 종류가 다양, 당신은 Lingke에게 기술적 인 확인을 문의 할 수 있습니다). NVM을 영역, 작업 영역 번호의 각 기록 영역의 마지막 바이트에서 두 영역을 선택한 다음 아이디어 실현하는 것이다. 결정은 사용해야 영역 데이터 업데이트에 서명합니다. 싸이클에서 두 영역, 작업 영역을 조작 할 때 동일한 이유로 반면 백업 역할과 영역 (2) 작용.
상기 제 1 기록 데이터
단계 다음 NVM 어드레스 영역은 0000 ~ 0x00FF 블록 (Block)으로 정의는 0x0200 ~ 0x02FF 블록 2로 정의한다.
블록 1 0000 #DEFINE
#DEFINE 0x0200 블록 2
단계 : 256 바이트 배열 databuf 및 플래그 변수 CNT, CNT 할당 0 정의.
숯 DATABUF 부호 [256]
서명 숯불 CNT = 0;
세 번째 단계 : 대상 데이터 (데이터를 기록 할) databuf 배열에 복사하고, 상기 위치 databuf + 255 카피 CNT + 1.
databuf [255] = CNT + 1 ]
단계 IV : WriteNVM 호출 함수 databuf 블록 (Block)에 데이터를 기록, 256 바이트의 길이를 기록한다. + WriteNVM CNT에서는 보간은, 1 바이트의 길이를 기록하는 기록의 위치에 함수 호출 (255);
WriteNVM (블록 (Block), DATABUF 256)
WriteNVM (블록 2 + 255, CNT는, 1),
데이터 업데이트
단계 : 읽기 기능 ReadNVM 호출 블록 1 블록 2 플래그와 (마지막 바이트)를 복용.
FLAG1 숯불 부호, FLAG2;
ReadNVM (+ 블록 (Block) (255), 및 flag1,1)
ReadNVM (블록 2 + 255, flag2,1)를,
두 번째 단계는, 블록의 두 플래그의 크기를 결정하는 단계는 작은 값 블록 갱신 플래그를 선택 . 타겟 데이터 (데이터를 기록 할) databuf 배열에 복사하고, 비트 플래그는 위치 databuf 255 + 2 부에 첨가 하였다.
(FLAG1> FLAG2) IF
{
; CNT = 2 + FLAG2
DATABUF [255] = CNT]
; WriteNVM (블록 2, DATABUF 256)}
다른 {
CNT FLAG1 = +2]
DATABUF [255] = CNT;
WriteNVM (블록 (Block), DATABUF 256);
}
데이터 읽기
단계 : 데이터와 플래그의 블록 (Block) 블록 2를 읽고.
ReadNVM (+ 블록 (Block) (255), 및 flag1,1)
ReadNVM (블록 2 + 255, flag2,1)
제 2 공정 판정 플래그 비트 크기, 소 블록 이전 데이터 블록 내에서 새로운 데이터 값 중 큰 값.
IF (FLAG1> FLAG2)
{
ReadNVM (블록 (Block), DATABUF 255)
}는 {다른
ReadNVM (블록 2, DATABUF 255)
}

추천

출처blog.51cto.com/13520299/2427963