일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 힐스테이트 광교산
- 매터
- RS-485
- 현대통신
- Bestin
- 월패드
- esp32
- ConnectedHomeIP
- 나스닥
- MQTT
- 미국주식
- homebridge
- 국내주식
- cluster
- Apple
- 홈네트워크
- raspberry pi
- 오블완
- 애플
- 코스피
- Espressif
- matter
- 파이썬
- 티스토리챌린지
- Python
- 배당
- SK텔레콤
- 공모주
- 해외주식
- Home Assistant
- Today
- Total
YOGYUI
[ESP-IDF] ESP 칩 리셋하지 않고 시리얼 모니터링하기 본문
[ESP-IDF] Monitoring serial without esp chip reset
Notes: ESP-IDF 5.1.1 버전을 대상으로 작성된 글
ESP32 계열 칩셋 펌웨어 개발시 사용하는 SDK인 ESP-IDF
ESP-IDF의 커맨드 라인 인터페이스(CLI) 툴인 idf.py 파이썬 스크립트를 사용해서 프로젝트 설정, 펌웨어 빌드, 플래시, 모니터링 등 다양한 기능을 수행할 수 있다 (특히 상품화 단계에서 필수적인 펌웨어 encryption, component size 측정 등 고급 기능도 사용 가능)
특히, 펌웨어 플래싱 후 내부 동작을 확인하기 위해 로그 출력을 시리얼 포트 (ESP의 UART0)로 읽어 모니터링하는 기능을 자주 활용하게 되는데, idf.py의 monitor 커맨드가 이를 담당하고 있다
$ idf.py -p {serial_port} monitor
문제는, 만약 ESP32의 RST(혹은 EN, 칩의 리셋을 담당) 핀이 USB-to-UART brige IC의 RTS 핀과 연결되어 있을 경우, 이 명령은 항상 ESP32 칩을 리셋하게 된다는 점이다
새로운 펌웨어를 플래시하지 않은 이상, 현재 동작중인 칩을 리셋없이 모니터링하고 싶은 경우에 사용할 수 없어 꽤나 문제가 되는데, 이를 해결하기 위한 방법을 살짝쿵 알아봤다
1. 방법
$ python3 ${esp-idf-path}/tools/idf_monitor.py -p ${serial port} --no-reset
바쁜 현대인을 위한 두괄식 전개
결론부터 말하자면 idf.py가 호출하는 파이썬 스크립트 중 하나인 idf_monitor.py를 직접 호출하면 되며, 호출 시 --no-reset 플래그만 위와 같이 붙여주면 된다
esp-idf 설치경로의 /tools 디렉터리 내부에는 다양한 유틸리티 스크립트들이 존재한다
$ ls ${esp-idf-path}/tools
idf_monitor.py 도 해당 경로에 존재하며, 사용법은 --help 플래그를 붙이면 된다
※ executable인 idf.py와 달리 idf_monitor.py는 python3로 스크립트를 로드해서 사용해야 한다
$ python3 ${esp-idf-path}/tools/idf_monitor.py --help
옵션 인자 설명은 다음과 같다
options:
-h, --help show this help message and exit
--port PORT, -p PORT Serial port device. If not set, a connected port will be used.
--no-reset Do not reset the chip on monitor startup
--disable-address-decoding, -d Don't print lines about decoded addresses from the application ELF file
--baud BAUD, -b BAUD Serial port baud rate
--make MAKE, -m MAKE Command to run make
--encrypted Use encrypted targets while running make
--toolchain-prefix TOOLCHAIN_PREFIX Triplet prefix to add before cross-toolchain names
--eol {CR,LF,CRLF} End of line to use when sending to the serial port
--rom-elf-file ROM_ELF_FILE ELF file of target ROM for address decoding. If not specified, autodetection is attempted based on the IDF_PATH and ESP_ROM_ELF_DIR env vars.
--print_filter PRINT_FILTER Filtering string
--decode-coredumps {info,disable} Handling of core dumps found in serial output
--decode-panic {backtrace,disable} Handling of panic handler info found in serial output
--target TARGET Target name (used when stack dump decoding is enabled)
--revision REVISION Revision of the target
--ws WS WebSocket URL for communicating with IDE tools for debugging purposes
--timestamps Add timestamp for each line
--timestamp-format TIMESTAMP_FORMAT Set a strftime()-compatible timestamp format
--force-color Always colored monitor output, even if output is redirected.
2. DEMO
2.1. 일반 모니터링 커맨드 실행 시 (idf.py monitor)
2.2. no reset 플래그로 모니터링 실행 시 (idf_monitor.py --no-reset)
이제 칩을 리셋하지 않고도 내부 로그를 바로 확인할 수 있다!
끝~!
'Hardware > Espressif' 카테고리의 다른 글
[ESP32] Secure Cert 영역의 Pre-Provisioned 바이너리 추출해보기 (0) | 2024.02.02 |
---|---|
[ESP-IDF] ESP32 메모리 사용량 체크하기 (0) | 2024.01.25 |
ESP32 - Digilent Pmod DPOT (AD5160) 디지털 저항 제어 (0) | 2023.02.17 |