본문 바로가기
코딩/아두이노

LOLIN D32 코드 업로드 오류(fatal error) 뜰 때, 해결 방법

by DIYver 2022. 6. 9.

 

이번에 LOLIN D32 보드를 구입하여 사용하던 도중 코드는 정상적으로 컴파일이 되었는데,
업로드가 되지 않는 현상이 계속 발생했다.

 

"A fatal error occurred: Failed to connect to ESP32: Timed out waiting for packet header"

fatal error (치명적 오류) 발생한다고 아두이노IDE 에서는 말해주고 있다.

보드와 연결이 계속 안 되는지 connecting ... ___ ... ___ 만 반복하다가 오류가 뜨는 경우이다.

새 제품인데 보드 문제는 아니겠지 싶어서 여러가지 방법을 사용하던 중에
코드 업로드 하는 방법을 발견했다.

코드 업로드 할 때, GPIO 0번 핀을 GND 에 연결 시키면 코드가 정상적으로 업로드가 된다.

 

 

중요한게 코드가 업로드 되면 GPIO 0 번 핀과 GND를 다시 분리 시켜야 
보드가 업로드 한 코드로 작동하게 된다.

 

찾아보니 몇몇 보드는 이렇게 코드 업로드 하는데 바로 안되는 보드가 있다고 한다.
일부러 그런 것일 수도 있고, 개발 실수일 수도 있다...

어찌보면 안전장치가 하나 있는 것인데, 
보통은 BOOT 버튼이라던가 그런게 따로 있을 텐데 D32는 작게 만들다 보니 그런걸 다 빼버린것 같다.

 

ESP32 기반 보드 중에 같은 문제가 발생한다면 보드마다 해결 방법이 여러개 존재하는데 아래 방법을 따라하면 된다.

1. BOOT 버튼 또는 FLASH 버튼이 존재하는 경우
>> 코드를 업로드 하는 동안 해당 버튼을 계속 눌러주고 있으면 코드가 업로드 된다.

2. EN  (Enable) 핀이 존재하는 경우
>> EN 핀을 GND와 연결 시켜주면 된다. 아니면 10uF 커패시터를 이용하여 연결해주면 된다.
>> RST 핀과 GND를 연결해주어도 된다.

 

 

 

D32 보드의 경우 Auto Flash 회로라고 설계상 존재한다.

 

보면 자동적으로 코드 업로드 하면 업로드 모드로 들어가게끔 되어 있는것 같은데,
외국 사이트를 찾아보면 회로설계상 오류로 EN신호가 LOW로 너무 순간적으로 바뀌어서 자동으로 부트로더로 진입하지 못한다는 것 같다.
그래서 위의 해결책 중에 하나가 커패시터 하나를 달아 놓는 것이었다.

 

어찌되었든 D32는 코드를 업로드 할때 GPIO 0 핀이 관여하는데
해당 핀의 값이 LOW 여야 코드 업로드 모드로 진입할 수 있게 해주게 된다.

이렇게 하면 굳이 커패시터를 찾아서 연결하지 않아도 코드를 업로드 할 수 있다.
다만 할 때마다 연결하고, 업로드 끝난 뒤에는 또 제거하고 귀찮기는 하다...

이걸 해결 하려면 OTA 를 이용한 코드 업로드를 하면 더 편하게 쓸 수 있겠다.

 

댓글