본문 바로가기
후즈대디 후즈대디

안 뜨거운데 팬이 최대로 도는 노트북, 온도 센서 I2C 통신 확인하기

후즈대디 읽는 시간 약 27분

안 뜨거운데 팬이 최대로 돌고 느려지는 노트북, 온도 센서와 EC 사이 I2C 통신을 전원·풀업·파형 순서로 점검해 원인을 찾는 방법을 정리했습니다.

노트북이 별로 뜨겁지도 않은데 팬이 계속 최대로 돌거나, CPU 클럭이 이유 없이 뚝 떨어져 버벅이는 경우가 있습니다. 이런 증상이면 먼저 과열을 의심하게 되지만, 실제로는 온도 센서와 EC 사이의 I2C(SMBus) 통신이 실패해서 생기기도 합니다. EC가 온도를 읽지 못하면 안전을 위해 최악의 상황을 가정하고 팬을 최대로 돌리거나 성능을 제한하도록 설계된 보드가 있기 때문입니다.

이 글에서는 온도를 못 읽는 상황이 어떻게 스로틀링으로 이어지는지 짚고, 멀티미터와 오실로스코프로 전원, 풀업, 파형, 센서 순서로 원인을 좁히는 방법을 정리합니다. 센서 종류와 버스 구성은 모델마다 다르니 실제 작업은 해당 보드의 회로도로 확인하세요.

이 글에는 직접 만든 그래프 두 개를 함께 넣었습니다. 하나는 SDA·SCL 선에 부식이나 손상된 부품 때문에 누설 경로가 생겼을 때 대기 전압이 I2C 규격의 입력 문턱 아래로 언제 내려가는지를 ngspice로 시뮬레이션한 결과이고, 다른 하나는 버스가 Low에 붙어 있을 때 풀업 저항을 잠깐 하나 덧대 선을 잡고 있는 쪽이 금속성 단락인지, 칩 출력인지, 누설인지 가르는 방법을 시뮬레이션한 결과입니다. 가정한 조건은 각 그래프 설명에 모두 적었습니다.

온도를 못 읽으면 왜 느려질까

노트북 메인보드에는 CPU 내부 센서 외에도 전원부, 배터리 근처, 메모리 근처 등에 별도의 온도 센서가 붙어 있습니다. 이 센서들은 보통 I2C나 SMBus로 EC(임베디드 컨트롤러)에 연결되고, EC는 주기적으로 온도를 읽어 팬 속도와 전력 한도를 정합니다.

  • 읽기 실패: 센서가 응답하지 않으면 EC는 값을 받지 못합니다. 펌웨어에 따라 마지막 값을 유지하거나, 0이나 -128처럼 비정상 값으로 처리하거나, 안전 모드로 들어갑니다.
  • 안전 모드: 팬 최대, CPU 전력 제한, 충전 중단 같은 보호 동작이 켜집니다. 사용자는 ‘갑자기 느려지고 시끄러워졌다’고 느낍니다.
  • 잘못된 값: 통신이 깨져 실제보다 훨씬 높은 값이 읽히면 과열로 판단해 곧바로 스로틀링하거나 전원을 끄기도 합니다.
온도 센서 통신 오류 점검 4단계

1. 증상부터 기록합니다

보드를 열기 전에 운영체제에서 하드웨어 모니터링 도구로 센서 값을 봅니다. 특정 센서만 0, -128, 127처럼 비정상적으로 고정되어 있거나, 값이 전혀 갱신되지 않는다면 통신 문제를 강하게 의심할 수 있습니다. 모든 온도가 실제로 높다면 통신이 아니라 냉각 문제(팬 먼지, 서멀 재도포)를 먼저 봅니다.

증상이 차가울 때만, 또는 한참 쓰고 난 뒤에만 생기는지도 적어 둡니다. 온도에 따라 증상이 바뀐다면 납땜 크랙 같은 간헐 접촉을 의심해 볼 수 있습니다. 최근에 떨어뜨렸거나 액체를 쏟은 적이 있는지도 함께 확인합니다.

2. 전원과 풀업부터 잽니다

