문제

에 포함된 환경(를 사용하여 MSP430),나는 몇몇 데이터 손상에 의해 발생하는 부분에 쓰는 비휘발성 메모리입니다.이 될 것으로 보인에 의한 전력 손실을 쓰는 동안(하나 FRAM 또는 정보 세그먼트).

내가 데이터 유효성 검사에 저장이 위치 CRC.

나의 질문은 무엇이 올바른 방법으로 이를 방지하기 위해"부분적인 쓰기"손상?지금,나는 수정 나의 코드를 작성하는 두 가지 별도의 FRAM 위치.경우에 따라서,하나의 기록은 중단을 일으키는 잘못된 CRC,다른 위치를 유지해야 유효합니다.이것은 일반적인 관행?이 필요한가요 이를 구현하려면 두 번 쓰기 동작을 위한 모든 비 휘발성 메모리?

도움이 되었습니까?

해결책

간단한 솔루션을 유지하는 것입 두 개의 전 버전의 데이터(별도의 페이지를 위해 플래시 메모리),현재 버전과 이전 버전입니다.각 버전은 헤더를 포함하는 시퀀스의 숫자와 단어인지 검증하는 순서 번호를 단순히 제 1 의 보완을 시퀀스의 번호를 예를 들어:

---------
|  seq  |
---------
| ~seq  |
---------
|       |
| data  |
|       |
---------

중요한 것은 데이터 기록 seq~seq 의 단어가 기록 마지막.

에 시작할 읽기 는 데이터는 가장 높은 유효한 순서 번호(회계를 감싸는 아마도 특히 짧은 시퀀스어).를 작성할 때,당신은 그것을 덮어쓰고 검증 니다.

이 솔루션은 이미 사용하고 유효한 한 CRC 이 쓴 마지막으로,하지만 그것이 부족하는 단순하고 부과하 CRC 계산 오버헤드는 필요하지 않을 수도 있는 것이 바람직하다.

에 FRAM 당신이 우려에 대한 내구성,하지만 이 문제를 위해 플래시 메모리고 EEPROM.이 경우에는 사용 다시 쓰기 캐시방법,데이터가 유지 RAM,수정하면 타이머 동작하기 이미 실행 중인 경우-타이머가 만료되면 데이터를 쓰이지 않고 이 버스 쓰기에서 탈곡 메모리고,유용한지에 FRAM 때문에 그것을 최소화 소프트웨어의 오버헤드 데이터를 기록합니다.

다른 팁

우리의 엔지니어링 팀은 이러한 문제에 대한 두 가지 프롱 접근 방식을 취합니다. 하드웨어 및 소프트웨어로 해결하십시오!

첫 번째는 브라운 아웃시 몇 밀리 초의 전력을 제공하는 다이오드 및 커패시터 배열입니다. 우리가 외부 전력을 잃어 버렸을 때, 우리는 비 침해 된 쓰기가없는 코드가 들어 가지 않도록합니다.

두 번째로 우리의 데이터는 특히 작동에 중요합니다. 종종 업데이트되며 우리는 비 침해하는 플래시 스토리지 (많은 쓰기 만 지원합니다.) 우리는 실제로 데이터를 실제로 16 번 플래시에 저장합니다. 각 레코드를 CRC 코드로 보호하십시오. 부팅시 최신 유효한 쓰기를 찾은 다음 지우기 / 쓰기 사이클을 시작합니다.

우리는 솔직한 편집기 시스템을 구현하기 때문에 데이터 손상을 보지 못했습니다.

업데이트 :

Flash는 CPU의 외부에 있으므로 CRC는 CPU와 플래시 칩 사이에 통신 글리치가있는 경우 데이터의 유효성을 검사하는 데 도움이됩니다. 또한, 우리가 연속적으로 여러 개의 결함을 경험하면 여러 개의 쓰기가 데이터 손실을 방지합니다.

Clifford의 답변과 비슷한 것을 사용했지만 하나의 쓰기 작업으로 작성되었습니다.데이터의 두 복사본이 필요하며 대체 사이에 있습니다.효과적으로 하나의 위치가있는 일련 번호가 있고 홀수가 있도록 증가 시퀀스 번호를 사용하십시오.

이와 같은 데이터를 씁니다 (가능한 경우 하나의 쓰기 명령으로) :

---------
|  seq  |
---------
|       |
| data  |
|       |
---------
| seq   |
---------
.

다시 읽을 때 시퀀스 번호가 모두 동일한 지 확인하십시오. 그렇지 않은 경우 데이터가 유효하지 않습니다.시작시 시작할 때 두 위치를 모두 읽고 어느 것이 최근에 롤링되는 시퀀스 번호를 고려해야합니다.

은 start_byte, total bytes to write, data, end byte와 같은 일종의 프로토콜에서 항상 데이터를 저장합니다. 외부 / 내부 메모리에 Writting하기 전에 항상 Power Moniter 레지스터 / ADC를 확인하십시오. 데이터가 손상된 데이터가 손상된 경우 최종 바이트도 손상됩니다.따라서 전체 프로토콜의 유효성을 검증 한 후에 항목이 vaild가 아닙니다. 체크섬은 좋은 생각이 아니며 CRC를 프로토콜에 포함시키려는 경우 CRC16을 선택할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top