ESP32 Out of flash memory 문제 해결법

Embedded June·2021년 5월 14일
0

Error: The program size (1494106 bytes) is greater than maximum allowed (1310720 bytes)

구동환경: Windows10, VS Code with PlatformIO

.

ESP-wroom-32 모듈은 4MB 크기의 Flash가 내장돼있음에도 불구하고 약 1MB를 조금 넘는 프로그램이 빌드되지 않는 문제를 확인할 수 있었습니다. Wi-FI와 BLE를 동시에 사용할 경우 이 문제가 생기는 것으로 확인됩니다.

PlatformIO는 ESP-32 모듈을 구동할 때, Memory address block에 대한 정보를 github에서 가져와서 설정합니다.

https://github.com/espressif/arduino-esp32/tree/master/tools/partitions

PlatformIO는 default.csv를 읽어와서 메모리를 설정합니다. app0app1로 나뉜 것으로 보아, 듀얼코어를 가진 ESP-32의 기능을 활용하기 위해 partitioning을 한 것으로 추정됩니다. 이때 SPIFFS(Serial Peripheral Interface Flash File System)는 파일을 읽고, 쓰고, 삭제하는 간단한 기능을 지원하는 파일 시스템을 말합니다.

위 링크에서 default.csv 파일을 다운로드 받고 수정합니다.

저는 app1을 지운만큼 app0의 Size를 2배로 늘려줘서 약 3MB를 사용할 수 있도록 바꾸겠습니다. BLE와 WiFi 그리고 기타 센서 관련 라이브러리 2, 3개 정도 더 사용하시는 정도라면 3MB면 충분합니다.

수정한 csv 파일을 프로젝트 폴더에 platformio.ini 파일이 있는 경로에 업로드합니다.

platformio.ini 파일 안에 board_build.partitions = (본인이 수정한 csv파일 명).csv 를 입력합니다.

마지막으로, 다시 빌드 또는 업로드를 하면 사용할 수 있는 flash의 크기가 늘어난 것을 확인할 수 있습니다.

참고문헌

  1. Partition Table 사용법 : 공식사이트
  2. Partition Table 사용법 : 포럼, 친절하게 알려줌
  3. 참고한 포럼 1
  4. Partition Table 사용법 : PlatformIO 공식사이트
profile
임베디드 시스템 공학자를 지망하는 컴퓨터공학+전자공학 복수전공 학부생입니다. 타인의 피드백을 수용하고 숙고하고 대응하며 자극과 반응 사이의 간격을 늘리며 스스로 반응을 컨트롤 할 수 있는 주도적인 사람이 되는 것이 저의 20대의 목표입니다.

0개의 댓글