I2C는 SDA(데이터)와 SCL(클럭) 두 선을 풀업 저항으로 끌어올려 두고, 장치들이 필요할 때만 GND로 끌어내리는 오픈 드레인 방식입니다. 그래서 통신이 없을 때는 두 선 모두 풀업 전압(보드에 따라 3.3V나 1.8V 등)에 있어야 합니다.

  • 센서의 VDD 핀에 정격 전압이 들어오는지 먼저 확인합니다. 전원이 없으면 센서는 응답할 수 없습니다.
  • 대기 상태에서 SDA와 SCL을 멀티미터로 잽니다. 둘 다 풀업 전압 근처면 정상이고, 버스가 쉬고 있다는 뜻입니다.
  • 한쪽이나 양쪽이 0V에 붙어 있다면 버스가 눌려 있는 것입니다. 이 버스에 연결된 장치를 하나씩 분리하며 어느 장치가 선을 잡고 있는지 찾습니다.
  • 중간값(예: 풀업 전압의 절반쯤)이 나오면 라인 누설을 의심합니다. 절반쯤이라면 풀업 저항과 비슷한 크기의 누설이 붙은 셈입니다(아래 직접 시뮬레이션). 침수 흔적이나 부식이 있는지 주변을 봅니다.

직접 시뮬레이션: 누설 저항에 따라 대기 전압이 문턱 아래로 내려가는 지점

위에서 중간값이 나오면 누설을 의심한다고 했는데, 누설이 어느 정도일 때 통신에 문제가 생기는지 가늠하려고 ngspice로 직접 시뮬레이션했습니다. I2C 선은 풀업 저항으로 버스 전압에 끌어올려 두므로, 선과 GND 사이에 누설 경로가 생기면 풀업과 누설 저항이 전압 분배기가 되어 대기 전압이 내려갑니다. 판정 기준은 NXP UM10204(I2C 버스 규격)의 입력 문턱으로, 버스 전압(VDD)에 비례하는 레벨에서 High는 0.7·VDD 이상, Low는 0.3·VDD 이하입니다. VDD가 3.3V면 직접 계산으로 VIH 2.31V, VIL 0.99V입니다.

3.3V SMBus 선에 GND나 5V 레일로 누설 저항이 생겼을 때 풀업 4.7kΩ과 10kΩ에서 대기 전압이 I2C 규격의 VIH와 VIL 문턱 아래로 내려가는 지점을 보여 주는 ngspice 시뮬레이션 그래프
직접 시뮬레이션(ngspice): 3.3V 버스의 대기 상태에서 누설 저항에 따른 선 전압(왼쪽)과 누설 1MΩ부터 1kΩ까지 다섯 경우의 비교(오른쪽). 문턱은 NXP UM10204의 0.7·VDD, 0.3·VDD이고 풀업·누설 값은 가정값.

가정은 다음과 같습니다. 버스 전압은 3.3V, 풀업 저항은 4.7kΩ과 10kΩ 두 가지로 두었습니다. 둘 다 흔히 쓰이는 값으로 가정한 것이며 실제 값은 해당 보드의 회로도에서 확인해야 합니다. 누설은 선과 GND 사이, 또는 선과 이웃한 5V 레일 사이에 저항 하나로 넣고 1kΩ부터 2MΩ까지 바꿨습니다. 아무 장치도 선을 잡지 않은 대기 상태이며, 버스에 물린 칩 입력 핀의 누설 전류와 선의 용량은 넣지 않았습니다. 이 값들은 계산을 위해 정한 것이며 특정 보드의 값이 아닙니다.

누설 저항1MΩ100kΩ22kΩ4.7kΩ1kΩ
풀업 4.7kΩ, GND로 누설3.28V3.15V2.72V1.65V0.58V
풀업 10kΩ, GND로 누설3.27V3.00V2.27V1.06V0.30V
풀업 4.7kΩ, 5V 레일로 누설3.31V3.38V3.60V4.15V4.70V

