플래시 메모리 : 몇 바이트 만 쓰기 전에 전체 페이지를 지워야합니까?


16

쉬운 질문입니다. 확실한 답변을 찾지 못했습니다 ...

SST25VF064C 플래시 메모리 칩용 드라이버를 작성 중 입니다. SPI를 통해 통신합니다.

모든 플래시 메모리 (내가 아는 것)와 마찬가지로 쓰기 전에 (비트 = 0) 지워야합니다 (모든 비트 = 1). 이 칩의 경우 지울 수있는 가장 작은 영역은 4kB입니다.

메모리는 256 바이트 페이지로 나뉩니다. 하나의 명령으로 1 바이트에서 256 바이트까지 지정된 페이지에 쓸 수 있습니다. 페이지 경계에서 시작할 필요는 없습니다. 프로그래밍 할 첫 번째 위치는 페이지 내 어느 위치 에나있을 수 있습니다.

일반적인 규칙은 페이지를 작성하기 전에 페이지가 지워 졌는지 확인하는 것입니다. 그러나 이미 작성된 영역을 피하면 이전에 작성된 페이지에 쓸 수 있습니까? 예를 들어, 바이트 0-127에 데이터를 저장한다고 가정하십시오. 바이트 128에서 시작하면 나중에 같은 페이지에 다른 128 바이트를 쓸 수 있습니까?

답변:


13

예, 지우기 후에는 다음 지우기 작업 전에 데이터를 쓰기 위해 (1에서 0으로 비트를 변경하기 위해) 여러 개의 개별 작업을 사용할 수 있습니다.

더 많은 비트 만 지우면 이전에 쓴 위치를 다시 쓸 수도 있습니다. 이것은 할당 비트 맵과 같은 것들을 유지하는데 편리 할 수 ​​있습니다.


훌륭합니다, 고마워요! 이것은 내가 찾던 것입니다.
bitsmack

일부 칩은 다양한 데이터 시트를보고 나중의 바이트를 만든 후 이전 바이트를 작성하는 것을 좋아하지 않지만 장치마다 다릅니다.
Vality

1
@Vality : 이것의 예를 제공 할 수 있습니까?
Dave Tweed

3
@DaveTweed NXP LPC21xx 및 LPC23xx MCU에는 16 바이트 메모리마다 체크섬 바이트가 있습니다. 체크섬이 해당 작업에서 작성되므로 한 번에 16 바이트를 모두 작성해야합니다. 나중에 와서 같은 "행"에 0을 쓰려고하면 0이 기록되지만 이전 체크섬에도 새로운 체크섬이 기록됩니다. 가능성은 1에 1이 있고 이전에 0이 있었으므로 체크섬이 유효하지 않게됩니다. MCU가 잘못된 체크섬이있는 줄을 읽을 수 있는지 기억하지 못합니다. 어쨌든 그것은 "장치에 따라 다름"의 예일 것입니다.
기예르모 프란 디

1
"다음 번의 지우기 작업을 작성하기위한 여러 개의 개별 작업." 일부 부품, 특히 MCU에 내장 된 플래시 메모리는 지우기가 필요하기 전에 최대 쓰기 수를 나타냅니다. 이 제한을 위반하면 다른 영역의 메모리가 손상 될 수 있으므로 이러한 제한에주의해야합니다.
ajb

5

이미 작성된 영역을 피하면 이전에 작성된 페이지에 쓸 수 있습니까?

내가 이해한다면 p. 데이터 시트의 16은 올바르게 말하고 있습니다.이 특정 칩을 사용하면 이미 작성된 영역을 피하더라도 이전에 작성된 페이지에 쓰지 않아야합니다.

세부

SST25VF064C 플래시 메모리 칩의 시트 (P)에. 16은 "page-Program 명령어는 메모리에 최대 256 바이트의 데이터를 프로그램합니다. Page-Program 작업을 시작하기 전에 선택된 페이지 주소는 FFH (Cleared State)에 있어야합니다."

따라서 "페이지 프로그램 작업을 시작하기 전에 선택한 전체 페이지가 삭제 된 상태 (페이지 FFh의 모든 바이트)에 있어야합니다." SST 또는 Microchip이이 모호한 문장을 명확히하는 문서를 발표 했습니까?

내 경험에, 페이지가 작성되면 페이지가하는 모든 MLC 플래시 칩의 제조 업체와 일부 최신 SLC 플래시 칩을 위임 합니다 해당 페이지를 다시 작성하기 전에 당신은 단지 몇 가지 1 비트를 변경하려는 경우에도 삭제 0 비트 (이것은 YAFFS 기사 에서 "한 번만 쓰기 규칙" 이라고합니다 .)

