마이크로컨트롤러 디버깅의 흔한 하드웨어 및 소프트웨어 함정들
마이크로컨트롤러 펌웨어가 멈춤: 하트비트 LED 깜빡임이 멈추고 UART 콘솔이 응답하지 않음. 전형적인 증상입니다. 당황하지 마세요 — 스택 트레이스, 로그, 주변 장치를 체계적으로 확인하세요. 원인은 대개 간단한 것: 커넥터 안의 이물질, 핀 충돌, 또는 설정 오류입니다.
하드웨어 함정: 이물질부터 납땜 실수까지
CAN 네트워크용 텔레매틱스 보드 개발: 차가 시동이 안 걸리고 스타터가 헛돌음. 3시간 진단 끝에 원인 발견 — OBD-II 커넥터에 호일 조각이 3개 핀을 쇼트시켰음. 이물질 제거로 해결.
Tag-Connect가 인접한 밀집 보드 레이아웃: Traco Power 레귤레이터 때문에 프로그래밍 커넥터 접근 불가. 클립이 고정되지 않음 — 손가락이 닿지 않음. 해결책: 손가락 가는 동료 끌어들이거나 레이아웃 재설계.
USB 전원이 깜빡이며 끊김. BLE/UWB로 인한 전압 강하 의심했으나 배제. 원인: USB-A 리셉터클 불량 — 플러그 완전 삽입 시 접촉 불량, 0.5mm 뽑으면 작동. 교훈: 품질 좋은 케이블과 커넥터 사용.
터렛의 슬립 링을 통한 90cm 케이블로 SWD 링크 끊김. 패킷 전달 실패. 12cm 짧은 케이블은 정상. 결국 플라잉 리드로 보드 프로그래밍.
핀 충돌과 디버깅
JTAG/SWD 실행 실패: 'No device found'. 펌웨어 배치 스크립트가 STM32 ST-LINK Utility로 수동 리셋 요구. 원인: PA13 (TMS/SWDIO)에 연결된 LED. SWD 핀(PA13, PA14)은 GPIO로 사용할 수 없음. LED를 PA15로 옮겨 디버깅 복구.
FC7300 탑재 보드: J-Link가 주황색(리셋 상태) 표시, J-Flash가 'Could not download file' 보고. MCU 리플로우도 소용없음. 임시 조치: USB 포트나 프로그래머 교체.
MCU 설정과 부트로더
CC26x2가 전원 사이클 후 멈춤, 디버거 아래에서는 작동. 원인: 마지막 플래시 페이지의 고객 설정 섹터에 쓰기 안 함. TI CC26x4의 경우 SmartFR Flash Programmer 2로 blinky_backdoor_select_btn26x2.bin 먼저 플래싱한 후 자체 펌웨어.
STM32F413ZGJ6 부트로더가 앱으로 점프 실패: 벡터 테이블의 MSP 확인이 128kB 초과. MCU는 320kB RAM이지만 부트로더가 STM32F205VC용으로 빌드됨. Cortex-M4/M3 호환성이 5년간 버그를 숨김.
정전기와 신뢰성
장기 테스트: 터치 시 ESD 스파크로 RAM 로그 지워짐. 해결: 로그용 NVRAM 또는 SD 카드.
오디오와 주변 장치
BT1026(Bluetooth Classic)의 I2S: nRF5340에서 쉰 목소리. WS 50kHz인데 FSC-BT1026C 모듈은 48kHz까지만 샘플 출력 — 0 패딩으로 쉰 소리. 수정: BT1026을 I2S 마스터로.
회로 설계 실수
MCU 전원 공급 잊음 — 폐선으로 임시 수리. 또는 Ethernet PHY 크리스털 23MHz 대신 25MHz: 자동 협상 실패. Olimex-STM32-H407: 펌웨어 25MHz인데 12MHz 크리스털로 UART 쓰레기.
SPI-NAND W25M02GV 프로토타입: 퍼포보드에서 옆 핀이 열 패드 쇼트. 녹색 PCB 리플로우로 해결.
VNQ7E100AJ 고쪽 드라이버: 오픈 로드 시 V_SENSEH 풀업으로 거짓 전류 판독. ADC가 과부하로 오인. ECU 개정판에서 칩 교체.
FPU와 라이브러리 오류
Cortex-M33에서 snprintf()가 float 포맷팅 중 FPU 문제로 Default Handler 크래시.
주요 교훈
- SWD/JTAG 핀을 GPIO로 지정하기 전에 확인.
- TI MCU 고객 섹터를 커스텀 펌웨어 플래싱 전에 설정.
- 로그용 ESD 보호와 NVRAM 사용.
- 프로토타입에서 크리스털과 커넥터 검증.
- 데이터시트 읽기: 오픈 로드 검출 같은 기능으로 거짓 트리거 방지.
— Editorial Team
아직 댓글이 없습니다.