직접 시뮬레이션 결과, 풀업 4.7kΩ에서 GND로 1MΩ 누설이 생기면 대기 전압이 3.28V로 거의 그대로였지만, 22kΩ이면 2.72V, 4.7kΩ이면 1.65V, 1kΩ이면 0.58V까지 내려갔습니다. 대기 전압이 VIH(2.31V)까지 내려가는 누설 저항은 풀업 4.7kΩ일 때 10.97kΩ, 10kΩ일 때 23.33kΩ이었고, VIL(0.99V)까지 내려가는 누설 저항은 각각 2.01kΩ과 4.29kΩ이었습니다. 풀업이 10kΩ인 쪽은 22kΩ 누설에서 이미 2.27V로 VIH보다 낮았습니다. 문턱이 VDD의 비율로 정해져 있으므로 이 경계 저항은 풀업 저항의 2.333배(VIH)와 0.429배(VIL)로 직접 계산되고, 버스 전압이 1.8V여도 비율은 같습니다. 반대로 이웃한 5V 레일로 누설이 생기면 대기 전압이 올라가, 22kΩ에서 3.60V, 1kΩ에서 4.70V로 버스 전압 3.3V보다 높아졌습니다.

이 결과를 진단에 쓰는 방법은 다음과 같습니다.

  • 대기 전압으로 누설 크기를 거꾸로 짐작합니다. 풀업 값과 버스 전압을 알면 등가 누설 저항은 R = 풀업 × V ÷ (VDD − V)로 직접 계산할 수 있습니다. 3.3V 버스, 풀업 4.7kΩ에서 대기 전압이 3.0V면 약 47kΩ, 2.5V면 약 14.7kΩ, 1.65V(절반)면 풀업과 같은 4.7kΩ짜리 누설이 붙은 셈입니다. 버스에 물린 칩의 입력 전류도 함께 더해진 값이니 같은 보드의 다른 버스나 정상 보드와 비교합니다.
  • VIH보다 조금 높다고 안심하지 않습니다. 대기 전압이 2.31V를 넘더라도 High 쪽 여유가 줄어든 상태입니다. 습기나 온도로 누설이 커지거나 노이즈가 섞이면 간헐적으로 깨질 수 있으니, 위 1단계에서 적어 둔 증상 조건(차가울 때, 오래 쓴 뒤)과 함께 봅니다.
  • 0.99V 아래면 눌린 버스와 구분이 안 됩니다. 1kΩ 누설이면 칩이 선을 잡고 있지 않아도 대기 전압이 0.58V로 Low로 읽힙니다. 아래 ‘버스가 눌려 있을 때 범인 찾기’에서 이 둘을 가르는 방법을 함께 정리했습니다.
  • 버스 전압보다 높게 나오면 다른 레일과의 누설을 의심합니다. 대기 전압이 풀업 전압보다 높다면 GND가 아니라 더 높은 전압의 선과 이어진 것입니다. 이때 버스에 물린 칩의 입력 핀은 자기 전원보다 높은 전압을 받게 되므로, 허용 범위를 해당 칩 데이터시트의 절대 최대 정격에서 확인하고 원인을 찾기 전까지 전원을 오래 넣어 두지 않습니다.

이 시뮬레이션은 누설을 저항 하나로 단순화한 모델입니다. 실제 부식 누설은 습도, 온도, 걸린 전압에 따라 값이 바뀌고 일정한 저항처럼 움직이지 않을 수 있습니다. 또 이 그래프는 직류 대기 전압만 보므로, 누설이 통신 중 파형에 주는 영향은 아래 3단계처럼 오실로스코프로 따로 확인해야 합니다. 시뮬레이션에 쓴 넷리스트는 아래와 같습니다.