내 경험에 따르면 모든 이전 플래시 칩을 사용하면 페이지에 비트가 있거나 이미 다른 비트가 0으로 프로그래밍 된 바이트에도 소거주기없이 1 비트를 0 비트로 변경할 수 있습니다. 플래시 페이지는 삭제간에 여러 번 프로그래밍 할 수 있습니다. (이것은 YAFFS 기사에서 "다중 쓰기"라고합니다).

제조업체의 데이터 시트는 제조업체가 귀하에게 제공하는 조건부 약속입니다. 모든 데이터 시트 권장 사항을 준수하는 한 제조업체는 칩이 지정된대로 작동 할 것을 약속합니다. 이미 작성된 영역을 피하면서 이전에 작성된 페이지를 프로그래밍하면 즉각적인 리드 백이 예상 한 데이터를 제공 할 가능성이 높습니다. 새로 쓴 바이트는 방금 쓴 값입니다. 다른 바이트는 변경되지 않았을 가능성이 있습니다. 그러나 이는 데이터 시트 권장 사항을 따르지 않기 때문에 더 이상 데이터 시트의 모든 약속에 의존 할 수 없습니다. 이러한 제재되지 않은 활동으로 인해 프로그램 방해, 과도한 프로그래밍, 전하 트랩, DRAM 행 해머 와 유사한 영향 등으로 인해 데이터 보존 시간과 내구성이 저하된다는 소문이 있습니다 .

"메모리 사용 방식은 비트 오류율에 영향을 미친다. 부분 페이지 프로그래밍, 블록 내 비 순차 페이지 프로그래밍, 소거없이 블록 당 과도한 읽기 및 단일 블록 내에서 동일하지 않은 수의 읽기 작업은 읽기 수를 증가시킨다 오류를 방해하십시오. " -Michal Jedrak. "내장 시스템의 NAND 플래시 메모리".

"페이지 프로그래밍 중 비트가"1 "에서"0 "으로 의도 치 않게 프로그래밍 된 경우 프로그램 장애가 발생합니다.이 비트 오류는 프로그래밍중인 페이지 또는 블록의 다른 페이지에서 발생할 수 있습니다. 바이어스 전압 조건 페이지 프로그래밍 중 블록은 소량의 전류가 근처의 메모리 셀로 터널링 할 수 있습니다. 반복 된 부분 페이지 프로그래밍 시도는이 조건을 계속 악화시킵니다. " -Douglas Sheldon과 Michael Freie. "플래시 메모리에 방해 테스트" . 피. 8, 9.

"프로그래밍 작업 중에 비트가 의도하지 않게 프로그래밍 된 경우 (1 ~ 0) 프로그램 교란이 발생합니다. ...이 조건은 블록의 임의 프로그래밍과 여러 부분 쓰기를 페이지에 적용하여 악화됩니다." "Yaffs NAND 플래시 장애 완화"


0

사용중인 프로그래밍 소프트웨어가 이미 "필수"256 바이트를 쓰고있을 가능성이 높습니다. 그것은 1에서 256 바이트까지 쓸 수있는 능력을 제공하는 것처럼 "나타납니다", 그러나 그것이하고있는 것은 256 "FF"의 "마스크"로 원하는 바이트를 OR-하는 것 같습니다. 이것이 맞으면 전체 4K 바이트를 지우지 않고도 바이트를 "안전하게" 한 번 쓸 수 있습니다 . 체크섬이 컨트롤 외부에 쓰여지면 이전에 쓴 세그먼트에 다른 바이트를 쓸 때 잘못된 체크섬이 생성 될 가능성이 높습니다. 이것의 의미는 칩에 따라 다릅니다.

프로그래밍 소프트웨어가 "OR-ing"을 수행하지 않으면 직접 수행 할 수 있습니다. 256 바이트 세그먼트를 지우고 바이트를 올바른 위치에 쓰거나 256 바이트 마스크를 FF로 쓰고 원하는 페이지에 세그먼트를 쓰십시오.

어떤 방법이 특정 칩에서 작동하는지 여부는 쉽게 결정할 수 있습니다 . 첫 번째 128 바이트에 쓰고 두 번째 128 바이트에 쓰고 첫 번째 128 바이트가 "메시지"가 아닌지 확인하십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.