# 마이크로컨트롤러 펌웨어 디버깅을 위한 UART CLI 구현
UART CLI는 마이크로컨트롤러 펌웨어 디버깅을 위해 UART를 통해 명령줄 인터페이스를 제공합니다. 구문은 어셈블러와 유사합니다: 명령어 이름 뒤에 공백으로 구분된 위치 인수. 한 명령 — 한 줄.
command_name arg1 arg2 arg3 ...
PC에서 연결하려면 펌웨어 버퍼 오버플로를 피하기 위해 바이트 간 지연 설정이 포함된 TeraTerm을 사용하세요. 콘솔에 처음 나타나는 것은 녹색 시스템 초기화 로그로, 항공기 블랙박스와 유사합니다. 초기화 후 --> 프롬프트가 나타나며, 때때로 클럭 확인을 위한 업타임이 함께 표시됩니다.
명령 구조: Getter와 Setter
명령어는 상태를 확인하는 getter(상태 조회)와 매개변수를 변경하는 setter(설정 변경)로 나뉩니다. Getter는 펌웨어 분석에 안전합니다.
- h 또는 help [substring] — 부분 문자열로 필터링된 명령 목록.
- TAB — 명령 자동 완성.
- vi — 펌웨어 버전, 컴파일러, git SHA256.
ll [module] 명령어는 모듈의 로깅 레벨을 표시하며 printf 스타일 디버깅을 지원합니다.
h
h gpio
하드웨어 자원 진단
CLI는 주요 하위 시스템 상태에 대한 접근을 제공합니다:
- freq — 코어 주파수.
- clk — 하위 시스템에 활성화된 클럭.
- gl — GPIO 핀 상태.
- rm [addr] [bytes] — 주소로 메모리 읽기.
- wm [addr] [data] — 메모리에 쓰기.
레지스터의 경우:
rr timer5 0x10
nrm # I2C를 통해 NAU8814 레지스터 읽기
진단 명령 목록:
| 명령어 | 설명 |
|---------|----------|
| fd | 플래시 진단 |
| pwd | PWM 설정 |
| lmd | LED 상태 |
| intd | 인터럽트 |
| cdf | CAN 필터 |
| trd | 타이머 |
| cd | 코어당 스택 채움 수준 |
네트워크 및 주변 인터페이스
- i2cs — I2C 버스 스캔, 장치 주소 표시(DS3231, EEPROM).
- cs [can_num] [id] [hex_data] — CAN 패킷 전송.
- ll can debug — 수신된 CAN 패킷 로그.
repeat [cmd] N P 명령어는 명령어를 N회, 주기 P ms로 반복합니다 — 스트레스 테스트에 유용합니다.
성능 및 작업 모니터링
- scd — 슈퍼 루프 진단: while(1) 반복/초, 평균 지속 시간.
- 작업 스케줄러: ID로 조회 및 비활성화, 재빌드 없이.
- nvram — 재구성을 위한 NVRAM 읽기/쓰기.
MCU와 PC에서의 슈퍼 루프 예시:
![scd on MCU]
reboot — 코어 재부팅.
내장 계산기 및 유틸리티
CLI는 장치를 컴퓨팅 도구로 만듭니다:
- Base64, RLE, AES256 디코딩.
- SHA256, CRC16 해싱.
- GNSS 거리, 벡터 각도.
- 선형 방정식, PLL 계수(clock_pll_calc 220000000).
- bd val1 val2 — 32비트 레지스터 비트 차이.
- 마킹으로 캡시터 값 계산.
- cfim — 마스크에 따른 실제 CAN ID.
전압 분배기 예시:
calc_vdiv R1=1000 R2=1000 Vin=3.3
단위 테스트는 부분 문자열로 실행: test i2c.
주요 포인트
- UART CLI는 브링업 및 디버깅을 위한 디버그 빌드에 필수적입니다.
- SWD/JTAG과 달리 전원 재연결 시 멈추지 않습니다.
- UART, stdin/stdout, 기타 프로토콜 지원.
- CLI를 통한 펌웨어 업데이트 및 캘리브레이션.
- 플래시 크기에 따라 명령어 수 조정.
구현 사실
CLI는 펌웨어 모듈의 계층적 구조입니다. 명령어를 파싱하고 컴포넌트로 라우팅합니다. Windows에서는 제어된 조건에서 디버깅을 위한 BusyBox 같은 콘솔 애플리케이션입니다. 60초 타임아웃 또는 Esc 후 자동 종료.
— Editorial Team
아직 댓글이 없습니다.