EPS32의 EN, IO0, IO2핀은 부팅모드를 결정합니다.

 

EN(Enable)핀은 ESO32의 동작여부를 결정하는 핀이며,

IO0와 IO2는 bootstrapping(부트스트랩핀)핀의 일종으로

ESP32의 재부팅 시 입력값(3.3V 혹은 0V)에 따라서

ESP32가 통상적인 부팅을 할 건지,

아니면 펌웨어 다운로드 모드로 부트할 지를 결정합니다.

 

여기서 bootstrapping핀이란 재부팅 직후 일정한 시간동안 입력되는 값으로

ESP32의 동작 모드를 결정하는 특수한 핀이며,

재부팅 후 일정 시간이 경과한 후에는 일반적인 입출력핀으로 사용할 수 있습니다.

 

그럼 IO0와 IO2를 어떻게 사용하면 ESP32가 펌웨어를 다운로드 받을 수 있도록 할까요?

ESP32의 datasheet의 bootstrapping핀에 대한 설명을 보면 아래와 같은 표가 있습니다.

 

 

위의 표에서 펌웨어 다운로드 모드(위의 표에서 Download Boot)로 부팅하기 위해서는 IO0와 IO2를 모두 0, 즉 0V로 놓으면 된다고 되어있습니다. (여기서 1을 3.3V를 의미합니다.)

반대로 통상적인 동작모드(위의 표에서 SPI Boot)로 가기위해서는 IO0만 1이 되면 됩니다.

 

그런데, ESP32가 재부팅할 경우,

내부 회로에 의해서 각 핀의 기본적인 값이 자동으로 입력됩니다.

그것이 곧, Default값입니다.

 

Default항목을 보면 pull-up 혹은 pull-down으로 표시되어 있는데

이것은, 핀에 외부입력이 없어도 재부팅시, 각 핀이 1 혹은 0의 값을 가진다는 의미입니다.

그래서 IO2는 재부팅 후 자동으로 0의 값을 가집니다.

따라서 ESP32를 다운로드 모드로 바꾸려면 IO0만 0으로 놓으면 됩니다.

 

자 이제, EN핀과 IO0으로 어떻게 펌웨어 다운로드를 하는지 보겠습니다.

아래는 시간에 따른 각 핀의 값을 그린 그림입니다.

 

 

위의 그림을 보면, 먼저 IO0를 low (0V)로 놓고,

그 후 EN핀을 low로 놓았다가 high(3.3V)로 바꾸면,

그 순간(왼쪽 수직 파란색선) ESP32는 펌웨어를 다운받을 수 있는 상태가 됩니다.

 

그 이후 ESP32의 RX, TX핀으로 USB를 통해서 들어온 펌웨어를 다운받습니다.

다운로드를 종료할 경우, 다시 먼저 IO0를 high로 놓고,

EN핀을 low로 놓았다가 high로 바꾸면,

그 순간(오른쪽 수직 파란선)부터 ESP32는 통상적인 모드로 재부팅합니다.

 

위의 두 핀들의 동작은 사용자가 직접 할 필요가 없으며,

소프트웨어적으로는 아두이노 IDE에 설치된 ESP32 보드 라이브러리,

하드웨어적으로는 보드에 장착된 CH340칩,

그리고 ESP32와 CH340사이에 놓인 2개의 트랜지스터 회로에 의해서 해결됩니다.

 

그럼 회로도를 보겠습니다.

먼저 아래는 보드에 있는 CH340칩입니다.

 

 

UD+와 UD-는 USB 케이블의 USB_DP, USB_DN핀과 연결되어 있으며,

호스트 PC에서 온 데이터를 입력받아서 TXD, RXD로 전달합니다.

 

DTR, RTS핀은 위에서 설명한 EN, IO0핀을 컨트롤하는 핀입니다.

그러나 이들 핀은 곧장 ESP32로 가는 것이 아니라

아래의 두 트랜지스터 회로를 통해서 EN, IO0로 연결됩니다.

 

 

CH340에서 나온 TXD, RXD에서 나온 핀들은

서로 교차해서 ESP32의 RXD0, TXD0핀에 연결됩니다.

즉 TXD → RXD0, RXD → TXD0입니다.

 

여기서 한가지 트릭은 CH340이 필요없을 때

ESP32에서 CH340으로 필요없이 전류가 흐르는 것을 방지하기 위해서

TXD와 RXD0사이, RXD와 TXD0사이에 각각 저항(수 kOhm)이 한개씩 들어갑니다.

 

 

이제 마지막으로 ESP32의 입력핀을 보겠습니다.

 

CH340의 DTR, RTS에서 온 핀들이 각각 EN, IO0에 연결되고,

RXD, TXD에서 온 핀들이 TXD0, RXD0에 연결됩니다.

 

사용자 입장에서는 ESP32보드 라이브러리를 설치한 후,

펌웨어를 완성한 후 “다운로드버튼만 누르면 CH340칩에 의해서 위의 그림의 동작이 자동”으로 이루어집니다.

 

CH340의 또 다른 역할은 통상적인 부팅모드에서는 호스트 PC와 ESP32간의 시리얼 통신(UART)입니다.

 

이상으로 ESP32의 펌웨어 다운로드 방법을 알아보았습니다.

 

+ Recent posts