* SMBus/I2C line at idle (nobody driving): idle-high level with a leakage path, VDD = 3.3 V
* pull-up 4.7k or 10k to 3.3 V (assumed typical values), leakage (corrosion residue / damaged device) to GND or to a 5 V rail
* sweep variable x = log10(Rleak / ohm): 3 -> 6.3 (1k .. 2M); leakage modelled as a B-source I = V/R
* thresholds (NXP UM10204): VIH = 0.7*VDD = 2.31 V, VIL = 0.3*VDD = 0.99 V
Vctl x 0 0
Vdd vdd 0 3.3
V5 v5 0 5
* A: Rp 4.7k, leak to GND
RpA vdd a 4.7k
BlA a 0 I = V(a)/pow(10,V(x))
* B: Rp 10k, leak to GND
RpB vdd b 10k
BlB b 0 I = V(b)/pow(10,V(x))
* C: Rp 4.7k, leak to a 5 V rail
RpC vdd c 4.7k
BlC c v5 I = (V(c)-V(v5))/pow(10,V(x))
* fixed copies for the table: leak 1M, 100k, 22k, 4.7k, 1k
Rp47_1M vdd g47_1M 4.7k
Rl47_1M g47_1M 0 1meg
Rp47_100k vdd g47_100k 4.7k
Rl47_100k g47_100k 0 100k
Rp47_22k vdd g47_22k 4.7k
Rl47_22k g47_22k 0 22k
Rp47_4k7 vdd g47_4k7 4.7k
Rl47_4k7 g47_4k7 0 4.7k
Rp47_1k vdd g47_1k 4.7k
Rl47_1k g47_1k 0 1k
Rp10_1M vdd g10_1M 10k
Rl10_1M g10_1M 0 1meg
Rp10_100k vdd g10_100k 10k
Rl10_100k g10_100k 0 100k
Rp10_22k vdd g10_22k 10k
Rl10_22k g10_22k 0 22k
Rp10_4k7 vdd g10_4k7 10k
Rl10_4k7 g10_4k7 0 4.7k
Rp10_1k vdd g10_1k 10k
Rl10_1k g10_1k 0 1k
Rp5_1M vdd f5_1M 4.7k
Rl5_1M f5_1M v5 1meg
Rp5_100k vdd f5_100k 4.7k
Rl5_100k f5_100k v5 100k
Rp5_22k vdd f5_22k 4.7k
Rl5_22k f5_22k v5 22k
Rp5_4k7 vdd f5_4k7 4.7k
Rl5_4k7 f5_4k7 v5 4.7k
Rp5_1k vdd f5_1k 4.7k
Rl5_1k f5_1k v5 1k
.dc Vctl 3 6.3 0.005
.meas dc xa_vih WHEN v(a)=2.31
.meas dc xa_vil WHEN v(a)=0.99
.meas dc xb_vih WHEN v(b)=2.31
.meas dc xb_vil WHEN v(b)=0.99
.meas dc xc_36 WHEN v(c)=3.6
.meas dc v47_1M FIND v(g47_1M) AT=3
.meas dc v47_100k FIND v(g47_100k) AT=3
.meas dc v47_22k FIND v(g47_22k) AT=3
.meas dc v47_4k7 FIND v(g47_4k7) AT=3
.meas dc v47_1k FIND v(g47_1k) AT=3
.meas dc v10_1M FIND v(g10_1M) AT=3
.meas dc v10_100k FIND v(g10_100k) AT=3
.meas dc v10_22k FIND v(g10_22k) AT=3
.meas dc v10_4k7 FIND v(g10_4k7) AT=3
.meas dc v10_1k FIND v(g10_1k) AT=3
.meas dc v5_1M FIND v(f5_1M) AT=3
.meas dc v5_100k FIND v(f5_100k) AT=3
.meas dc v5_22k FIND v(f5_22k) AT=3
.meas dc v5_4k7 FIND v(f5_4k7) AT=3
.meas dc v5_1k FIND v(f5_1k) AT=3
I2C 파형 관찰로 원인을 가르는 표

3. 오실로스코프로 파형을 봅니다

멀티미터로는 정상인데 증상이 있다면 파형을 봐야 합니다. SCL에 트리거를 걸고 EC가 센서를 읽는 순간을 잡습니다. 오실로스코프에 I2C 디코드 기능이 있으면 주소와 ACK 여부를 바로 볼 수 있습니다. 프로브 접지와 트리거 설정은 오실로스코프 사용법 글에 정리해 두었습니다.

  • 주소 다음에 ACK가 없다: 해당 주소의 센서가 응답하지 않는 것입니다. 센서 전원, 주소 설정 핀의 연결, 센서 자체를 봅니다.
  • 상승 엣지가 둥글게 늘어진다: 풀업이 약하거나 라인 용량이 커진 것입니다. 풀업 저항이 떨어져 나갔거나 값이 바뀌었는지, 라인에 누설이 있는지 봅니다.
  • 평소에는 정상이다가 가끔 깨진다: 간헐 접촉이나 노이즈입니다. 센서 납땜을 확대경으로 보고, 필요하면 플럭스를 바르고 다시 녹여 줍니다.

