ESP32 GPIO 핀 전기적 사양 및 SPI 매핑
SPI 할당 핀에 대한 GPIO 전기적 제약 조건
SPI 연결 디스플레이 또는 센서 작업을 하는 엔지니어는 자주 익숙한 패턴을 접하게 됩니다. 버스는 벤치 테스트 중 10MHz에서 안정적으로 작동하지만, 최종 PCB 레이아웃에서는 40MHz에서 트랜잭션이 누락되기 시작합니다. 그 원인은 SPI 주변 장치 자체인 경우는 거의 없습니다. 부하 상태에서 검증되지 않은 GPIO 전기적 동작 및 라우팅 선택에 기인합니다.
SPI GPIO 라인의 전압 허용 오차, 구동 강도 및 전류 제한
ESP32 GPIO는 3.3V 로직에서 작동합니다. GPIO 핀 중 어느 것도 5V 내성을 가지지 않습니다. 레벨 시프터 없이 5V SPI 장치를 직접 연결하면 시스템이 처음에 작동하는 것처럼 보이더라도 시간이 지남에 따라 입력 보호 다이오드가 손상됩니다.
GPIO당 절대 최대 출력 전류는 40mA입니다. 지속적인 SPI 작동의 경우 12mA가 실질적인 한계입니다. 이 한계를 초과하면 출력 전압이 하락하여 높은 클럭 속도에서 SCLK 및 MOSI의 신호 에지 품질이 저하됩니다.
각 GPIO에는 4가지 설정(0-3)을 가진 드라이브 강도 레지스터가 있습니다. 기본 강도(설정 2)에서는 SCLK의 상승 및 하강 시간이 일반적으로 약 20MHz까지 적절합니다. 그 이상에서는 드라이브 강도를 설정 3으로 높이면 에지가 날카로워지고 설정 시간 위반이 줄어들지만, EMI도 증가하고 인접 GPIO 라인에 노이즈가 커플링될 수 있습니다. SPI 라인이 ADC 입력 근처에 배선된 밀집 PCB에서는 이러한 절충이 중요합니다.
MISO는 특별한 주의가 필요합니다. MISO는 입력 라인이므로 드라이브 강도가 직접 적용되지 않습니다. 내부 풀업 저항과 버스 커패시턴스의 상호 작용이 중요합니다. ESP32 GPIO의 내부 풀업은 약 45kΩ입니다. 수 센티미터의 트레이스와 10-20pF의 출력 커패시턴스를 가진 장치가 있는 버스에서 이 풀업은 RC 시정수를 생성하여 고속에서 MISO 샘플링을 방해합니다. 20MHz 이상에서는 외부 10kΩ 풀업이 올바른 해결책입니다.
GPIO 매트릭스 라우팅 오버헤드 및 SPI 경로의 신호 무결성

