스마트폰 메인보드 속 I2C 통신, 20년차가 ACK 신호 하나로 불량을 잡아낸 이야기

검사 지그 라인에서 신호가 하나도 안 잡히는데 오실로스코프 파형은 멀쩡하게 나온 적, 저는 꽤 여러 번 겪었습니다. 범인은 대부분 같았습니다. IC는 살아있는데 응답(ACK)을 안 주는 것. 스마트폰 메인보드 안에서 온도센서, 홀센서, 터치IC, 전원IC까지 거의 다 이 방식으로 대화를 합니다. 그게 바로 I2C 통신입니다.

스마트폰 메인보드에 숨어있는 I2C 통신의 정체

저희 회사 주 거래처가 LCD·OLED 패널 대기업이랑 스마트폰 완제품 대기업입니다. 메인보드 하나 뜯어보면 자이로스코프, 홀센서, 근접센서, 터치IC, 전원IC까지 손톱만한 칩들이 빼곡한데, 이 칩들 대부분이 AP(애플리케이션 프로세서)랑 데이터를 주고받을 때 I2C(Inter-Integrated Circuit) 방식을 씁니다.

I2C는 필립스반도체(현 NXP)가 만든 통신 규격으로, 두 가닥의 선만으로 수백 종류의 IC와 통신이 가능하다는 게 최대 강점입니다. 위키백과 자료에 따르면 하나의 I2C 버스에 최대 112개 노드까지 연결이 가능하다고 되어 있는데, 실제 현업에서는 이 정도까지 붙이는 경우는 거의 없고 보통 5~10개 안팎의 IC가 한 버스를 공유합니다.

핀 개수 줄이는 게 왜 중요하냐면, 요즘 스마트폰은 두께 싸움입니다. UART처럼 IC마다 선을 따로 빼면 기판 면적이 남아나질 않는데, I2C는 SDA·SCL 두 선에 주소만 다르게 물리면 되니까 설계자 입장에서 이만한 게 없습니다.

요약 — I2C는 SDA(데이터)·SCL(클럭) 2선으로 다수의 IC를 제어하는 통신 방식이며, 스마트폰 센서·전원IC 대부분이 이 방식을 쓴다.

I2C 통신의 심장, SDA와 SCL 두 가닥의 원리

[I2C 통신의 SDA, SCL 펄스 파형]

I2C는 오픈드레인 구조로 동작합니다. 여기서 오픈드레인이란 IC가 신호선을 능동적으로 High로 밀어 올리지는 못하고, Low로 끌어내리는 것만 할 수 있는 구조를 말합니다. 그래서 반드시 풀업저항이 필요한데, 풀업저항이란 신호선을 평소에 High 상태로 붙잡아두는 저항으로, 이게 없으면 아무도 선을 안 건드릴 때 신호가 붕 뜬 상태가 되어버립니다.

START 조건은 SCL이 High인 동안 SDA가 High에서 Low로 떨어지는 순간이고, STOP 조건은 그 반대입니다. 이 START·STOP 구간을 빼면 나머지 데이터 비트는 전부 SCL이 Low일 때만 SDA가 바뀌고, SCL이 High인 동안에는 SDA 값을 읽습니다. 이 규칙이 깨지면 수신 측에서 START로 오인해서 통신 자체가 붕 뜹니다.

풀업저항 값도 은근히 실무에서 골치 아픈 부분입니다. 저항이 너무 크면 신호가 천천히 올라와서 High 인식 타이밍을 놓치고, 너무 작으면 IC가 Low로 끌어내릴 때 전류 부담이 커집니다.

통신 모드 최대 속도 현업 체감
Standard Mode 100kbps 구형 센서, 검사 지그 기본값
Fast Mode 400kbps PMIC·터치IC 대부분 이 모드
Fast Mode Plus 1Mbps 최신 AP 내장 I2C 컨트롤러
High Speed Mode 3.4Mbps 실무에서 거의 안 씀

속도 규격 참고: i2c-bus.org

요약 — SDA·SCL은 오픈드레인 구조라 풀업저항이 필수이며, 저항값 선정이 파형 품질을 좌우한다.

ACK와 NACK, 슬레이브 주소로 결선 문제 잡아내기