버스가 눌려 있을 때 범인 찾기

SDA나 SCL이 0V에 붙어 있다면 그 버스에 연결된 장치 중 하나가 선을 잡고 놓지 않는 것입니다. 한 버스에는 온도 센서, 배터리 게이지, 충전 IC, 클럭 칩 등 여러 장치가 함께 물려 있을 수 있어서, 하나씩 떼어 보며 범인을 찾습니다. 떼기 전에 아래 시뮬레이션처럼 선을 잡은 쪽이 단락인지, 칩 출력인지, 누설인지부터 가르면 범위를 줄일 수 있습니다.

  • 회로도로 버스 구성부터: 해당 SDA·SCL 네트에 어떤 장치들이 연결되어 있는지 보드뷰나 회로도로 확인하고 목록을 만듭니다.
  • 분리 가능한 것부터: 배터리 커넥터, 서브보드 케이블처럼 쉽게 뺄 수 있는 것부터 분리하고 버스 전압이 풀업으로 돌아오는지 봅니다.
  • 직렬 저항 활용: 장치 앞에 0Ω이나 작은 값의 직렬 저항이 있다면 하나씩 들어 올려 구간을 나눕니다. 저항을 뗀 순간 전압이 돌아오면 그 뒤쪽 장치가 원인입니다.
  • 대지 저항 비교: 전원을 끈 상태에서 SDA·SCL의 다이오드 모드 값을 정상 보드와 비교하면 단락 여부를 빠르게 알 수 있습니다. 다이오드 모드 표시값이 무엇을 뜻하는지는 다이오드 모드 시뮬레이션 글에서 다뤘습니다.

직접 시뮬레이션: 풀업을 잠깐 덧대 Low를 잡은 쪽의 성격 가르기

SDA나 SCL이 0V 근처에 붙어 있을 때 멀티미터 표시만 보면 금속성 단락, 칩이 출력을 켠 채 멈춘 경우, 위에서 본 큰 누설이 모두 비슷하게 낮은 값으로 보일 수 있습니다. 부품을 떼기 전에 원인의 성격을 좁히려고, 선과 같은 버스 전압 사이에 저항 하나를 잠깐 덧대 풀업 전류를 늘렸을 때 선 전압이 어떻게 바뀌는지 ngspice로 직접 시뮬레이션했습니다. 전압 변화를 전류 변화로 나누면 Low를 잡고 있는 쪽의 저항이 나옵니다.

Low에 붙은 I2C 선에 1.5kΩ 풀업을 덧댔을 때 금속성 단락, 정상 드라이버, 약해진 드라이버, 부식 누설에 따라 선 전압이 달라지는 모습과 UM10204 VOL 한계를 비교한 ngspice 시뮬레이션 그래프
직접 시뮬레이션(ngspice): 3.3V 버스에서 Low를 잡은 쪽으로 흐르는 전류와 선 전압(왼쪽), 기존 풀업 4.7kΩ만 있을 때와 1.5kΩ을 덧댔을 때의 선 전압(오른쪽). 단락·드라이버·누설 저항은 가정값이고 VOL 한계는 NXP UM10204 기준.

가정은 다음과 같습니다. 버스 전압 3.3V, 보드의 풀업은 4.7kΩ이고, 여기에 4.7kΩ 또는 1.5kΩ을 같은 3.3V로 덧대는 경우를 비교했습니다. 1.5kΩ을 덧대면 유효 풀업이 1137.1Ω, 선이 0V일 때 흐르는 전류가 2.902mA로(직접 계산), UM10204가 출력 Low 전압을 정하는 조건인 3mA를 넘지 않습니다. Low를 잡는 쪽은 금속성 단락 0.5Ω, 출력이 켜진 정상 오픈 드레인 드라이버 40Ω, 약해지거나 손상된 드라이버 300Ω, 부식 누설 1kΩ의 네 가지 저항으로 넣었습니다. 모두 비교를 위해 정한 값이며 특정 부품의 값이 아닙니다. UM10204는 VDD가 2V보다 높을 때 3mA를 흘리면서 출력 Low 전압(VOL)이 0.4V 이하일 것을 요구하므로, 저항으로 환산하면 약 133.3Ω 이하입니다(직접 계산).