ESP32 GPIO 매트릭스는 모든 GPIO를 모든 주변 장치 신호에 연결할 수 있도록 합니다. 이러한 유연성에는 대가가 따릅니다. 매트릭스를 통한 라우팅은 직접 IO MUX 경로에 비해 약 4-6ns의 전파 지연이 추가됩니다.
40MHz SPI 클럭에서 한 클럭 주기는 25ns입니다. 6ns의 라우팅 페널티는 신호가 칩을 벗어나기도 전에 해당 예산의 거의 1/4을 소비합니다.
직접 IO MUX 경로는 매트릭스를 완전히 우회합니다. WROOM-32 모듈에서는 이 경로는 다음 섹션에 나열된 기본 SPI 핀 할당에서만 사용할 수 있습니다. 다시 매핑된 GPIO는 매트릭스를 통과하며 지연 페널티가 발생합니다.
실질적인 결과는 SCLK 지터 축적입니다. 80MHz에서는 매트릭스 라우팅된 SCLK 지터로 인해 엄격한 설정/홀드 요구 사항을 가진 SPI 장치가 잘못된 데이터를 래치할 수 있습니다. 엔지니어링 결정은 간단합니다. 클럭에 민감한 설계에는 기본 SPI GPIO 할당을 사용하고, 매트릭스 재매핑은 몇 나노초의 추가 지연이 타이밍 마진에 영향을 미치지 않는 저속 버스 또는 CS 라인에 사용합니다.
ESP32 모듈 변형 전반의 GPIO 핀 할당
ESP32 WROOM-32 및 WROVER 기본 SPI GPIO 번호
| SPI 신호 | HSPI (SPI2) GPIO | VSPI (SPI3) GPIO |
|---|---|---|
| SCLK | GPIO 14 | GPIO 18 |
| MOSI | GPIO 13 | GPIO 23 |
| MISO | GPIO 12 | GPIO 19 |
| CS0 | GPIO 15 | GPIO 5 |
GPIO 6–11은 WROOM 모듈의 내부 플래시 인터페이스용으로 예약되어 있습니다. 이들을 SPI 또는 외부 주변 장치에 할당하면 플래시 액세스가 손상되고 예측할 수 없는 충돌이 발생합니다. 이는 권장 사항이 아닌 엄격한 제약 조건입니다.
GPIO 12는 스트래핑 핀(MTDI)으로도 사용됩니다. 부팅 시 상태에 따라 플래시 공급 전압이 설정됩니다. LOW는 3.3V를 선택하고 HIGH는 1.8V를 선택합니다. GPIO 12를 HSPI MISO로 사용하려면 리셋 중에 LOW 상태를 유지하기 위한 풀다운 저항이 필요합니다. 잘못 설정하면 플래시 액세스가 작동하지 않게 됩니다.
GPIO 15는 UART0 부팅 로그 출력을 제어합니다. 이를 LOW로 설정하면 부팅 로그가 표시되지 않아 기본 생산 플래싱 워크플로우가 중단됩니다. HSPI CS0에 GPIO 15를 사용해야 하는 경우 필요한 풀 상태를 문서화하고 해당 플래싱 절차를 업데이트해야 합니다.
ESP32-S3 WROOM-1 GPIO 및 SPI 주변 장치 차이점
S3는 표준 모듈 풋프린트에 GPIO 0–21을 노출합니다. -N16R8 변형에는 GPIO 26–48이 추가됩니다. S3의 SPI2 기본 핀은 SCLK GPIO 12, MOSI GPIO 11, MISO GPIO 13, CS GPIO 10입니다.
S3에는 SPI3가 있지만 모든 모듈 변형에 브레이크아웃되지 않았습니다. 펌웨어에서 SPI3를 할당하기 전에 항상 특정 모듈 데이터시트를 확인하십시오.
S3의 GPIO 19 및 20은 USB D+ 및 D−를 처리합니다. USB CDC가 활성화된 경우 SPI 라인으로 사용할 수 없습니다. WROOM-32 설계를 S3로 포팅하면서 동일한 GPIO 번호 매기기를 재사용하는 엔지니어는 종종 이 충돌을 조용히 겪게 됩니다. SPI 버스는 오류 없이 초기화되지만 USB 활동이 발생하면 트랜잭션이 간헐적으로 실패합니다.
S3는 WROOM-32 GPIO 매트릭스보다 라우팅 패널티가 낮은 완전한 IO MUX를 사용합니다. 기본값이 아닌 SPI GPIO 할당은 원래 ESP32보다 S3에서 타이밍 위험이 적습니다. SPI 처리량이 중요한 디스플레이 중심 설계의 경우 당사 제품을 사용하십시오. 디스플레이 인터페이스 대역폭 및 SPI 처리량 추정 새로 고침 주기 요구 사항에 대해 클럭 주파수 선택을 검증하는 도구.
입력 전용 GPIO 제한 사항 및 SPI CS 및 MISO 할당에 미치는 영향
ESP32 WROOM-32의 GPIO 34–39는 입력 전용입니다. 내부 풀업 저항이 없으며 출력 기능도 없습니다. 이 중 하나라도 CS 또는 SCLK에 할당하면 — ESP-IDF SPI 드라이버는 오류를 보고하지 않지만 CS 라인은 절대 어설션되지 않으므로 — 조용한 초기화 실패가 발생합니다.
GPIO 36(VP) 및 GPIO 39(VN)는 ADC1 센서 입력 핀입니다. ADC1이 활성 상태일 때 SPI MISO로 사용하는 것은 ADC 샘플 경로와 SPI 버스 간의 노이즈 결합을 생성합니다. 증상은 SPI 트랜잭션이 발생할 때 ADC 판독값이 이동하는 것입니다. 이러한 기능을 다른 GPIO 라인으로 분리하면 문제가 완전히 해결됩니다.
SPI 작업을 위한 GPIO 모드 구성
SCLK, MOSI 및 CS 라인에 대한 GPIO 드라이브 모드 선택
SCLK 및 MOSI는 다음을 사용해야 합니다. GPIO_MODE_OUTPUT 푸시-풀 구성에서. 푸시-풀은 가장 빠른 엣지 속도를 제공하며 단일 마스터 SPI에 적합합니다. 오픈 드레인 MOSI는 풀 저항 RC 지연을 추가하여 최대 클럭 주파수를 제한합니다. 버스 토폴로지가 특정하게 요구하는 경우가 아니라면 피하십시오.
CS 라인은 더 많은 고려가 필요합니다. 여러 SPI 장치가 버스를 공유하고 일부 장치에 내부 풀업이 있는 활성 로우 활성화 기능이 있을 때, 장치의 내부 풀업에 대해 로우를 구동하는 푸시-풀 CS는 버스 충돌을 일으킵니다. 외부 풀업이 있는 오픈 드레인 CS가 이를 해결합니다. 사용하십시오. GPIO_MODE_INPUT_OUTPUT_OD 해당 케이스에.
MISO는 버스가 유휴 상태일 때 풀업이 필요합니다. 플로팅 MISO는 트랜잭션 사이에 임의의 로직 레벨을 샘플링하여 드라이버가 라인이 안정화되기 전에 트랜잭션을 시작하면 다음 읽기를 손상시킬 수 있습니다. 내부 45 kΩ 풀업은 20 MHz 미만에서 실행되는 버스에 허용됩니다. 그 이상에서는 PCB에 10–22 kΩ 외부 저항을 장착하십시오.
IO MUX 및 GPIO 매트릭스를 사용하여 SPI GPIO 핀 리매핑
GPIO를 SPI 신호에 연결하는 두 가지 경로가 있습니다. IO MUX 경로는 H3 2.1의 기본 핀 할당에 고정되며 라우팅 지연이 추가되지 않습니다. GPIO 매트릭스 경로는 유효한 GPIO 번호를 허용하지만 H2 1에서 다루는 것처럼 4–6ns의 지연을 추가합니다.
ESP-IDF에서 spi_bus_config_t 구조체는 모든 GPIO 번호를 허용합니다. mosi_io_num, miso_io_num, 및 sclk_io_num 필드를 지정하면 드라이버는 자동으로 매트릭스를 통해 라우팅됩니다. 개발자는 매트릭스 라우팅이 타이밍 헤드룸을 줄일 때 드라이버가 경고하지 않으므로 타이밍 마진 계산에 추가 지연을 고려해야 합니다.
전체 SPI 버스 초기화 컨텍스트 및 드라이버 레벨 구성을 보려면 ESP32 SPI 주변 장치 버스 아키텍처 및 구성 페이지를 참조하십시오. WROOM-32 모듈에서는 매트릭스가 기술적으로 라우팅할 수 있는 것과 관계없이 GPIO 6–11은 이 필드에 절대 나타나서는 안 됩니다.
별도의 CS GPIO 라인을 사용하여 여러 SPI 장치 관리
ESP-IDF는 별도의 CS GPIO 라인을 통해 여러 SPI 장치를 지원합니다. spi_device_handle_t 인스턴스. 각 장치는 장치 핸들을 생성하기 전에 출력으로 구성된 전용 CS GPIO가 필요합니다. 드라이버는 구성되면 트랜잭션당 CS를 자동으로 설정하고 해제합니다.
세 개 이상의 SPI 장치가 있는 설계에서는 사용 가능한 GPIO가 부족한 경우가 많습니다. 세 개의 GPIO 라인으로 구동되는 74HC138 3-to-8 디코더는 최대 8개의 CS 신호를 지원합니다. 이렇게 하면 핀 제약이 있는 레이아웃에서 GPIO 사용량이 크게 줄어듭니다.
이 cs_ena_pretrans 매개변수는 spi_device_interface_config_t 첫 번째 SCLK 엣지 이전의 CS 설정 시간을 제어합니다. 대상 장치의 데이터시트에서 최소 CS-to-SCLK 설정 요구 사항을 확인하십시오. 많은 플래시 및 디스플레이 컨트롤러는 SCLK가 시작되기 전에 최소한 반 클록 사이클의 CS 홀드가 필요합니다.
양산 보드에서 흔히 발생하는 실패 모드: CS 라인이 전원 공급 시 HIGH 상태로 떠 있으면 SPI 장치가 펌웨어가 GPIO를 초기화하기 전에 자체적으로 활성화됩니다. PCB의 CS 라인에 10 kΩ 풀업을 사용하면 이를 방지할 수 있습니다. 설계 주기 후반에 이를 발견하면 일반적으로 보드 재설계를 의미합니다.
부팅 및 재설정 중 GPIO 핀 상태 동작
스트래핑 핀과 SPI GPIO 할당 충돌
ESP32의 5개 GPIO 핀은 부팅 동작을 구성하기 위해 리셋 시 샘플링됩니다: GPIO 0, 2, 5, 12, 15. 리셋 펄스 중의 상태는 플래시 전압, SDIO 타이밍, UART 로그 출력을 결정합니다. 이 핀에 할당된 모든 SPI 신호는 리셋 중에 올바른 로직 레벨을 유지해야 하며, 그렇지 않으면 칩이 예상치 못한 모드로 부팅됩니다.
GPIO 12는 플래시 VDD_SDIO 전압을 설정합니다. GPIO 5는 SDIO 타이밍에 영향을 미치며 올바른 VSPI CS 동작을 위해 부팅 시 HIGH여야 합니다. GPIO 15는 UART0 로그 출력을 제어합니다. 이들 각각은 PCB에 명시적인 풀 저항이 필요합니다. 스트래핑 샘플 창 동안 활성화되지 않는 내부 풀 저항에 의존하지 마십시오.
가장 안전한 생산 접근 방식은 CS 라인에 스트래핑 핀을 전혀 사용하지 않는 것입니다. 레이아웃 제약으로 인해 사용해야 하는 경우, 명시적인 풀 저항을 추가하고, 첫 번째 프로토타입에서 로직 분석기로 부팅 동작을 확인하고, 하드웨어 설계 노트에 필요한 보드 상태를 문서화하십시오. 이러한 제약이 이미 해결된 플랫폼을 평가하는 팀의 경우, ESP32 기반 산업용 HMI 디스플레이 모듈은 검증된 시작점을 제공합니다.
GPIO 기본 상태 및 리셋 후 SPI 버스 유휴 동작

