minhyeok.lee 2025. 4. 15. 23:42
반응형

💾 Flash Memory란?

1. Flash Memory는 전원이 꺼져도 데이터가 유지되는 비휘발성 메모리(Non-volatile Memory)의 일종임
2. 오늘날 대부분의 임베디드 시스템, MCU, SSD, USB 등에서 널리 사용됨

 


📌 기본 개념

  • 비휘발성 메모리: 전원 제거 후에도 데이터를 보존
  • EEPROM과 달리 블록 또는 섹터 단위로 데이터를 지우고 씀
  • NAND와 NOR 두 가지 기본 구조가 있음

🧠 내부 동작 구조

  1. 셀(cell): 트랜지스터 기반 저장 구조로 0 또는 1을 저장
  2. 페이지(page): 가장 작은 쓰기 단위 (보통 256~2048 bytes)
  3. 섹터/블록(block): 가장 작은 지우기 단위 (보통 4KB~64KB)
  4. 읽기(read): 개별 바이트 또는 페이지 단위 가능 (빠름)
  5. 쓰기(write): 페이지 단위로만 가능 (지우기 없이 덮어쓰기 불가)
  6. 지우기(erase): 반드시 블록 단위로 수행

📊 주요 특징

항목 설명
비휘발성 전원이 꺼져도 데이터 유지
지우기 단위 일반적으로 4KB, 64KB 등 섹터 단위
쓰기 단위 페이지 단위 (보통 256B)
쓰기 전에 지우기 필요 기존 데이터를 덮어쓰기 위해서는 반드시 해당 섹터 전체를 지워야 함
수명 보통 100,000~1,000,000번의 지우기/쓰기 사이클
속도 읽기 빠름, 쓰기 느림, 지우기는 매우 느림
XIP 지원 일부 Flash는 직접 실행 (Execute in Place, XIP) 가능
비용 비휘발성 메모리 중 가장 저렴하며, 고용량 구현이 용이

🔄 쓰기 과정 (일반적 순서)

  1. Flash Read: 기존 데이터 확인
  2. Flash Erase: 전체 섹터를 지움 (필수)
  3. Flash Program: 원하는 위치에 새 데이터를 씀
// Flash write 예시 (RP2040)
flash_range_erase(offset, FLASH_SECTOR_SIZE);
flash_range_program(offset, buffer, size);

🧩 Flash 종류

유형 설명
NOR Flash 빠른 읽기 속도, 코드 실행에 적합 (XIP 가능)
NAND Flash 높은 저장 밀도, 대용량 저장에 적합 (SSD, USB 등)

⚠️ Flash 사용 시 주의점

  • 섹터 단위 지우기 → 작은 데이터도 큰 단위로 삭제됨
  • 쓰기 전 반드시 지우기 → 데이터를 덮어쓰려면 항상 erase 필요
  • 수명 고려 → 잦은 쓰기/지우기는 수명을 단축시킴
  • 전원 차단 위험 → 쓰기 중 전원 차단 시 데이터 손상 가능성

📦 MCU에서의 Flash 메모리 사용

사용 목적 예시
부트로더 저장 펌웨어 업데이트 시 사용됨
프로그램 코드 저장 MCU의 main code 저장
설정값/상태 저장 EEPROM 대체용 저장 공간
파일시스템 저장 LittleFS, SPIFFS 등 파일시스템 구동 시 사용

📚 관련 용어

  • XIP (Execute in Place): Flash에서 직접 코드 실행
  • Wear Leveling: Flash 쓰기 수명 분산 알고리즘
  • Bad Block Management: 손상된 섹터를 우회 처리
  • MTD (Memory Technology Device): Linux 기반 Flash 인터페이스

🧠 요약

1. Flash는 읽기 성능이 뛰어나고 대용량 구현에 적합

2. 쓰기 전 반드시 섹터 단위로 지우기가 필요하며, 쓰기/지우기 수명이 존재함
3. 설정 저장처럼 읽기 위주, 쓰기 적은 작업에 매우 적합하며, RTOS나 임베디드 환경에서 널리 사용됨

반응형