Low를 잡은 쪽 (가정값)풀업 4.7kΩ만4.7kΩ 덧댐1.5kΩ 덧댐변화 (4.7kΩ만 → 1.5kΩ 덧댐)변화로 계산한 저항
금속성 단락 0.5Ω0.35mV0.70mV1.45mV1.10mV0.5Ω
정상 드라이버 40Ω27.8mV55.2mV112mV84.3mV40Ω
약해진 드라이버 300Ω198mV374mV689mV491mV300Ω
부식 누설 1kΩ579mV985mV1544mV965mV1000Ω

직접 시뮬레이션 결과, 기존 풀업만 있을 때 선 전압은 단락 0.5Ω에서 0.35mV, 정상 드라이버 27.8mV, 약한 드라이버 198mV, 부식 누설 1kΩ 579mV였습니다. 1.5kΩ을 덧대자 각각 1.45mV, 112mV, 689mV, 1544mV로 올랐습니다. 두 측정의 전압 변화를 전류 변화로 나누면(전류 = (3.3V − 선 전압) ÷ 유효 풀업) 각각 0.5Ω, 40Ω, 300Ω, 1000Ω으로 넣은 값이 그대로 나옵니다. 1kΩ 누설은 덧대기 전에는 VIL 0.99V보다 낮아 눌린 버스처럼 보였지만, 덧댄 뒤에는 1.54V로 VIL을 넘었습니다.

이 결과를 진단에 쓰는 방법은 다음과 같습니다.

  • 덧대도 몇 mV밖에 안 움직이면 금속성 단락을 봅니다. 0.5Ω 단락은 1.5kΩ을 덧대도 1.10mV만 변했습니다. 3½자리 멀티미터 200mV 레인지(표시 단위 0.1mV)로 겨우 보이는 크기입니다. 납 브리지, 패턴끼리 붙은 곳, 핀이 내부에서 GND와 붙어 버린 칩처럼 저항이 아주 낮은 경로를 의심합니다. 전류를 흘리며 자리마다 mV를 재 위치를 좁히는 방법은 탄탈 커패시터 단락 글에서 시뮬레이션해 두었지만, I2C 선에는 풀업 전류 정도만 흐르므로 자리마다 차이가 아주 작습니다. 이 선에서는 위 목록처럼 직렬 저항을 들어 구간을 나누는 편이 쉽습니다.
  • 수십 mV에서 전류에 비례해 오르면 켜진 출력이 잡고 있는 것입니다. 정상 드라이버는 1.5kΩ을 덧대도 112mV로 0.4V 아래였습니다. 이 경우 칩이 망가졌다기보다 통신 도중 멈춰 선을 놓지 않은 것일 수 있습니다. UM10204의 버스 클리어(Bus clear) 항목은 SDA가 Low에 붙어 있으면 컨트롤러가 SCL에 클럭 9개를 보내고, 그래도 풀리지 않으면 하드웨어 리셋이나 전원 재투입으로 버스를 풀라고 적고 있습니다. 어댑터와 배터리를 모두 분리해 EC와 센서 전원이 완전히 내려간 뒤 다시 켜서 재 보고, 그래도 같은 값이면 장치를 하나씩 분리합니다.
  • 133.3Ω 선보다 위면 규격 안의 출력으로 보기 어렵습니다. 300Ω 드라이버는 1.5kΩ 덧댐에서 689mV로 0.4V를 넘었습니다. 출력이 약해진 칩이거나, 칩 출력이 아닌 저항성 경로(누설, 손상된 입력 보호 소자 등)를 의심하고 직렬 저항을 들어 어느 쪽인지 나눕니다.
  • 수백 mV였다가 덧댄 뒤 VIL을 넘으면 누설 쪽입니다. 이 경우는 부품 교체보다 아래 침수·부식 항목처럼 세척과 건조를 먼저 하고 대기 전압을 다시 잽니다.
  • 전원이 꺼진 장치도 선을 잡을 수 있습니다. 버스에 물린 장치 가운데 자기 전원이 꺼진 것이 있으면 입력 보호 다이오드를 거쳐 선을 끌어내릴 수 있습니다. UM10204는 Fast-mode 장치의 I/O 핀이 VDD가 꺼졌을 때 SDA·SCL을 방해하지 않아야 한다고 정하고 있지만, 버스에 물린 장치가 모두 이 조건을 갖췄다고 단정할 수는 없으니 각 장치의 전원 핀 전압도 함께 확인합니다.