제가 20년 넘게 이 일 하면서 가장 많이 써먹은 게 바로 이 ACK 테스트입니다. ACK란 데이터를 받은 쪽(슬레이브)이 "나 잘 받았다"는 뜻으로 SDA를 한 비트 동안 Low로 끌어내리는 응답 신호이고, 반대로 응답이 없어서 High로 남아있으면 NACK, 즉 수신 실패를 뜻합니다.

검사 지그를 설계할 때 저는 프로그램 코딩보다 먼저 이 ACK부터 확인합니다. 마스터가 START 조건 보내고 슬레이브 주소(7bit) + R/W 비트 던졌을 때 해당 주소를 가진 IC가 ACK로 응답하면, 최소한 그 IC까지 가는 배선과 전원, 풀업저항은 살아있다는 뜻이거든요. 코드 한 줄 안 짜도 하드웨어 결선 상태를 먼저 검증할 수 있는 셈입니다.

한 번은 이런 일이 있었습니다. OLED 모듈용 검사 지그를 새로 붙이는데 터치IC 쪽에서 계속 NACK만 떴습니다. 배선도 다시 확인하고, 풀업저항도 멀쩡하고, 전원도 정상인데 왜 안 되나 반나절을 붙잡고 있었죠.

결국 오실로스코프로 주소 프레임을 직접 캡처해서 봤더니, 제가 코드에 넣은 주소값이 데이터시트 표기랑 1비트씩 어긋나 있었습니다. 벤더 데이터시트에는 R/W 비트까지 포함한 8bit 표기로 주소가 적혀 있었는데, 저는 이걸 그대로 7bit 주소인 줄 알고 코드에 박아 넣었던 겁니다. 실제로 이 8bit냐 7bit냐 문제는 현업 기술 커뮤니티에서도 NACK 발생 원인 1순위로 꼽힐 만큼 흔한 실수라고 합니다.

주소를 1비트 시프트해서 다시 넣으니 그 자리에서 바로 ACK가 떨어지더군요. 그날 이후로 저는 신입들한테 항상 이야기합니다. NACK 뜨면 배선부터 의심하지 말고 데이터시트 주소 표기 방식부터 다시 읽어보라고요. 이게 말로는 별거 아닌데, 막상 눈앞에서 반나절을 날려보면 진짜 뼈에 새겨지는 교훈입니다.

요약 — ACK는 하드웨어 결선 검증의 1차 지표. NACK가 뜨면 배선보다 슬레이브 주소의 7bit/8bit 표기 방식부터 확인하자.

PMIC 전원 제어와 I2C 통신이 만나는 지점

디지털 기기에서 가장 중요한 건 결국 전원입니다. 아무리 좋은 AP를 달아도 전원이 흔들리면 그냥 벽돌입니다. 스마트폰에는 이 전원을 세밀하게 관리하는 PMIC(Power Management IC, 전원관리반도체)가 반드시 들어가는데, 이 PMIC도 I2C로 AP와 통신하면서 출력 전압, 전류 제한, 배터리 충전 상태 같은 값을 실시간으로 주고받습니다.

검사 지그 쪽에서 PMIC를 볼 때는 온도센서나 터치IC보다 신경을 더 씁니다. 이유는 간단합니다. PMIC는 I2C 버스에 여러 IC가 같이 물려있을 때 가장 먼저 반응해야 하는 IC이기도 하고, 여기서 통신 오류가 나면 아예 부팅 자체가 안 되는 경우도 봤습니다.

실무와 이론이 가장 크게 갈리는 지점도 여기입니다. 이론상으로는 풀업저항 값만 데이터시트대로 맞추면 끝이지만, 실제 양산 지그에서는 케이블 길이가 길어지면서 기생 커패시턴스가 붙고, 이게 신호 상승 시간(rise time)을 늦춰서 규격 시간 안에 High 레벨을 못 만드는 경우가 있습니다.

요약 — PMIC도 I2C로 AP와 통신하며, 검사 지그의 케이블 길이·기생 커패시턴스가 실제 파형 품질에 큰 영향을 준다.

풀업저항 값 하나로 갈리는 신호 파형 이야기

이 숫자 하나 잘못 잡으면 라인 전체가 멈춥니다. 저는 보통 3.3V 시스템 기준으로 4.7kΩ을 기본값으로 잡고 시작합니다.

