Flash#
16MiB Flash
ESP32-S3-WROOM-1U-N16R2
4KiB 섹터
100,000 회 endurance
20년 retention
erase, write 속도는 사양을 못 찾음. 사용한 칩 문의 필요
GD25Q32 칩을 사용할 경우
4KiB erase: 100ms typical, 300ms max
page write: 0.7ms typical, 2.4ms max
256-바이트 페이지이기 때문에 4KiB 쓰기시 0.7 * 16 = 11.2ms
2.4 * 16 = 38.4ms
LFS에 8MiB 할당
앱 데이터는 LFS에 저장
8MiB / 4KiB = 2048 섹터
아래 계산은 모두 4KiB 이하 데이터 저장 기준
1초 주기 데이터 저장
1일 86,400개 데이터
1년 31,536,000개 데이터
100,000 회 endurance 를 가정할 경우, 약 3.2일
60초 주기 데이터 저장
1일 1440개 데이터
1년 525,600개 데이터
100,000 회 endurance 를 가정할 경우, 약 190일
15분 주기 데이터 저장
1일 96개 데이터
1년 35,040개 데이터
100,000 회 endurance 를 가정할 경우, 약 2.9년
Wear leveling
LFS는 wear leveling을 지원
6MiB / 4KiB = 1536 섹터
100,000 * 1536 = 153,600,000 회 endurance
1초 주기 데이터 저장
153,600,000 / 31,536,000 = 4.9년
60초 주기 데이터 저장
153,600,000 / 525,600 = 292년
15분 주기 데이터 저장
153,600,000 / 35,040 = 4,380년
데이터 저장 주기 최소값은 10초로 하자
마진과 erase, write 연산 속도 고려
Flash Memory Layout#
ESP32-S3-WROOM-1U-N16R2#
사이즈: 16MiB
시작 주소 |
마지막 주소 |
영역 크기 |
용도 |
|---|---|---|---|
0x00000000 |
0x0000DFFF |
56KiB |
부트로더 |
0x0000E000 |
0x0000EFFF |
4KiB |
파티션 테이블 |
0x0000F000 |
0x0000FFFF |
4KiB |
Reserved |
0x00010000 |
0x00011FFF |
8KiB |
OTA meta data |
0x00012000 |
0x00012FFF |
4KiB |
PHY init data(not used) |
0x00013000 |
0x0007FFFF |
436KiB |
coredump |
0x00080000 |
0x0017FFFF |
1MiB |
Factory |
0x00180000 |
0x0047FFFF |
3MiB |
APP1 |
0x00480000 |
0x0077FFFF |
3MiB |
APP2 |
0x00780000 |
0x00FF7FFF |
8MiB+480KiB |
LFS |
0x00FF8000 |
0x00FFFFFF |
32KiB |
NVS |
MX25U12832F#
사이즈: 16MiB
시작 주소 |
마지막 주소 |
영역 크기 |
용도 |
|---|---|---|---|
0x60000000 |
0x6001FFFF |
128KiB |
부트로더 |
0x60020000 |
0x6011FFFF |
1MiB |
Factory |
0x60120000 |
0x6041FFFF |
3MiB |
APP1 |
0x60420000 |
0x6071FFFF |
3MiB |
APP2 |
0x60720000 |
0x6079FFFF |
512KiB |
coredump |
0x607A0000 |
0x607A7FFF |
32KiB |
NVS |
0x607A8000 |
0x60FFFFFF |
8MiB |
LFS |