덧대는 저항은 집게 리드로 선과, 같은 버스의 풀업 전원(풀업 저항의 전원 쪽 패드)에 물립니다. 다른 레일에 잘못 물리지 않도록 회로도로 확인하고, 저항 값은 선이 0V일 때 전체 전류가 3mA를 넘지 않게 고릅니다. 이 시뮬레이션은 Low를 잡는 쪽을 저항 하나로 단순화했습니다. 실제 칩 출력의 저항은 칩, 전원 전압, 온도에 따라 다르고, 선을 잡은 경로가 여럿이면 병렬로 합쳐진 값만 보입니다. 기존 풀업 값은 회로도나 부품 표기로 확인해야 계산이 맞습니다. 시뮬레이션에 쓴 넷리스트는 아래와 같습니다.

* Who holds the SMBus line low? Line voltage while something sinks it, normal pull-up vs. a temporary extra pull-up
* VDD 3.3 V, board pull-up 4.7k (assumed); temporary resistor clipped from the line to the same 3.3 V: none, 4.7k, 1.5k
* sink types (assumed values): S = metallic short 0.5 ohm, D = healthy open-drain driver switched on, Ron 40 ohm,
*   W = weak/damaged driver, Ron 300 ohm, K = corrosion leak 1k
* UM10204: VOL <= 0.4 V at 3 mA sink (VDD > 2 V) -> a compliant driver is <= 133 ohm at 3 mA
* sweep variable isc = current into a perfect short in mA (pull-up conductance = isc/3.3 mS)
Vctl isc 0 0
Vdd vdd 0 3.3
Bp_s vdd n_s I = (V(vdd)-V(n_s))*V(isc)/3.3/1000
Rs_s n_s 0 0.5
Bp_d vdd n_d I = (V(vdd)-V(n_d))*V(isc)/3.3/1000
Rs_d n_d 0 40
Bp_w vdd n_w I = (V(vdd)-V(n_w))*V(isc)/3.3/1000
Rs_w n_w 0 300
Bp_k vdd n_k I = (V(vdd)-V(n_k))*V(isc)/3.3/1000
Rs_k n_k 0 1k
* fixed copies: P = 4.7k only, Q = 4.7k || 4.7k, R = 4.7k || 1.5k
RpP_s vdd p_s 4.7k
RsP_s p_s 0 0.5
RpQ_s vdd q_s 4.7k
RxQ_s vdd q_s 4.7k
RsQ_s q_s 0 0.5
RpR_s vdd r_s 4.7k
RxR_s vdd r_s 1.5k
RsR_s r_s 0 0.5
RpP_d vdd p_d 4.7k
RsP_d p_d 0 40
RpQ_d vdd q_d 4.7k
RxQ_d vdd q_d 4.7k
RsQ_d q_d 0 40
RpR_d vdd r_d 4.7k
RxR_d vdd r_d 1.5k
RsR_d r_d 0 40
RpP_w vdd p_w 4.7k
RsP_w p_w 0 300
RpQ_w vdd q_w 4.7k
RxQ_w vdd q_w 4.7k
RsQ_w q_w 0 300
RpR_w vdd r_w 4.7k
RxR_w vdd r_w 1.5k
RsR_w r_w 0 300
RpP_k vdd p_k 4.7k
RsP_k p_k 0 1k
RpQ_k vdd q_k 4.7k
RxQ_k vdd q_k 4.7k
RsQ_k q_k 0 1k
RpR_k vdd r_k 4.7k
RxR_k vdd r_k 1.5k
RsR_k r_k 0 1k
.dc Vctl 0.2 4 0.01
.meas dc vp_s FIND v(p_s) AT=1
.meas dc vq_s FIND v(q_s) AT=1
.meas dc vr_s FIND v(r_s) AT=1
.meas dc vp_d FIND v(p_d) AT=1
.meas dc vq_d FIND v(q_d) AT=1
.meas dc vr_d FIND v(r_d) AT=1
.meas dc vp_w FIND v(p_w) AT=1
.meas dc vq_w FIND v(q_w) AT=1
.meas dc vr_w FIND v(r_w) AT=1
.meas dc vp_k FIND v(p_k) AT=1
.meas dc vq_k FIND v(q_k) AT=1
.meas dc vr_k FIND v(r_k) AT=1
.meas dc w_at3ma FIND v(n_w) AT=3
.meas dc d_at3ma FIND v(n_d) AT=3

