3/07/2021

ESP32 관련구성 및 VSCode

1. ESP32 EVM 구성 및 개발환경구성

  • ESP32 개발환경구조 

ESP-IDF라는 개발환경을 제공하고 있으며, ToolChain 과 기본API 제공해주고 있다. 
더불어 이런 API들을 Component 형식으로 묶을 수 있도록 기능을 제공 

현재 ESP-IDF 의 Stable Version: 4.2.1

  • ESP32 HW 전체구조(Block Diagram)
ESP32의 HW 전체 구조로 Core를 보면 Dual-Core 혹은 Single Core로 설정에 따라 동작가능하며, SRAM을 보면, 두가지로 나뉘어진다.
  1. Core-SRAM
  2. RTC-Memory(Recovery)
상위구조는 분리되어있는 것은 Power Management의 Deep Sleep 기능인 ULP/RTC로 전환될 경우 Core는 Off되므로 이를 저장할 공간이 필요해서이다.


Xtensa LX6 Core가 두개 각각 존재하지만 별도의 ULP(Ultra-low-Power) 즉 Co-processor가 존재하는데, DeepSleep으로 될 경우 사용되어지는데,
동작방식이 ARM과는 다르게 동작이 되어진다. 

ULP는 Core와 다르게 별도의 Co-Processor로 Core와 호환이 되지 않는다. 그리고 더불어 Power Management의 종류에 따라 
실행되는 단계가 나뉘어져 있어 관련부분은 Datasheet를 참조하다. 
세부내용 DeepSleep

  • ESP32 Core 종류
ESP32-xx Famliy로 분류가 되지만, 각 Core가 다르므로 주의하며, 현재 Dual Core로 구성되어있지만, Single Core으로만도 동작가능하다.
  1. ESP32: Tensilica 의 Xtensa LX6 
  2. ESP32-S2/S3: Tensilica 의 Xtensa LX7
  3. ESP32-C3/C6: RISC-V

세부설명 및 그림출처

ESP32 IC 정보와 ESP32 Module 정보

1.1 ESP32 EVM 및 HW 정보 



ESP32 Board Block Diagram 과 Pin Description  



1.2 ESP32/ESP8266 개발환경구성 

개발에서 사용되어지는 IDE로는 Ecplise 와 VSCode를 이용하면 될 것 이며, Window/Linux/MacOS를 전부 지원한다. 
세부설치 방법은 아래 링크 참조 

ESP32 Get Started Manual 

ESP8266 Get Started Manual 
이전과 구조가다르며, 이부분 추후에 다시 보도록하자 

ESP-IDF Source Download 


1.3  VS Code 설치 후 ESP-IDF 설치 

Window/Linux에서 둘다 진행가능하며, VS Code 의 Extension 에서 쉽게 개발환경을 찾아  구축가능하다. 

현재 CMake 와 Python 관련부분은 필요하다고 해서 별도로 설치 

  • 설치후 확인 사항 
F1 Key를 눌러 ESP-IDF를 선택하면 제공해주는 기능들이 나오며, 이 기능을 이용하여 쉽게 사용가능하다. 

ESP-IDF: Show Examples Project:  ESP32에서 제공해주는 Example들을 테스트 가능 
ESP-IDF: Build, Flash and start a monitor on your device :  Project를 Build Flash 후 확인

  • 설치 후 확인기능 
좌측 eFUSE Explorer :  ESP32의 Firmware 관련정보 MAC 정보 및 Firmware 정보 
ESP-IDF Examples: 상위에서  Show Examples를 이용하여 각 Example를 생성 


주의사항 
ESP-IDF Monitor (Serial) 가 동작되면, 상위 eFUSE는 사용하지 못함
eFUSE를 사용하고자 하면, ESP-IDF Monitor를 Kill로 죽이고 사용해야함 


1.4 OpenOCD 기능지원

기본동작방식 Serial로 연결되어있으며, 이 Serial은 OpenOCD를 이용하여 JTAG으로 이용가능하다. 
그래서 Serial 로 사용할지 JTAG으로 사용할지는 각 설정에 판단에서 사용해야한다. 


