문제 해결
시스템 운영 중 발생할 수 있는 주요 문제와 해결 방법을 정리합니다.
시리얼 통신 실패
포트를 찾을 수 없음
증상: serial.serialutil.SerialException: could not open port
원인 및 해결:
| 원인 | 확인 방법 | 해결 |
|---|---|---|
| USB 케이블 미연결 | ls /dev/ttyUSB* 결과 없음 | USB 케이블 연결 확인, 다른 포트 시도 |
| 권한 부족 | ls -l /dev/ttyUSB0 확인 | sudo usermod -aG dialout $USER 후 재로그인 |
| 다른 프로세스가 점유 | lsof /dev/ttyUSB0 | 점유 프로세스 종료 후 재시도 |
| WSL에서 USB 미인식 | lsusb 결과 없음 | usbipd attach 명령으로 WSL에 USB 연결 |
WSL 환경에서 USB 장치를 연결하는 방법:
# Windows PowerShell (관리자)
usbipd list # 장치 목록 확인
usbipd bind --busid <BUS-ID> # 최초 1회
usbipd attach --wsl --busid <BUS-ID> # WSL에 연결
# WSL에서 확인
ls /dev/ttyUSB*
보드레이트 불일치
증상: 데이터 수신은 되나 깨진 문자열 (0xFF, 0x00 등 무의미한 바이트)
해결:
config.yaml의serial.baudrate값 확인 (기본: 115200)- DSP 펌웨어의 UART 초기화 코드에서 보드레이트 확인
- 양쪽 값이 일치하는지 검증
# 시리얼 모니터로 직접 확인
python -c "
import serial
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=3)
print(ser.read(100))
ser.close()
"
CRC 오류 반복
증상: CRC mismatch 경고가 지속적으로 발생
원인: 전기적 노이즈, 케이블 불량, 접지 문제
해결:
- USB 케이블을 교체합니다 (차폐 케이블 권장)
- USB 허브를 제거하고 PC에 직접 연결합니다
- 모터 구동 중 발생하면 통신 케이블의 배선 경로를 전력선과 분리합니다
- 지속되면 DSP 보드의 UART TX/RX 핀 파형을 오실로스코프로 확인합니다
JTAG 연결 실패
SDS200i 에뮬레이터 미인식
증상: Error connecting to the target 또는 UniFlash에서 에뮬레이터 목록에 표시 안 됨
확인 절차:
- USB 케이블 연결 상태 확인
- SDS200i 전원 LED 점등 확인
- 드라이버 설치 확인:
# Linux lsusb | grep -i spectrum # 결과 없으면 드라이버 미설치 - CCS에서 Target Configuration 재생성
플래시 검증 실패
증상: Verification failed at address 0x...
해결:
| 단계 | 조치 |
|---|---|
| 1 | DSP 보드의 전원을 OFF/ON하고 재시도 |
| 2 | JTAG 케이블을 분리/재연결 |
| 3 | CCS에서 Erase Flash 후 재플래시 |
| 4 | 클럭 설정 확인 (JTAG 속도를 낮춰 시도: 1 MHz → 500 kHz) |
| 5 | 다른 DSP 보드로 교체하여 보드 불량 여부 확인 |
# UniFlash CLI로 플래시 삭제 후 재시도
dslite.sh --config=config.ccxml --erase
dslite.sh --config=config.ccxml --flash --verify firmware/build/motor_control.out
시뮬레이션 수렴 실패
Weibull 모수 추정 수렴 안 됨
증상: ConvergenceWarning: Maximum likelihood estimation did not converge
원인 및 해결:
| 원인 | 해결 |
|---|---|
| 데이터 포인트 부족 (n < 5) | 시험 데이터 추가 확보 |
| 모든 데이터가 중도 절단 (고장 없음) | 최소 1개 이상의 고장 데이터 필요 |
| 초기값 부적절 | --initial-beta 옵션으로 초기 추정값 지정 |
| 데이터에 이상치 포함 | 전처리에서 이상치 제거 후 재실행 |
# 초기값 지정하여 재시도
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--initial-beta 2.0 \
--initial-eta 5000
순위회귀(RR) 방법으로 전환
MLE가 수렴하지 않으면 순위회귀 방법을 사용합니다:
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--estimation-method rr
수치 오버플로우
증상: RuntimeWarning: overflow encountered in exp
대규모 시간값(수만 시간)에서 발생할 수 있습니다. 시간 단위를 변환하여 수치 안정성을 확보합니다:
# 시간 단위를 kh (천 시간)로 변환
python -m simulation.runner \
--input data/test_001.csv \
--analysis weibull \
--time-scale 1000
Python 의존성 문제
venv 생성 실패
증상: Error: Command 'python3 -m venv venv' returned non-zero exit status 1
# python3-venv 패키지 설치 (Ubuntu/WSL)
sudo apt update
sudo apt install python3.12-venv
# venv 생성
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
패키지 설치 실패
증상: pip install 중 컴파일 에러 (numpy, scipy)
# 빌드 도구 설치
sudo apt install build-essential python3-dev gfortran
# pip 업그레이드 후 재시도
pip install --upgrade pip setuptools wheel
pip install -r requirements.txt
reliability 패키지 호환성
reliability 패키지는 특정 numpy/scipy 버전 조합에서만 동작합니다.
# 버전 확인
pip show reliability numpy scipy
# 호환 버전 강제 설치 (requirements.txt 기준)
pip install -r requirements.txt --force-reinstall
matplotlib 그래프 표시 안 됨
증상: WSL에서 plt.show() 호출 시 창이 뜨지 않음
WSL은 기본적으로 GUI를 지원하지 않습니다. 두 가지 해결 방법이 있습니다:
# 방법 1: 파일로 저장 (권장)
import matplotlib
matplotlib.use('Agg') # GUI 백엔드 비활성화
import matplotlib.pyplot as plt
plt.savefig('results/plot.png', dpi=150, bbox_inches='tight')
# 방법 2: WSLg 활성화 (Windows 11)
# Windows 설정 → Windows 기능에서 WSL 업데이트 확인
wsl --update
펌웨어 플래시 실패
CCS 빌드 오류
증상: undefined reference to 'FOC_run' 등 링커 에러
| 원인 | 해결 |
|---|---|
| C2000Ware 경로 미설정 | CCS 프로젝트 속성 → Include Paths에 C2000Ware 경로 추가 |
| 소스 파일 누락 | firmware/src/algorithm/, firmware/src/hal/ 전체 포함 확인 |
| 링커 스크립트 불일치 | .cmd 파일이 TMS320F2838x용인지 확인 |
| 컴파일러 버전 | CCS에서 C2000 컴파일러 22.x 이상 사용 |
DSP 보드 무응답
증상: 플래시 후 보드가 동작하지 않음 (UART 출력 없음, LED 점멸 없음)
확인 절차:
- 전원 공급 확인 (멀티미터로 3.3V, 5V 레일 측정)
- JTAG 연결 후 CCS에서 halt → 현재 PC 위치 확인
- 무한 루프나 HardFault에 갇혀 있는지 확인
- 워치독 타이머 설정 확인 (초기화 코드에서 비활성화 여부)
- 부트 모드 핀(GPIO72/73) 설정 확인
# CCS 디버거 콘솔에서
# PC 위치 확인 → 어디서 멈췄는지 파악
# 메모리 덤프로 스택 트레이스 확인
자동화 파이프라인에서 플래시 실패
증상: automation/pipeline.py --mode flash 실행 시 타임아웃
# UniFlash CLI 직접 실행으로 원인 특정
dslite.sh --config=config.ccxml --flash firmware/build/motor_control.out 2>&1
# config.ccxml 경로 확인
ls firmware/*.ccxml
# CCS 설치 경로 확인
which dslite.sh || echo "UniFlash CLI가 PATH에 없음"
config.yaml의 jtag.uniflash_path와 jtag.ccs_path가 실제 설치 경로와 일치하는지 확인합니다.