I2C 풀업 저항과 버스 속도를 좌우하는 신호 무결성

profile_image
작성자 파형읽는하린
댓글 0건 조회 7회

센서는 정상이고 코드도 예제와 같은데, 케이블을 조금 늘리거나 보드를 한 개 추가한 순간 I2C 통신이 불안정해지는 경우가 있습니다. 멀티미터로 확인하면 전압도 정상인데 간헐적으로 NACK가 발생하고, 센서 값이 멈추거나 엉뚱한 데이터가 섞입니다. 이런 문제는 흔히 소프트웨어 오류로 오해하지만 실제 원인은 풀업 저항, 배선 커패시턴스, 버스 속도가 함께 만드는 신호 무결성에 있을 때가 많습니다.

아이투씨랩은 임베디드 하드웨어 디버깅을 맡아 온 신호 분석 엔지니어 ‘파형읽는하린’에게 실무자가 자주 묻는 질문을 전달했습니다. 이번 인터뷰는 저항값 하나를 암기하는 방식이 아니라, 왜 파형이 느려지고 어떤 순서로 측정해야 하는지를 Q&A 형식으로 풀어갑니다.

I2C 풀업 저항이 통신 품질을 바꾸는 이유

Q. 디지털 통신인데 저항값이 그렇게 중요한가요?

A. I2C의 SDA와 SCL은 일반적인 푸시풀 출력과 달리 오픈드레인 방식으로 동작합니다. 장치는 신호선을 LOW로 끌어내릴 수 있지만 HIGH를 능동적으로 밀어 올리지는 않습니다. 장치가 선을 놓으면 외부 풀업 저항이 전원 쪽으로 신호를 끌어올리며, 이때 배선과 입력 핀이 가진 커패시턴스가 충전됩니다. 따라서 HIGH로 올라가는 속도는 풀업 저항과 전체 버스 커패시턴스의 영향을 직접 받습니다.

풀업 저항이 너무 크면 상승 시간이 길어져 수신기가 HIGH를 제때 인식하지 못할 수 있습니다. 반대로 너무 작으면 LOW 상태에서 각 장치가 더 큰 전류를 흘려야 하므로 출력 핀의 LOW 전압이 높아지고 소비전력과 부품 스트레스가 늘어납니다. 작을수록 무조건 강하고 좋다는 접근도, 흔히 보이는 값을 그대로 복사하는 접근도 안전하지 않습니다.

예를 들어 센서 모듈 세 개를 연결했는데 각 모듈에 4.7kΩ 풀업이 실장돼 있다면 병렬 합성값은 약 1.57kΩ이 됩니다. 개발자는 저항을 추가하지 않았다고 생각해도 실제 버스에는 상당히 강한 풀업이 걸린 셈입니다. 모듈 회로도의 풀업 유무를 확인하지 않으면 문제의 출발점을 놓치기 쉽습니다.

  • 저항이 지나치게 큰 경우: 상승 에지가 완만해지고 고속 통신에서 HIGH 판정 여유가 줄어듭니다.
  • 저항이 지나치게 작은 경우: 장치가 LOW로 당길 때 싱크 전류가 증가하고 VOL 규격을 벗어날 수 있습니다.
  • 모듈이 여러 개인 경우: 보드별 풀업 저항이 병렬로 연결되어 예상보다 작은 합성 저항이 만들어집니다.
  • 전압이 섞인 경우: 풀업 전압이 어느 전원 레일에 연결됐는지 먼저 확인해야 합니다.
“I2C 풀업은 통신선에 달린 단순한 기본 부품이 아닙니다. 버스의 상승 시간과 LOW 전류를 동시에 결정하는 설계 변수입니다.”

버스 속도와 배선 길이를 함께 판단하는 측정법

Q. 배선은 몇 센티미터까지 안전하다고 말할 수 있나요?

A. 길이만으로 한계를 정하기는 어렵습니다. 같은 30cm라도 점퍼선이 느슨하게 펼쳐진 구성, 리본 케이블에서 신호와 접지를 번갈아 배치한 구성, 커넥터를 여러 번 통과하는 구성은 서로 다른 커패시턴스와 노이즈 환경을 가집니다. 센서 개수와 입력 핀 용량, 브레드보드 접점, 레벨 시프터까지 모두 버스의 전기적 부하에 포함됩니다.

현장에서는 오실로스코프로 SDA와 SCL의 상승 시간을 확인하는 것이 가장 확실합니다. 통상 파형이 LOW에서 HIGH로 올라갈 때 기준 구간을 잡아 시간을 재며, 사용 중인 I2C 모드와 부품 데이터시트가 허용하는 상승 시간 안에 들어오는지 비교합니다. 논리분석기는 주소와 ACK를 찾는 데 뛰어나지만, 완만한 에지나 링잉의 크기처럼 아날로그 상태를 그대로 보여주지는 못합니다.

