LabHub
배우기 러닝패스 코스

센서는 멀쩡한데 보드가 못 알아듣는다 · 파형에서 비트로 · 이론

파일 안에는 비트가 없다

LabHub 에서 이어서 보기

한 줄 요약

포착 파일은 전압의 목록일 뿐입니다. 비트는 거기 없고, 임계값과 시간 축을 정하는 순간 생겨납니다.

왜 이게 필요했나

현장에서 가장 자주 나오는 문장이 있습니다. "센서는 멀쩡한데 보드가 못 알아듣습니다." 이 말이 나왔다는 것은 이미 양쪽을 따로 시험해 봤다는 뜻입니다. 센서를 다른 보드에 붙이면 읽히고, 보드에 다른 센서를 붙이면 읽힙니다. 그런데 이 둘을 이으면 안 됩니다. 남은 것은 둘 사이의 선이고, 선에서 일어나는 일은 계산으로는 나오지 않습니다. 재야 합니다.

재고 나면 손에 남는 것은 그림이 아니라 숫자 표입니다. 로직 애널라이저든 오실로스코프든, 저장 버튼을 누르면 나오는 것은 "몇 번째 표본에서 이 선이 몇 볼트였나" 의 나열입니다. 이 코스가 다루는 것이 그 표입니다. 표를 비트로, 비트를 바이트로, 바이트를 "무엇이 잘못됐다" 는 문장으로 바꾸는 일입니다.

여기서 초보자가 가장 많이 하는 착각은 파형 보기 도구가 보여 주는 1010... 이 파일 안에 들어 있다고 믿는 것입니다. 들어 있지 않습니다. 도구가 임계값을 하나 고르고, 시간 축을 하나 고르고, 그 두 선택으로 만들어 낸 것입니다. 선택이 틀리면 같은 파일에서 다른 답이 나옵니다. 그리고 도구는 자기가 무엇을 골랐는지 굳이 말해 주지 않습니다.

어떻게 동작하나

표본 하나는 시각과 전압의 짝입니다. 시각은 대개 파일에 적혀 있지 않고, 머리말의 표본 속도와 표본 번호로 계산합니다. 500 kHz 로 받은 파일의 312번 표본은 312 ÷ 500,000 = 624 µs 지점입니다. 표본 속도를 못 읽으면 시간 축이 없고, 시간 축이 없으면 보율도 클럭 주기도 잴 수 없습니다.

# labhub-capture v1# sample_rate_hz=500000# channels=rxn,rx_v310,3.30311,3.29312,2.36      <- 여기서 내려가기 시작한다313,1.48      <- 1.65 V 로 보면 여기가 모서리314,0.94

전압을 비트로 바꾸는 것이 임계값입니다. 1.65 V(공급 전압의 절반)를 쓰면 313번이 하강 모서리이고, 2.90 V 를 쓰면 312번이 하강 모서리입니다. 모서리가 무한히 가파르다면 둘이 같겠지만 실제 선에는 용량이 있어서 전압이 지수적으로 움직입니다. 그래서 임계값이 높을수록 하강은 일찍, 상승은 늦게 잡힙니다. 이 코스의 정상 UART 포착에서 두 임계값의 상승 모서리는 4 표본, 8 µs 만큼 어긋납니다.

여기서 중요한 사실 하나. 받는 쪽 칩은 절반 전압으로 판정하지 않습니다. 데이터시트에는 VIH(확실히 1로 읽는 최소 전압)와 VIL(확실히 0으로 읽는 최대 전압)이 따로 적혀 있고, 그 사이는 보장되지 않는 구간입니다. 그래서 여러분의 해독기가 "데이터는 멀쩡하다" 고 말해도 실제 칩은 못 읽을 수 있습니다. 임계값을 하나만 쓰는 해독기는 이 차이를 구조적으로 볼 수 없습니다.

시간 축 쪽의 짝은 표본 속도입니다. 비트 하나에 표본이 몇 개 들어가는지가 판독의 여유입니다. 표본이 비트당 하나뿐이면 시작 모서리의 위치를 표본 하나 단위로만 알 수 있고, 그 오차가 프레임 끝까지 누적됩니다. 표본을 솎아 내면서 같은 파일을 다시 읽어 보면, 어느 지점에서 판독이 조용히 틀리기 시작하는지 눈으로 볼 수 있습니다. 조용히, 라는 말이 중요합니다. 표본이 모자란 해독기는 오류를 내지 않고 그럴듯한 다른 글자를 냅니다.

세 번째 선택도 있습니다. 어느 열이 어느 선인가입니다. 머리말에 channels=scl,sda 라고 적혀 있어도, 그것은 재 온 사람이 프로브를 꽂은 순서일 뿐입니다. 두 열을 바꿔 읽으면 클럭이 데이터가 되고 데이터가 클럭이 됩니다. 그래서 이름을 믿기 전에 한 열이 규칙적으로 오르내리는가를 먼저 봅니다. 클럭은 규칙적이고 데이터는 그렇지 않습니다.

현장에서 만나는 모습

포착 파일을 받아 놓고 "도구가 아무것도 못 읽는다" 며 다시 재러 가는 경우가 많습니다. 대개는 다시 잴 필요가 없습니다. 도구의 임계값이 그 신호의 진폭과 안 맞거나(3.3 V 신호에 5 V 기준을 쓰는 경우), 도구가 잡은 표본 속도가 통신 속도에 비해 너무 낮은 것입니다. 파일을 직접 열어 첫 100줄의 최소·최대 전압을 보는 것만으로 절반은 가려집니다.

반대의 사고도 있습니다. 도구가 깔끔한 1010 을 보여 주기 때문에 "신호는 정상" 이라고 보고했는데, 실제 보드는 계속 못 읽는 경우입니다. 도구는 절반 전압으로 판정했고 칩은 VIH 로 판정했기 때문입니다. 이때 필요한 것은 새 계측기가 아니라 판정 기준을 바꿔 같은 파일을 한 번 더 읽어 보는 것입니다. 기준을 바꿨을 때 답이 달라진다면, 그 자체가 결론입니다 — 신호에 여유가 없다는 뜻이니까요.

세 번째로 흔한 것이 파일을 눈으로만 보고 판단하는 것입니다. 표본이 수천 줄이면 사람이 볼 수 있는 것은 앞뒤 몇십 줄뿐이고, 고장은 대개 가운데에 있습니다. 이 코스가 처음부터 프로그램을 쓰게 하는 이유가 이것입니다 — 전체를 한 번에 훑고, 같은 판정을 몇 번이고 똑같이 되풀이할 수 있어야 합니다. 손으로 센 숫자는 다음 사람이 확인할 수 없습니다.

다음 퀴즈에서 확인할 것

표본 번호에서 시각을 구하는 방법, 임계값을 올리면 상승과 하강 모서리가 각각 어느 쪽으로 움직이는지, 비트당 표본 수가 줄면 어떤 식으로 실패하는지를 묻습니다. 그 뒤 UART 모듈에서 이 표를 실제로 바이트로 바꿉니다.