EMC(Electromagnetic Compatibility) — 전자기 환경에서 오작동하지 않고, 남에게 방해도 주지 않는 능력. ESD(Electrostatic Discharge) — 정전기 방전.
EMC의 두 측면
- EMI (Emission) — : 내가 노이즈를 얼마나 내보내나 → 규제 대상
- EMS (Immunity) — : 남의 노이즈를 얼마나 견디나 → 제품 신뢰성
둘 다 인증에서 시험한다. CE, FCC, KC 마크가 그 결과다.
왜 소프트웨어 엔지니어가 알아야 하나
- EMI 방출량은 회로만의 문제가 아니다
- 소프트웨어가 만드는 신호 파형이 직접 영향을 준다
소프트웨어로 개선할 수 있는 것들
| 항목 | 방법 |
|---|---|
| 슬루 레이트 | GPIO Speed를 필요한 만큼만. 가파른 에지 = 넓은 스펙트럼 |
| 스프레드 스펙트럼 | 클럭 주파수를 미세하게 흔들어 피크를 분산(SSCG) |
| 불필요한 토글 제거 | 안 쓰는 클럭·주변장치 끄기 |
| 전송 타이밍 분산 | 여러 통신이 동시에 일어나지 않게 |
| PWM 주파수 선택 | 문제되는 대역을 피한다 |
슬루 레이트 제어가 가장 손쉽고 효과적이다.
LED 구동에 GPIO_SPEED_FREQ_VERY_HIGH를 쓸 이유가 없다.
ESD — 사람이 만드는 수천 볼트
- 카펫 위를 걷고 문고리를 잡으면 → 수 kV
- 사람이 느끼는 최소 전압 — → 약 3kV
- 반도체가 파괴되는 전압 — → 수십~수백 V ★
★ 사람이 느끼지도 못하는 정전기가 칩을 죽인다. 느꼈다면 이미 훨씬 큰 방전이다.
두 가지 피해 즉시 파괴(catastrophic) : 바로 고장. 발견하기 쉽다
- 잠재 손상(latent) — : 당장은 동작하지만 수명이 줄어든다 ← 더 무섭다
잠재 손상은 현장에서 몇 달 뒤 고장으로 나타나 원인 추적이 거의 불가능하다.
ESD 대책 — 하드웨어
- ① TVS 다이오드 — 외부와 연결되는 모든 신호선에
- ② ESD 보호 IC — — USB, HDMI 등 고속 신호용
- ③ 접지 설계 — — 방전 전류가 안전하게 흐를 경로
- ④ 기구 설계 — — 커넥터 주변 갭, 도전성 개스킷
- ⑤ 케이스 접지 — — 금속 케이스는 반드시 접지
"외부로 나가는 모든 신호에 보호 소자" 가 원칙이다. 커넥터, 버튼, 케이블이 모두 대상이다.
ESD 대책 — 소프트웨어
하드웨어가 막지 못한 것을 소프트웨어가 복구한다.
- ① 워치독 — 폭주 시 자동 복구 ← 가장 중요
- ② 주기적 레지스터 재설정
- — ESD로 주변장치 설정 레지스터가 변조될 수 있다
- 중요한 설정을 주기적으로 다시 쓴다
- ③ 데이터 무결성 — 중요 변수를 이중화하고 CRC 검증
- ④ 통신 재시도 — 일시적 오류를 흡수
- ⑤ 상태 머신 검증 — 정의되지 않은 상태면 안전 상태로 복귀
- ⑥ 플래시 CRC 검증 — 부팅 시 코드 무결성 확인
②가 실무에서 효과적이다. ESD가 GPIO 설정 레지스터를 바꿔 출력이 입력으로 변해 버리는 사고가 실제로 있다.
// 1초마다 중요 레지스터 재설정
void periodic_reinit(void) {
GPIOA->MODER = SAVED_MODER;
GPIOA->OTYPER = SAVED_OTYPER;
// …
}
시험 규격
IEC 61000-4-2 ESD (접촉 ±4kV, 공중 ±8kV 등)
IEC 61000-4-3 방사 내성 (전자파를 쬔다)
IEC 61000-4-4 EFT/버스트 (빠른 과도 현상)
IEC 61000-4-5 서지 (낙뢰 등)
IEC 61000-4-6 전도 내성
CISPR 22/32 방출 한계
시험 결과 판정 기준 A등급: 시험 중에도 정상 동작 B등급: 일시적 저하, 자동 복구 C등급: 사용자 개입으로 복구 (재부팅 등) D등급: 복구 불가 (불합격)
B등급까지가 보통 목표다. 워치독으로 자동 복구되면 B등급이 된다.
개발 단계에서 확인
- ① 정전기 건(ESD gun)으로 자체 시험 — 인증 전에 미리
- ② 근접 자계 프로브로 노이즈 소스 탐색
- ③ 스펙트럼 분석기로 EMI 피크 확인
- 피크 주파수가 클럭의 배수면 그 클럭이 원인
인증 시험은 비싸고 재시험도 비싸다. 설계 단계에서 대비하지 않으면 일정이 크게 밀린다.
소프트웨어 엔지니어의 실전 체크리스트
✅ 워치독을 켜고 올바르게 구현했는가 ✅ GPIO 슬루 레이트를 필요한 만큼만 설정했는가 ✅ 안 쓰는 주변장치의 클럭을 껐는가 ✅ 통신에 CRC와 재시도가 있는가 ✅ 중요 설정을 주기적으로 검증·복원하는가 ✅ 정의되지 않은 상태에서 안전 상태로 가는가 ✅ 리셋 원인을 기록하는가 (EMC 시험 중 리셋을 추적하려면 필수)