처음부터 고가 장비가 필요한 것은 아닙니다. 통신 속도를 낮췄을 때 오류가 사라지는지, 배선을 줄였을 때 달라지는지, 풀업 합성값을 측정했을 때 예상과 맞는지를 순서대로 살피면 원인을 상당히 좁힐 수 있습니다. 다만 전원을 끈 뒤 저항을 측정해야 하며, 회로 안의 다른 경로가 측정값에 영향을 줄 수 있다는 점은 감안해야 합니다.

  1. 전원을 끄고 SDA·SCL과 전원 사이의 저항을 측정해 실제 합성 풀업값을 확인합니다.
  2. 버스 속도를 한 단계 낮춰 오류 빈도가 눈에 띄게 변하는지 기록합니다.
  3. 센서와 케이블을 하나씩 제외해 커패시턴스가 큰 구간을 찾습니다.
  4. 오실로스코프 프로브의 접지 리드를 짧게 연결하고 SDA와 SCL 상승 에지를 관찰합니다.
  5. 논리분석기로 NACK, 반복 시작 조건, 멈춘 클록 위치를 함께 확인합니다.

Q. 속도를 낮추면 문제가 해결된 것으로 봐도 될까요?

A. 속도 저하는 좋은 진단 수단이지만 항상 근본 해결은 아닙니다. 400kHz에서 실패하고 100kHz에서 안정된다면 상승 시간이 부족하거나 신호 왜곡이 있다는 강한 단서가 됩니다. 그러나 느린 속도에서도 전원 노이즈, 접지 바운스, 잘못된 주소 처리, 센서의 준비 시간 때문에 오류가 날 수 있으므로 파형과 프로토콜 로그를 함께 봐야 합니다.

  • 속도 저하 후 안정: 풀업값, 배선 부하, 레벨 시프터의 동작을 우선 점검합니다.
  • 속도와 무관한 주기적 실패: 센서 변환 시간과 펌웨어 상태 전이를 확인합니다.
  • 특정 장치 추가 후 실패: 풀업 중복, 주소 충돌, 전압 호환성을 의심합니다.
  • 모터 작동 때만 실패: 접지 경로, 전원 디커플링, 케이블 결합 노이즈를 살펴봅니다.

회로 조건에 맞는 풀업 저항 선정 과정

Q. 실무에서는 저항값을 어떻게 계산합니까?

A. 하나의 마법 같은 저항값을 고르기보다 가능한 범위를 구합니다. 저항의 하한은 장치가 LOW로 끌어내릴 수 있는 전류와 허용 LOW 전압으로 판단하고, 상한은 목표 상승 시간과 버스 커패시턴스로 판단합니다. 그 범위 안에서 표준 저항값을 선택한 뒤 실제 조립 상태의 파형으로 검증하는 방식이 안전합니다.

개념적으로 하한은 ‘풀업 전압에서 허용 LOW 전압을 뺀 값’을 장치가 감당할 수 있는 싱크 전류로 나누어 접근할 수 있습니다. 상한은 RC 충전 특성과 허용 상승 시간을 이용해 계산합니다. 여기서 필요한 정확한 VOL, 싱크 전류, 입력 임계값, 상승 시간 조건은 마이크로컨트롤러와 센서 데이터시트를 우선해야 합니다. 인터넷 계산기의 기본값을 그대로 적용하면 실제 부품 조건과 어긋날 수 있습니다.

초기 시제품이라면 3.3V의 짧은 온보드 배선에서 4.7kΩ 전후로 시작하는 사례가 많지만, 이것은 보편적 정답이 아닙니다. 버스 커패시턴스가 크거나 속도가 높으면 더 낮은 값이 필요할 수 있고, 여러 모듈의 저항이 병렬 연결됐다면 오히려 일부 풀업을 제거해야 합니다. 최종 판단 기준은 관습적인 숫자가 아니라 계산, 부품 규격, 측정 파형입니다.

관찰된 상태가능성이 큰 원인우선 조치
HIGH 상승이 완만함풀업이 크거나 버스 용량이 큼합성 저항과 배선 부하 측정
LOW 전압이 충분히 내려가지 않음풀업이 너무 강하거나 장치 싱크 능력 부족병렬 풀업 제거와 VOL 확인
에지에 큰 링잉이 보임긴 배선, 프로빙 오류, 임피던스 불연속프로브 접지 단축과 배선 재배치
장치 추가 때만 불안정함풀업 중복 또는 커패시턴스 증가모듈 회로도와 실장 저항 확인

