arduino-esp32 에서 제공하는 ble, wifi, httpclient, ota 등에다가 이미지 좀 추가하다보면 기본 코드 공간이 너무 부족하게 된다.
The program size (00000 bytes) is greater than maximum allowed (1310720 bytes)
위와 같은 메세지를 만났을 때 아래 조치가 필요하다.
- 구입할 때 표기된 ESP32 메모리가 최소 4MB 였던거 같은데.. 더 큰 용량 제품을 사도 동일하게 나온다
- 아래 링크를 보면 코드용 공간 기본값이 128KB 인거 같다..
arduino-esp32/tools/partitions/default.csv at master · espressif/arduino-esp32 (github.com)
1. 파티션 테이블 직접 정의
아래와 같이 파티션 유형별로 구분하여 저장한다.
코드가 들어가는 파티션은 app0, app1 으로 여기서는 0x1D0000 을 지정 했으니 약 1.9MB 정도가 되겠다.
- app0 은 주로 사용되는 영역이고, app1 은 OTA 시 올라갈 코드를 저장할 영역으로 사용
- size 는 필요에 따라 조정하며 offset + size 가 다음 행의 offset 과 맞아야한다
- spiffs 위치 변경시 나중에 코드를 이용해 spiffs 초기화가 필요하다 (format?)
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x1D0000,
app1, app, ota_1, 0x1E0000,0x1D0000,
spiffs, data, spiffs, 0x3B0000,0x10000,
coredump, data, coredump,0x3C0000,0x10000,
2. 파티션 테이블 반영
아두이노 IDE 사용시 Tools > Partition Scheme 에서 변경 할 수 있다.
PlatformIO 사용시 프로젝트 소스 최상단에 있는 platformio.ini 을 열어,
board_build.partitons 항목에 위 csv 파일을 지정해준다
[env]
board = lolin_d32
....
....
board_build.partitions=custom_paritions.csv # csv 파일명 기재
ESP32 파티션 설정 관련 참고 :: Partition Table — Arduino-ESP32 2.0.14 documentation (readthedocs-hosted.com)