본문 바로가기
임베디드 프로젝트/디바이스 구현

임베디드 (ESP32) 보드 개발 이슈 사항

by MachineJW 2025. 1. 27.

1. 데이터 수집 및 제어 (PLC:Programmable Logic Controller) 보드

최근 설계한 ESP32 MCU 기반 임베디드 보드 (좌측이 1월에 설계한 보드, 우측은 12월에 프로토타입으로 설계한 보드)

(1) 주요기능

  • DC 24V / 2A (24W) 전원
  • 1602 I2C 디스플레이
  • 디지털 입력 : 24V 신호를 입력
  • 디지털 출력 : 24V 신호를 출력
  • 아날로그 입력 (4-20mA) : 4~20mA 신호를 입력
  • 아날로그 입력 (0-10V) : 0-10V 신호를 입력
  • 센서 입력 : CT(AC전류 센서) 입력, PT100(온도 센서) 입력
  • GPIO 핀 (I2C SDA, SCL / ADC/ DI/ DO)
  • 부저 출력
  • Ethernet (W5500 SPI 기반)
  • MicroSD 카드 (SPI 기반)
  • RS485/232 통신
  • USB C Type ( 펌웨어 업로드 , 시리얼 디버깅용 )

(2) 개발환경

  • 회로도 및 PCB 아트웍 : EasyEDA
  • 펌웨어 작업 : Arduino IDE 2.3 & C/C++ 언어 (디바이스 전용 라이브러리 개발)

2. ESP32 USB to UART 펌웨어 업로드 실패 이슈 ( 해결 )

https://machinejw.tistory.com/97

 

[회로설계] ESP32 데이터수집장치 보드 제작

1. EasyEDA로 설계한 데이터수집장치 디바이스가 도착하였다.2. USB 장치 인식 성공 USB를 PC에 연결하여 정상적으로 CP2102 USB to UART가 인식하는 것을 확인하였다.문제는 펌웨어 업로드시에 부팅모드

machinejw.tistory.com

 

  • 마이크로컨트롤러의 TXD, RXD 신호는 CP2102의 TXD, RXD와 교차되어야한다.
  • MCU TXD -> CP2102 RXD 
  • MCU RXD -> CP2102 TXD

실수한 보드 패턴을 끊어내고 점퍼를 한뒤 정상적으로 펌웨어 업로드가 되었다.

3. 펌웨어 업로드를 위한 풀업(Pull-Up)/풀다운(Pull-Down) 저항 금지

IO14, IO12, IO13, IO15, IO2, IO2 는 부팅시에 부트모드에 관여되는 핀으로 풀업/풀다운 금지 핀이다.

데이터시트 발췌 (번역)

각 스트래핑 핀은 칩 재설정 동안 내부 풀업/풀다운에 연결됩니다. 따라서
스트래핑 핀이 연결되지 않았거나 연결된 외부 회로가 고임피던스인 경우 내부 약한
풀업/풀다운이 스트래핑 핀의 기본 입력 레벨을 결정합니다.
스트래핑 비트 값을 변경하려면 사용자는 외부 풀다운/풀업 저항을 적용하거나 호스트
MCU의 GPIO를 사용하여 ESP32에 전원을 켤 때 이러한 핀의 전압 레벨을 제어할 수 있습니다.
리셋 해제 후 스트래핑 핀은 정상 기능 핀으로 작동합니다.

  • IO2에 풀업저항을 설계한 실수가 있었다
  • 풀업저항을 제거하여 점퍼하니 정상적으로 부팅모드 (다운로드/SPI)로 진입할 수 있었다.

4. I2C 주소 0x20로 설계하였지만 인식은 0x38?

디지털 IO를 위한 I2C 장치 주소를 0x20으로 의도하여 설계하였다. (MCP20317, PCF8574)

  • 0x20 주소를 인식하지 못하는 하드웨어 이슈사항이 있었다.

(1) I2C 8비트 주소 VS 7비트 주소

  • I2C 주소는 보통 7비트 주소로 표현되며, 일부 데이터시트는 **8비트 주소 (R/W 비트 포함)**로 제공된다.
  • 데이터 시트 명시에 따르면 A0~ A2가 모두 LOW(GND) 연결시 8비트 READ 주소가 113 (dec), 71 (hex)이고 8비트 WIRTE 주소가 112 (dec), 70 (hex)라고 명시되어 있다!

(2) 7비트 주소로 변환하자

I2C 주소는 7비트로 표현된다! 즉 데이터시트 상에 8비트 R/W 주소를 7비트로 변환해야한다.

  • I2C는 7비트 주소를 사용하므로, 데이터시트의 8비트 주소(0x70, 0x71)를 변환하면 7비트 주소는 0x38이 맞다.
  • I2C 장치 주소를 설정할 때 7비트 주소 체계를 사용할지, 8비트 주소 체계를 사용할지 명확히 인지하는 것이 중요하다