Q. 버스 커패시턴스를 직접 모르면 계산이 무의미하지 않나요?

A. 정확한 값을 모른다고 계산을 포기할 필요는 없습니다. 알려진 풀업 저항과 오실로스코프로 측정한 상승 시간을 이용하면 전체 부하를 대략 역산할 수 있습니다. 절대값에 집착하기보다 센서를 추가하기 전후의 상승 시간이 얼마나 달라졌는지 비교하면 설계 여유를 판단하는 데 유용합니다.

  • 보드 회로도에서 MCU 내부 풀업과 모듈 외부 풀업을 모두 찾습니다.
  • 커넥터, 케이블, 레벨 시프터를 실제 제품 구성과 동일하게 연결합니다.
  • SDA와 SCL은 부하가 다를 수 있으므로 각각 측정합니다.
  • 상온에서만 끝내지 말고 예정된 전원 전압과 온도 범위도 고려합니다.
  • 저항 변경 전후의 상승 시간, LOW 전압, 오류 횟수를 표로 남깁니다.
“계산값은 저항을 고르는 출발점이고, 파형은 그 선택이 실제 조립품에서도 유효한지 알려주는 증거입니다.”

아두이노 센서 연결에서 반복되는 숨은 변수

Q. 예제 코드는 되는데 프로젝트에 합치면 왜 실패하나요?

A. 단일 센서 예제에서는 배선이 짧고 전원 부하가 작으며 다른 라이브러리의 간섭도 거의 없습니다. 완성 프로젝트에는 디스플레이, 저장장치, 릴레이, 무선 모듈이 함께 붙으면서 전원 노이즈와 처리 지연이 늘어납니다. 아두이노의 개념과 활용 배경은 네이버 지식백과의 아두이노 설명에서도 확인할 수 있지만, 실제 I2C 안정성은 보드 이름보다 구체적인 회로 조건에 좌우됩니다.

특히 서로 다른 제조사의 센서 모듈을 조합하면 각 보드에 실장된 풀업 저항과 연결 전압이 제각각일 수 있습니다. 5V 아두이노 보드와 3.3V 전용 센서를 연결하면서 SDA·SCL이 어느 전압으로 풀업되는지 확인하지 않으면 센서 입력의 절대 최대 정격을 넘길 위험도 있습니다. 통신이 당장 된다는 사실은 전기적으로 안전하다는 증거가 아닙니다.

또 하나의 변수는 소프트웨어 복구 방식입니다. 센서가 리셋되거나 전송 도중 MCU가 재시작되면 슬레이브가 SDA를 잡은 채 남을 수 있습니다. 드라이버 초기화만 반복해서는 버스가 풀리지 않을 수 있으므로, 제품 요구사항에 따라 클록 펄스를 이용한 버스 복구와 장치 전원 재인가 회로를 검토해야 합니다. 드라이버가 하드웨어 상태와 응용 코드를 연결한다는 관점은 디바이스 드라이버 통합개발환경의 개요를 참고하면 이해하기 쉽습니다.

  • 모듈 뒷면 저항 확인: ‘472’ 표기는 흔히 4.7kΩ을 뜻하지만 회로도나 실측으로 확정합니다.
  • 내부 풀업 점검: MCU 설정과 라이브러리가 내부 풀업을 활성화하는지 확인합니다.
  • 전압 레일 추적: SDA·SCL 풀업이 3.3V와 5V 중 어디에 연결됐는지 찾습니다.
  • 디커플링 배치: 센서 전원 핀 가까이에 데이터시트 권장 커패시터를 둡니다.
  • 오류 계수 추가: NACK, 타임아웃, 재초기화 횟수를 시리얼 로그에 남깁니다.

Q. 펌웨어에서는 어떤 방어 장치가 필요합니까?

A. 무한 대기는 피해야 합니다. 통신 함수에 타임아웃을 두고, 실패 시 즉시 전체 시스템을 재부팅하기보다 재시도 횟수와 간격을 제한하는 편이 좋습니다. 같은 오류가 연속될 때만 버스를 재초기화하고, 그래도 회복되지 않으면 센서 전원을 제어하거나 상위 시스템에 장애 상태를 보고하도록 계층을 나눕니다.

센서 데이터의 유효성도 별도로 검사해야 합니다. 전송 성공과 측정값의 타당성은 같은 문제가 아닙니다. CRC를 제공하는 센서라면 검증 기능을 사용하고, 제공하지 않는다면 물리적으로 불가능한 값이나 급격한 변화율을 필터링하되 오류를 조용히 숨기지는 않아야 합니다. 사용자는 화면에 마지막 정상값이 계속 표시되는 상황을 정상 동작으로 착각할 수 있습니다.

  1. 각 거래에 명확한 타임아웃을 둡니다.
  2. 오류 원인을 NACK, 타임아웃, 데이터 검증 실패로 구분합니다.
  3. 짧은 재시도 뒤 버스 복구, 드라이버 재초기화 순으로 대응합니다.
  4. 마지막 정상 측정 시각과 연속 실패 횟수를 함께 저장합니다.
  5. 현장 로그에는 버스 속도와 펌웨어 버전도 기록합니다.

