홈으로 돌아가기

마이크로컨트롤러용 UART CLI: 디버그 명령어

이 자료는 마이크로컨트롤러 펌웨어 디버깅을 위한 UART CLI 구현을 설명합니다. 하드웨어 자원, 주변 장치, 성능 진단 및 내장 계산기 명령어를 다룹니다. 중급/시니어 개발자를 위한 예제.

MCU에서의 CLI: GPIO부터 CAN 및 PLL 계산기까지
Advertisement 728x90

# 마이크로컨트롤러 펌웨어 디버깅을 위한 UART CLI 구현

UART CLI는 마이크로컨트롤러 펌웨어 디버깅을 위해 UART를 통해 명령줄 인터페이스를 제공합니다. 구문은 어셈블러와 유사합니다: 명령어 이름 뒤에 공백으로 구분된 위치 인수. 한 명령 — 한 줄.

command_name arg1 arg2 arg3 ...

PC에서 연결하려면 펌웨어 버퍼 오버플로를 피하기 위해 바이트 간 지연 설정이 포함된 TeraTerm을 사용하세요. 콘솔에 처음 나타나는 것은 녹색 시스템 초기화 로그로, 항공기 블랙박스와 유사합니다. 초기화 후 --> 프롬프트가 나타나며, 때때로 클럭 확인을 위한 업타임이 함께 표시됩니다.

명령 구조: Getter와 Setter

명령어는 상태를 확인하는 getter(상태 조회)와 매개변수를 변경하는 setter(설정 변경)로 나뉩니다. Getter는 펌웨어 분석에 안전합니다.

Google AdInline article slot
  • h 또는 help [substring] — 부분 문자열로 필터링된 명령 목록.
  • TAB — 명령 자동 완성.
  • vi — 펌웨어 버전, 컴파일러, git SHA256.

ll [module] 명령어는 모듈의 로깅 레벨을 표시하며 printf 스타일 디버깅을 지원합니다.

h
h gpio

하드웨어 자원 진단

CLI는 주요 하위 시스템 상태에 대한 접근을 제공합니다:

  • freq — 코어 주파수.
  • clk — 하위 시스템에 활성화된 클럭.
  • gl — GPIO 핀 상태.
  • rm [addr] [bytes] — 주소로 메모리 읽기.
  • wm [addr] [data] — 메모리에 쓰기.

레지스터의 경우:

Google AdInline article slot
rr timer5 0x10
nrm  # I2C를 통해 NAU8814 레지스터 읽기

진단 명령 목록:

| 명령어 | 설명 |

|---------|----------|

Google AdInline article slot

| 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

Advertisement 728x90

다음 읽기