침수·부식 보드라면

I2C 라인은 풀업 저항값이 커서 작은 누설에도 대기 전압이 내려갑니다. 위 직접 시뮬레이션에서 풀업이 10kΩ이면 23.33kΩ 누설만으로 대기 전압이 VIH까지 내려갔습니다. 침수 흔적이 있는 보드는 센서와 풀업 저항, 비아 주변을 이소프로필 알코올과 부드러운 솔로 세척하고 완전히 말린 뒤 다시 측정합니다. 세척만으로 파형이 정상으로 돌아오기도 합니다. 세척 전후의 대기 전압을 같은 조건으로 재 두면 누설이 줄었는지 숫자로 비교할 수 있습니다. 부식으로 패턴이 끊겼다면 가는 점퍼선으로 연결합니다.

4. 센서를 판정하고 교체합니다

같은 버스에 연결된 다른 장치(예: 배터리 게이지, 충전 IC)는 정상적으로 통신하는데 특정 센서만 응답이 없다면, 버스보다 센서 쪽을 먼저 의심합니다. 센서 VDD와 GND 사이가 단락되어 있지 않은지 다이오드 모드로 확인하고, 정상 보드의 같은 위치 값과 비교합니다.

  • 교체는 같은 부품 번호로 합니다. 같은 계열이라도 I2C 주소가 다른 버전이 있어, 주소가 다르면 EC가 찾지 못합니다.
  • 온도 센서는 초소형 패키지로 나오는 것이 있어 열이 금방 전달됩니다. 플럭스를 충분히 바르고 열풍기로 짧게 작업합니다.
  • 교체 후에는 모니터링 도구로 값이 정상적으로 갱신되는지, 부하를 줬을 때 온도와 팬 속도가 자연스럽게 따라가는지 확인합니다. 최소 30분 이상 켜 두고 간헐 증상이 다시 나타나지 않는지도 봅니다.

안전 주의

  • 보드를 켠 상태로 측정할 때는 프로브가 인접 핀을 동시에 건드리지 않도록 가는 팁이나 테스트 훅을 씁니다.
  • 납땜과 부품 분리 전에는 반드시 어댑터와 배터리 커넥터를 분리합니다.
  • 팬이 계속 최대로 도는 상태를 오래 두면 팬 베어링이 빨리 닳습니다. 원인을 찾기 전까지는 장시간 고부하 작업을 피합니다.
  • 세척에 쓰는 이소프로필 알코올은 인화성이 있으니 보드가 완전히 마른 뒤에 전원을 연결합니다.

자주 묻는 질문

Q. BIOS 업데이트로 해결되기도 하나요?
센서 값 처리나 팬 제어 로직이 펌웨어 문제였던 경우에는 업데이트로 해결되기도 합니다. 다만 하드웨어 모니터링에서 특정 센서 값이 고정되어 있다면 하드웨어 원인을 먼저 확인하는 편이 빠릅니다.

Q. 센서를 떼어 버리면 어떻게 되나요?
EC가 센서를 찾지 못해 안전 모드로 들어갈 수 있습니다. 증상이 오히려 심해질 수 있으니 떼어 두지 않습니다.

참고 자료
NXP, 「UM10204 I2C-bus specification and user manual」
Texas Instruments, 「A Basic Guide to I2C」 (SBAA565)
Texas Instruments, 「TMP102 Digital Temperature Sensor」 데이터시트

후즈대디

후즈대디
전자기기 수리 일을 하는 운영자가 현장에서 쓰는 진단 순서와 측정법을 정리합니다. 글에 실린 그래프는 ngspice 회로 시뮬레이션과 직접 계산으로 만들고, 가정한 조건을 함께 적습니다.
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.