리셋 후 모든 GPIO는 풀 저항이 활성화되지 않은 상태로 기본적으로 입력 모드로 설정됩니다. 펌웨어가 GPIO 드라이버를 구성할 때까지 모든 SPI 버스 라인은 플로팅됩니다. 빠르게 시작되는 SPI 장치가 있는 버스에서 플로팅되는 SCLK는 장치에 클럭 엣지처럼 보일 수 있으며, 펌웨어가 실행되기 전에 잘못된 트랜잭션을 트리거할 수 있습니다.
수정은 PCB에 있어야 합니다. SCLK에 10kΩ 풀다운 및 모든 CS 라인에 풀업은 전원이 공급되는 순간부터 안전한 유휴 상태를 정의합니다. 이는 몇 개의 수동 부품으로 해결되며 간헐적인 시작 실패의 전체 클래스를 제거합니다.
라이트 슬립을 사용하는 설계의 경우, gpio_hold_en() 슬립 사이클 동안 GPIO 출력 상태를 유지합니다. 이를 사용하지 않으면 CS 라인이 슬립 중에 플로트되어 SPI 장치가 부분적으로 활성화될 수 있습니다. 딥 슬립은 GPIO 상태를 유지하지 않습니다. 단, gpio_deep_sleep_hold_en() 이 명시적으로 호출될 때만 해당됩니다. 슬립 동작이 불확실할 때 외부 풀업/풀다운 저항은 여전히 신뢰할 수 있는 최후의 수단입니다.
첫 SPI 트랜잭션 전에 올바른 GPIO 구성을 얻는 것이 벤치에서 작동하는 설계와 안정적으로 출시되는 설계를 구분하는 요소입니다. STONE HMI는 산업용 HMI 시스템을 위한 생산 등급 펌웨어를 개발합니다. 이러한 종류의 프로세스 규율 — 양산 전에 부팅 상태, 스트래핑 핀 동작 및 슬립 모드 GPIO 처리를 검증하는 것 — 은 진단하기 어렵고 원격으로 패치할 수 없는 현장 실패의 위험을 직접적으로 줄입니다.
관련 게시물
또한 좋아하실 만한 콘텐츠…
-
산업 시스템 통합
-
HMI 및 GUI 개발
-
임베디드 및 펌웨어 개발
-
프로젝트 평가
$299.00