2. ESP-IDF API 관련정보 




2.1 ESP32 의 각 기능링크 

  • ESP32 Partition 
ESP32에서는 기본적으로 Partition Table이 존재하며, OTA를 진행한다면, 본인이 별도로 변경해서 설정하며, 관련예제도 존재

  • ESP32에 Flash를 할 경우 반드시 Bootloader 필수
build 내부에 flash_args 참조하면 전체구조를 파악가능하며, bootloader 이외 partition table 정보와 OTA관련된 정보가 필요함
세부적으로 분석하고자 하면 flash_args 파일분석 


  • ESP32 의 Error관련사항 정리
ARM이 아니므로, 관련 Exception 부터 관련 내용들을 자세히 보도록하자.

Guru Meditation Errors
CPU의 Exception을 말하며, Guru Meditation Errors와 함께 발생

Other Fatal Errors
Battery 문제라든지, Heap 문제라든지 상위 문제말고 다른 에러들 



  • ESP32 DeepSleep
Power Mode는 아래와 같이 구성이되어지는데, DeepSleep들어가면, ULP 사용 or ULP 미사용형식으로 동작한다.
세부적으로 RTC Timer + RTC Memory로만으로도 동작가능

ESP32 DeepSleep Manual 과 관련소스

https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf


  • ESP32 SRAM의 구조 

SRAM영역이 두개로 나누어져 있으며, 이는 Deep Sleep때문에 분할했으며, ARM으로 치면, TCM과 비슷할 것 같다.




  • RTC SRAM 의 Linker Script 와 Attribute 예제
  1. RTC_RODATA_ATTR
  2. RTC_DATA_ATTR
  3. RTC_FAST_ATTR 
  4. RTC_NOINIT_ATTR
  5. RTC_SLOW_ATTR

  • ESP32 의 Linker Script 
MCU에서 Linker Script는 중요하며, 사용법은 GCC와 거의 동일하므로, 아래 링크 참조

  • ESP32 개발환경 기반으로 Component 추가 개발 

ESP32 Build 방법 Manual

ESP32 Component 사용방법

ESP32 Component 추가 방법

ESP32 Component 추가 및 그외부분 결합예제

  • Bluetooth Provisioning

  • Bluetooth Client Server

  • Bluetooth Basic Article 

  • ESP32 12bit ADC 지원 (SAR ADC로 지원)
SAR ADC 동작원리


SAR 12bit ADC Noise 문제비교 
  1. No Capacitor:  가장 많은 Noise를 보이며, Sample 수가 200 즈음 왔을 때 안정적
  2. With Capacitor (0.1uF): 산발적인 Noise는 없으나 오차가 심함
  3. With Capacitor (0.1uF) and MulitiSampling:  Sample수가 60이상일 경우기준으로 보면 안정적 


ADC Calibration API를 제공 (각 Chip마다 각 ADC마다 차이)
  1. Y: 12bit 이므로 4096 값
  2. X: mV 값 
각 ADC Vref가 비교해보면, 아래와 같이 차이가 조금씩 발생하는데,이값을 eFUSE 에서 제공되는 값기반으로 API를 이용하여 보정가능 (default 1100mv)
아래의 그림을 보면, 각 Chip or 각 ADC 사이의 두개의 ADC Vref 가 차이가 생기는 곳이 1000mv~1200mv이며, 아래의 값처럼 다르며, 
그래서 기본값은 1100mV로 되어있는 것으로 보인다.
 
ADC의 Range는 attenuation 의 값에 조절되며, Range가 넓어질 수록 정확도는 떨어진다. 




ESP32의 ADC2 Limitation
ADC의 경우 ADC1 과 ADC2로 나뉘어지는 것으로 보이며, ADC2 사용할 경우 아래반드시 참조



  • ESP32 WIFI MESH


  • ESP32 Tools


2.2 IoT 와 각 Cloud 정보 

  • ESP32 와 각 Cloud 정보


AWS는 현재 FreeRTOS기반으로 각 IoT SW를 구축하고 있지만, 아직 안정적인 버전이 아니며, 개발버전으로 버그들이 많이 존재한다.