I2C가 적합하지 않은 배선 환경과 설계의 경계

Q. 풀업과 속도를 조절하면 긴 케이블도 사용할 수 있습니까?

A. 어느 정도 개선할 수는 있지만 I2C는 본래 보드 내부나 가까운 장치 사이의 통신에 잘 맞는 구조입니다. 수 미터 케이블, 큰 전위차가 생기는 분리 전원, 인버터나 모터가 만드는 강한 전자기 잡음 환경에서는 저항값 조정만으로 신뢰성을 보장하기 어렵습니다. 이런 조건이라면 차동 신호를 사용하는 RS-485, CAN 또는 장거리용 I2C 버퍼와 익스텐더를 검토해야 합니다.

버퍼를 추가한다고 문제가 자동으로 사라지지도 않습니다. 방향 감지 방식의 레벨 시프터와 버스 버퍼는 상승 시간, 허용 커패시턴스, 클록 스트레칭 지원, 장치 간 LOW 임계값에 새로운 조건을 더합니다. 특히 단순 MOSFET 레벨 시프터는 저렴하고 편리하지만 높은 속도나 큰 부하에서 에지를 더 느리게 만들 수 있으므로 부품 데이터시트의 동작 범위를 확인해야 합니다.

절연이 필요한 산업 환경에서는 옵토커플러나 디지털 절연기를 떠올릴 수 있지만, I2C의 양방향 오픈드레인 특성 때문에 일반 단방향 절연 부품을 그대로 끼우기 어렵습니다. 자동차·산업용 부품이 소형화되고 높은 절연 성능을 제공한다는 사례는 자동차용 옵토커플러 관련 기사에서도 볼 수 있으나, 개별 부품의 존재와 I2C 회로에 대한 직접 적합성은 구분해야 합니다.

  • 보드 내부의 짧은 연결: 풀업 계산과 파형 검증으로 대응하기 비교적 쉽습니다.
  • 장치 간 케이블 연결: 접지 차이, 커넥터 접촉, ESD 보호까지 설계 범위에 넣습니다.
  • 강한 노이즈 환경: 배선 개선만으로 부족하면 차동 통신 방식을 우선 검토합니다.
  • 전기적 절연 필요: I2C 전용 절연기나 검증된 브리지 구성을 선택합니다.
  • 다수 장치와 큰 부하: 버스 분할, 버퍼, 멀티플렉서가 만드는 추가 지연을 계산합니다.

Q. 이번 인터뷰의 방법으로도 찾기 어려운 예외는 무엇인가요?

A. 모든 간헐 오류가 신호 무결성 문제인 것은 아닙니다. 같은 주소를 가진 장치의 충돌, 클록 스트레칭을 지원하지 않는 컨트롤러, 반복 시작 조건을 잘못 처리하는 드라이버, 센서 자체의 실리콘 결함도 비슷한 증상을 만듭니다. 멀티마스터 환경에서는 중재와 버스 소유권 문제까지 추가되므로 단일 마스터 기준의 진단 절차만으로는 부족합니다.

또한 저온·고온, 배터리 방전, 양산 편차처럼 책상 위 시제품에서 재현되지 않는 조건이 있습니다. 프로토타입 한 대의 깨끗한 파형만 보고 확정하기보다 가장 긴 케이블, 가장 많은 센서, 전원 최저점과 노이즈원이 동시에 작동하는 조건을 시험해야 합니다. 그 경계를 넘어선 환경에서는 I2C를 끝까지 고집하는 것보다 통신 방식을 바꾸는 결정이 더 경제적일 수 있습니다.

  1. 부품의 최신 데이터시트와 정오표에서 알려진 I2C 제약을 확인합니다.
  2. 최소·최대 전원 전압과 예정 온도 범위에서 오류율을 측정합니다.
  3. 케이블과 센서 수가 최대인 구성으로 상승 시간 여유를 다시 봅니다.
  4. 소프트웨어 장애 주입으로 NACK와 멈춘 버스의 복구 동작을 검증합니다.
  5. 규격 밖 장거리나 절연 요구가 확인되면 대체 통신의 비용을 함께 산정합니다.

I2C 풀업 저항과 버스 속도를 좌우하는 신호 무결성

댓글목록

등록된 댓글이 없습니다.