다만 이건 어디까지나 출발점일 뿐이고, 실제로는 버스에 물린 IC 개수, 케이블 길이, 통신 속도(Fast Mode 400kbps인지 Standard Mode 100kbps인지)에 따라 값을 다시 계산해야 합니다. 저항이 작을수록 신호 상승은 빨라지지만 IC가 Low로 끌어내릴 때 소비 전류가 늘어나고, 저항이 클수록 전류는 줄어들지만 신호가 느리게 올라와서 고속 통신에서 타이밍을 놓칩니다.

또 하나, 클럭 스트레칭이라는 것도 현장에서 꼭 알아야 합니다. 이건 슬레이브 IC가 처리 속도가 느려서 마스터한테 "잠깐만 기다려줘"라고 SCL 라인을 Low로 붙잡아두는 기능인데, 저가형 MCU나 오래된 검사 지그 컨트롤러는 이 기능을 지원 안 하는 경우가 있어서 특정 IC랑 궁합이 안 맞을 때가 종종 있습니다.

요약 — 풀업저항 값은 버스에 물린 IC 개수·통신 속도·케이블 길이를 함께 고려해서 재계산해야 하며, 클럭 스트레칭 지원 여부도 확인 대상이다.

I2C 통신 관련 자주 묻는 질문 (Q&A)

Q1. I2C랑 SPI랑 뭐가 다른가요?
I2C는 2선으로 여러 IC를 물릴 수 있는 대신 속도가 느리고, SPI는 선이 더 필요한 대신 속도가 훨씬 빠릅니다. 저는 센서류처럼 데이터량 적고 IC 여러 개 물릴 때는 I2C, 디스플레이처럼 데이터량 많을 때는 SPI를 씁니다.

Q2. NACK가 뜨는데 배선도 멀쩡하면 뭘 봐야 하나요?
제 경험상 슬레이브 주소 표기(7bit/8bit)를 가장 먼저 의심하시는 걸 추천합니다. 그다음이 풀업저항 값, 그다음이 전원 시퀀스입니다.

Q3. 풀업저항 없이도 I2C가 동작하나요?
짧은 거리에서는 IC 내부 풀업만으로 어찌어찌 동작하는 경우도 봤지만, 양산 라인에서는 절대 권장하지 않습니다. 신호 품질이 케이블 상태에 따라 들쭉날쭉해서 나중에 재현 안 되는 불량으로 고생합니다.

Q4. 같은 주소를 가진 IC 두 개를 한 버스에 물려도 되나요?
안 됩니다. 둘 다 같은 주소에 반응해버려서 데이터가 충돌합니다. 실제로 같은 벤더 센서 두 개를 붙였다가 주소 겹쳐서 하루 종일 삽질한 적이 있습니다.

Q5. 오실로스코프 없이 ACK/NACK를 확인할 방법이 있나요?
간단한 확인은 로직 아날라이저나 MCU의 I2C 스캔 함수로도 가능하지만, 파형 자체의 상승 시간이나 노이즈까지 보려면 결국 오실로스코프가 필요합니다.

마무리 — 오늘부터 챙겨볼 것 3가지

1. NACK가 뜨면 배선보다 슬레이브 주소 표기 방식(7bit/8bit)부터 확인하기

2. 풀업저항 값은 데이터시트 기본값이 아니라 실제 버스 구성 기준으로 재계산하기

3. 검사 지그처럼 케이블이 긴 환경에서는 반드시 오실로스코프로 실제 파형 확인하기

I2C는 겉보기엔 단순한 2선 통신이지만, 그 단순함 속에 결선 문제부터 전원 문제까지 다 잡아낼 수 있는 정보가 숨어 있습니다. ACK 하나 뜨고 안 뜨고를 가지고 하드웨어 상태를 먼저 읽어내는 습관, 저는 이게 이 바닥에서 오래 버틴 이유 중 하나라고 생각합니다.

본 글은 필자의 실무 경험과 공개된 기술 자료를 바탕으로 작성한 참고용 정보이며, 특정 제품이나 회로 설계에 대한 최종 판단은 반드시 해당 IC의 정식 데이터시트를 확인하신 후 진행하시기 바랍니다.