### 0.0.1 I2C 버스 락업(Lock-up) 현상 원인 및 하드웨어 풀업(Pull-up) 저항 용량 최적화 계산

### 0.0.1 I2C 버스 락업(Lock-up) 현상 원인 및 하드웨어 풀업(Pull-up) 저항 용량 최적화 계산

PX4 기반 소형 멀티로터 설계 현장에서 마르고 닳도록 접수되는 추락 사일로(Silo) 원인 중 하나가 바로 하단 라이다(Lidar)나 외부 나침반 센서가 사용하는 I2C 버스의 치명적인 통신 마비(Lock-up/Hang) 현상이다.

I2C 버스 락업(Lock-up)의 기전

I2C 통신 프로토콜은 SCL(Clock)과 SDA(Data) 단 두 가닥의 선을 여러 장치가 공유하는 오픈 드레인(Open-Drain) 비동기 버스다. 아무도 데이터를 보내지 않을 때 선로 핀은 공중에 떠 있게 되므로, 이를 높은 전압(3.3V)으로 끌어당겨 주기 위해 반드시 풀업 저항(Pull-up Resistor) 이 매달려 있어야 한다.
문제가 발생하는 원인은 ‘선(Wire)의 길이’ 구조 때문이다.

  • 하향 라이다는 짐벌이나 다리 아랫부분에 달아야 하므로, 비행 제어기(Pixhawk 등)로부터 I2C 케이블 선이 평소보다 길게(예: 20cm 이상) 뻗어 나가게 된다. 케이블이 길어지면 두 선 간격에 일종의 거대한 ‘기생 커패시턴스(Parasitic Capacitance, C_p)’ 용량이 축적된다.
  • 이 기생 용량 때문에 신호가 Low(0V) 에서 High(3.3V) 로 튕겨 올라갈 때 날카로운 사각파(Square \ Wave)를 그리지 못하고 둥글고 긴 꼬리를 그리는 라이징 타임 지연(Rise Time Degradation)이 발생한다.
  • 바로 이때 ESC 스위칭 노이즈 스파이크(EMI)가 긴 I2C 선율을 안테나 삼아 찌르고 들어오면, 둥글어진 파형의 경계선(Threshold) 부근에서 0인지 1인지 칩셋이 혼동하게 된다. 결과적으로 슬레이브(센서) 디바이스가 ACK 비트를 놓아주어야 할 타이밍을 착각하여 SDA 라인을 그라운드(0V)로 무한정 영원히 잡고 놓치지 않는 상태, 이른바 I2C Bus Lock-up (버스 질식) 상태에 돌입하는 것이다. I2C 버스가 뻗으면 같은 버스에 몰린 모든 고도 센서, 나침반이 동반 정지되어 쿼드콥터는 요/고도 제어 상실로 그 자리에서 격추된다.

풀업 저항 용량 최적화를 통한 물리적 버스 구제망

이 절망적인 EMI/정전기 락업 지옥을 부수는 가장 훌륭한 해법은 펌웨어 예외처리가 아니라, 순수한 하드웨어의 저항값 커스터마이징에 있다.

  • RC 값 최소화 전략: 라이징 타임 지연(\tau = R_{pullup} \times C_{parasitic})을 무찌르려면 선의 길이(C_p)를 줄일 수 없는 이상, 풀업 저항값(R_{pullup}) 자체를 현격히 낮게 찍어내려 전압 회복 속도를 예리한 칼날 파형으로 날렵하게 깎아주어야 한다.
  • Pixhawk 내부 구동 버스는 기본적으로 약 10k\Omega \sim 4.7k\Omega 급의 안전 위주 저항이 박혀 있다. 하지만 I2C 멀티 포트 케이블이 20cm 이상 길어지는 환경에서는 이 저항치를 무시하고 외부에 강력한 2.2k\Omega 혹은 심할 경우 1.5k\Omega 급 강풀업(Strong Pull-up) 저항 모듈을 I2C Splitter 보드 양단 버스 극성에 병렬 전원 납땜 결선해야만 한다.

적절한 풀업 강도의 최적화(2.2k\Omega 대역 개조)는 라인 파형의 RC 시정수 둥근 꼬리를 날카롭게 분쇄해 주며, EMI 외란 노이즈가 SCL/SDA 임계전압을 뚫고 들어오지 못할 정도로 짱짱한(Stiff) High-Level 토크를 유지하는 최후 최고의 물리 방어 메커니즘을 제공한다.