esp32_pinmap

출처: https://mytodoro.tistory.com/3

ESP32 CPU내부의 메모리는 위와 같습니다.

448KB의 ROM 이 있는데 이는 주로 Boot loader를 저장 하는데 사용합니다.

사용자 프로그램은 외부에 달려 있는 SPI Flash를 사용해서 저장 하게 됩니다.

520KB의 on-chip SRAM을 내장하고 있습니다.

여기에 WROVER 모듈에는 외부에 8MByte의 PSRAM을 추가로 장착 할 수 있습니다.

따라서 사용자가 일반적으로 가용할 수 있는 메모리의 크기는

4MByte(16MByte 모듈도 있음)의 프로그램 메모리 520Kbyte의 프로그램 데이타 추가로 외부에 8MByte의 PSRAM을 사용할 수 있습니다.

여기에 추가로 SD/MMC를 달아서 확장할 수도 있을 것이구요.

일반적으로는 크게 부족함이 없는 양이지만 TFT LCD등을 달경우 이미지 처리를 위한 버퍼메모리가 부족할수 있습니다.

이때 PSRAM을 사용하면 좋을 것 같은데 퍼포먼스가 얼마정도 나올지는 시험을 해봐야 할 것 같습니다.

다음은 핀 펑션 정리 입니다.

모듈을 사용할때 사용자가 사용할 수 있는 핀들과 주의해서 사용할 핀들을 정리 해 보았습니다.

BOOT 관련 핀들정리

ESP32의 경우 Booting에 관련된 핀들은 위 5개의 핀들 입니다.

1) EN : 일반적인 Reset 과 같은 기능의 핀입니다.

내부에 일반적으로 RC Reset회로로서 구성되어 있고 Pull-up 되어 있습니다.

2) GPIO0 : Boot Mode를 선택하는 핀입니다.

HIGH 일때는 일반적인 부트모드로서 SPI Flash에 있는 사용자 프로그램이 실행이 됩니다.

LOW 일때는 내부 ROM에 있는 Serial Boot loader가 실행이 됩니다.

사용자 프로그램을 전송하거나 부트로더를 기동시킬때 사용하게 됩니다.

내부에서 pull-up 되어 있습니다.

ESP32는 EN핀이 Deactive 될때 (Low –> High) GPIO0의 상태를 읽어 부팅 모드를 결정하게 됩니다.

Dev Kit의 경우 위와 같은 스위치로 구성할 수 있습니다.

일반적으로 USB Serial로 부트로더를 운용하게 되는데 DTR과 RTS핀으로 위와 같은 회로를 만들어 EN과 GPIO0를 제어 합니다.

TR을 사용한 이유는 스위치와 GPIO0를 사용할때를 대비해 로직에 영향을 주지 않기 위함 입니다.

3) GPIO2 : Serial Boot mode로 들어갈때 GPIO2는 플로팅되거나 Low여야만 합니다.

입력으로 사용할 경우 부팅시 High가 되면 부트로더 모드로 들어가지 못할 수 있습니다.

출력으로 사용할 경우는 Pull Down 시켜주는 것이 안정적 일 것 같습니다.

하지만 초기 상태가 High 이어야만 하는 출력의 경우 사용에 조심을 해야만 합니다.

4) GPIO12 : 부팅시 내부 SPI Flash의 구동전압을 결정 합니다.

High일 경우 내부 SPI Flash의 구동전압을 1.8V로 결정 합니다.

Low일 경우 내부 SPI Flash의 구동전압을 3.3V로 결정 합니다.

내부에 Pull-down 되어 있어 기본은 3.3V로 정해 지게 됩니다.

GPIO12를 사용할 경우 이점을 주의해서 사용해야 합니다.

가급적이면 출력으로 사용하고 Pull down 시켜서 사용해서 부팅에 방해가 되지 않도록 해주는 것이

좋을 것 같습니다.

5) GPIO15 : 부팅시 부팅log 출력모드선택

High 일경우 Serial로 Booting log를 출력 합니다. (기본입니다.)

Low 일경우 Serial로 Booting log를 출력하지 않습니다.

내부에 Pull-up 되어 있어 기본적으로는 부팅로그를 출력하게 되어 있습니다.

역시 GPIO15를 사용할 경우 이를 참조해서 사용해야 합니다.

SPI FLASH관련 핀들

ESP32는 내부에 사용자 프로그램 저장용 메모리가 없습니다.

외부에 SPI Flash를 장착해서 사용자 프로그램을 저장해야만 합니다.

여기에는 6개의 핀들을 사용하게 됩니다.

Quard SPI Flash를 사용하고 있습니다.

즉 4bit(SD0~SD3) 버스폭의 SPI Flash를 사용합니다.

Single bit SPI도 사용할 수 있어 3개의 핀을 절약 할 수 있지만 속도 감소는 감소해야 겠지요.

외부 PSRAM 관련 핀들

ESP32는 내부에 520KByte의 SRAM을 가지고 있습니다만 부족할 경우 외부에 SPI PSRAM을 추가해 사용할 수도 있습니다.

이때는 추가로 2개의 핀이 들어가게 됩니다.

GPIO16과 GPIO17을 사용하게 됩니다.

Chip selecter와 CLK핀입니다.

PSRAM의 억세스 속도가 궁금합니다.

모듈의 경우 ESP32-WROVER-B 모듈이 PSRAM을 장착한 모듈입니다.

기본 UART

Boot loader나 일반 기본 시리얼 포트로 GPIO1 과 GPIO3을 사용한 TXD0, RXD0를 사용합니다.

ESP32에는 3개의 UART가 있습니다만.

UART1의 경우는 내부 SPI Flash에 핀을 할당해 버려서 사용이 불가능 합니다.

UART2의 경우 IO16, IO17을 사용하는데 만약 WROVER모듈을 사용할 경우 PSRAM용으로 핀이 할당되어서 사용이 불가능 합니다.

제 경우 UART를 많이 사용하는 편인데 이리 되버리면 기본 하나 WROVER모듈을 안쓸경우 추가로 하나더 해서 두개 밖에 사용을 못하게 됩니다.

일반 GPIO

이리 빼고 저리 빼서 확실하게 쓸수 있는 핀들은 위와 같습니다.

여기서도 GPIO39, GPIO36의 경우 내부에 콘덴서가 연결 되어 있어 민감한 외부 회로의 경우 설계시 참고를 해야 합니다.

C16과 C17인데 NC(Not Connect)로 마킹되어 있어서 실제로는 부품 장착은 되어 있지 않은 것 같습니다. ^^

답글 남기기