물리적 구성 요소
USB 플래시 드라이브와 SD카드는 다음의 두 가지 핵심 구성 요소로 이루어져있다.
- NAND 플래시 메모리 : 데이터를 저장하는 비휘발성 메모리. 데이터는 플로팅 게이트 트랜지스터로 구성된 셀에 저장되며, 셀은 전하의 유무 또는 전하량의 수준을 기반으로 0과 1 혹은 다중 비트(SLC/MLC/TLC/QLC)를 표현한다.
- 컨트롤러 : 호스트 시스템과의 인터페이스를 통해 데이터 읽기/쓰기 요청을 처리하고, NAND 플래시 메모리의 제약을 극복하기 위한 핵심 로직 담당
이 저장장치들은 자체 전원없이 필요한 모든 전력을 호스트로 부터 공급받고, 호스트에 의해 연결이 설정되고 제어되지만, 저장장치 내부에서 이루어지는 모든 처리 작업은 내부 마이크로 컨트롤러에 의해 수행된다.
NAND 플래시 메모리의 읽기/쓰기 방식
PC에서 일반적으로 사용되어 온 저장장치인 하드디스크(HDD)는 회전하는 자기 디스크에 데이터를 기록하는 구조다. HDD는 512바이트 또는 4KiB 크기의 섹터 단위로 데이터를 읽고 쓰며, 기존 데이터를 지우기 위한 별도의 erase 동작 없이 동일한 위치에 덮어쓰기(overwrite)가 가능하다.
반면, NAND 플래시 메모리는 그 구조적 특성으로 인해 HDD와는 저장 방식과 제어 방식이 크게 다르다.
- 읽기/쓰기는 Page 단위, 삭제는 Block 단위
NAND 플래시 메모리에서 Page는 데이터의 읽기 및 쓰기가 수행되는 최소 단위이다. 일반적으로, 한 Page는 512B 또는2KB의 크기를 기진다. 또한 보통 수십에서 수백 개의 Page가 모여 하나의 Block을 구성하며, 삭제(Erase) 작업은 Block 단위로만 수행된다. - Erase-before-write 제약
NAND 플래시는 기존 데이터를 덮어쓸 수 없다. 이미 Program(쓰기)된 Page는 다시 쓸 수 없고, 해당 Page가 포함된 Block 전체를 삭제(Erase)한 후 새로운 데이터를 써야 한다. 이로 인해 쓰기 작업은 종종 비순차적(Out-of-place)으로 이뤄진다. 즉, 기존 데이터를 덮어쓰는 대신, 새로운 위치에 데이터를 기록하고 이전 위치는 무효화 처리된다. - P/E Cycle 제한
모든 NAND 셀은 Program/Erase 사이클(P/E Cycle)의 수명이 존재한다. 일반적으로 MLC는 약 10,000회, TLC는 약 3,000회 수준이며, 반복된 쓰기/삭제 작업은 셀의 전하 저장 능력을 저하시켜 데이터 신뢰성을 떨어뜨린다. 이 때문에 wear-leveling 알고리즘을 사용하여 모든 Block이 균등하게 사용되도록 분산 관리하는 것이 일반적이다.
내부 컨트롤러의 역할
대부분의 운영체제와 파일 시스템은 저장장치를 512바이트 섹터 단위(일부는 4KiB)의 선형적인 블록 디바이스로 간주한다. 이때 접근은 LBA(Logical Block Address) 기반으로 이루어지며, 저장장치는 단순히 그 요청된 블록에 데이터를 읽거나 쓰는 구조라고 가정한다.
하지만 앞서 살펴본 것처럼, NAND 플래시 메모리는 overwrite가 불가능하고 erase-before-write 제약, P/E cycle 제한과 같은 특수한 제약 조건을 가진다. 따라서 이러한 LBA 기반의 인터페이스를 실제 NAND 구조에 맞게 변환하고 처리하는 역할(Flash Translation Layer)을 내부 컨트롤러가 전담하게 된다.
그 외에도 컨트롤러는 다음과 같은 주요 기능을 수행한다.
- 논리적 블록 맵핑
호스트의 논리 주소(LBA) 기반 읽기/쓰기 요청을 NAND 플래시의 실제 물리적 주소(PBA)로 변환하는 역할 - Out-of-place 쓰기 처리
기존 위치의 데이터를 변경하지 않고 새로운 위치에 데이터를 쓰고, 이전 데이터는 유효하지 않은 것으로 표시하는 방식 - 읽기 응답 구성
LBA 기반으로 요청된 데이터를 추적하여 올바른 물리 위치에서 읽고, LBA 기준으로 호스트에 반환 - 외부 인터페이스 처리
호스트와의 통신을 위해 USB 플래시 드라이브는 MSC(Mass Storage Class), SD 카드는 SD/MMC 등 각 인터페이스에 맞는 프로토콜을 처리 - 가비지 수집 (Garbage Collection)
무효화된 Page를 정리하고 유효 데이터를 새로운 Block으로 재배치한 뒤, 사용하지 않는 Block을 Erase하여 재사용 가능하도록 준비 - 마모 평준화(Wear Leveling)
특정 Block만 반복적으로 사용되지 않도록 쓰기를 균등하게 분산하여 전체 수명을 연장 - 불량 블록 관리(Bad Block Management)
출고 시 존재하거나 사용 중에 발생한 불량 Block을 감지하고, 데이터 저장 대상에서 제외 - 오류 정정 (ECC, Error Correction Code)
읽기 중 발생할 수 있는 비트 오류를 탐지하고 복구
결론
즉, 우리가 USB 플래시 드라이브나 SD 카드를 사용할 때 실제로 데이터를 주고받는 대상은 NAND 플래시 메모리가 아니라, 컨트롤러라는 추상화 계층을 통해 간접적으로 접근하는 셈이다. 호스트 시스템(PC 등)은 저장장치를 단순한 블록 디바이스로 인식하고 논리 주소 기반의 읽기/쓰기 요청을 보낼 뿐이며, 이러한 요청을 NAND의 구조적 제약을 고려해 실질적으로 처리하는 것은 내부 컨트롤러의 역할이다.
'임베디드 개발 > 펌웨어' 카테고리의 다른 글
MIPI CSI-2 (0) | 2025.07.12 |
---|---|
88E1512 (1G Ethernet PHY) (0) | 2025.06.27 |
ADS1015 데이터시트 분석 및 Tested on Raspberry Pi (0) | 2025.06.09 |
VPX, OpenVPX, SOSA 정의 및 주요 표준 신호 (0) | 2025.06.04 |
HDMI (Hot Plug, DDC, EDID) (0) | 2025.05.20 |