센서는 멀쩡한데 보드가 못 알아듣는다 · 정체를 모르는 포착 · 실습
이 파일이 무슨 버스인지부터 모르겠다
목표
I2C 포착 네 편과 SPI 포착 세 편을 직접 해독하고, 마지막에 이름이 붙어 있지 않은 포착 셋을 받아 어떤 버스인지 가려내고 고장에 숫자 증거를 붙여 보고합니다.
왜 중요한가
드라이버가 내놓는 "장치가 응답하지 않습니다" 한 줄에는 서로 다른 원인 넷이 뭉쳐 있습니다. 주소가 틀린 것, 슬레이브가 시간을 버는 것, 풀업이 약해 상승이 비트 시간을 다 쓰는 것, 버스가 통째로 잠긴 것. 이 넷은 파형에서 전혀 다르게 생겼고, 고칠 사람도 각각 다릅니다 — 펌웨어, 드라이버의 복구 절차, 하드웨어. 파형에서 가려내면 보고서 한 줄이 담당자 한 명을 지목합니다. SPI 쪽은 반대로 클럭이 함께 오므로 속도 문제가 없고, 대신 어느 모서리에서 읽느냐와 선택선이 언제 내려가느냐가 조용한 고장을 만듭니다.
단계
1. 두 선짜리 포착을 읽는다 — 표본 속도, 상승 시간, SCL 저 구간의 분포를 잽니다.
2. START 와 STOP 을 찾는다 — SCL 이 높은 동안의 SDA 변화만 조건으로 셉니다.
3. 주소와 ACK 를 읽어 낸다 — 9비트 묶음으로 바이트와 ACK 를 복원합니다.
4. 아무도 응답하지 않은 주소 — NACK 가 실제로는 무엇의 부재인지 확인합니다.
5. 마스터가 만들지 않은 구간 — 클럭 늘이기를 길이 분포로 찾아냅니다.
6. 상승이 비트 시간을 다 쓴다 — 약한 풀업을 상승 시간과 임계값 두 개로 증명합니다.
7. 네 조합 중 어느 것인가 — 유휴 준위와 데이터가 바뀌는 모서리로 모드를 정합니다.
8. 선택선이 늦으면 개수가 먼저 말한다 — 8의 배수가 깨지는 것을 봅니다.
9. 이름 없는 포착 셋을 가려낸다 — 버스와 고장을 증거와 함께 보고합니다.
참고
- 재료는
/opt/fixtures/serialbus/아래에 있습니다.i2c/read-ok.csv,i2c/nack.csv,i2c/stretch.csv,i2c/weak-pullup.csv,spi/mode0.csv,spi/mode3.csv,spi/cs-late.csv, 그리고unknown/capture-1.csv부터capture-3.csv까지입니다. 형식 설명은/opt/fixtures/serialbus/README.md입니다. - 채널 이름은 파일마다 다릅니다. I2C 는
scl·sda, SPI 는cs·sclk·mosi·miso, 정체를 모르는 포착은ch0부터입니다. 이름에 의미를 기대하지 말고 머리말에서 읽으세요. - 흔한 실수 하나: SCL 이 높은 동안의 SDA 변화를 찾을 때 모서리와 겹치는 표본까지 세는 것.
scl[i]와scl[i-1]이 둘 다 높을 때만 조건입니다. - 흔한 실수 둘: 마지막 바이트의 NACK 를 고장으로 보고하는 것. 읽기 전송에서는 정상 종료 절차입니다.
- 공급 전압은 3.30 V 이고 기본 판정 임계값은 그 절반인 1.65 V 입니다. VIH 를 쓰라고 한 단계에서만 0.7 배를 씁니다.
- 추가 설치도 인터넷도 필요 없습니다. python3 만 씁니다.
- 예상 85분이므로 기본 60분이 끝나기 전에 +시간으로 연장하세요(최대 180분). 세션이 끝나면
/root가 사라지므로 남기고 싶은 것은 따로 보관하세요.
단계 9개
- 두 선짜리 포착을 읽는다
- START 와 STOP 을 찾는다
- 주소와 ACK 를 읽어 낸다
- 아무도 응답하지 않은 주소
- 마스터가 만들지 않은 구간
- 상승이 비트 시간을 다 쓴다
- 네 조합 중 어느 것인가
- 선택선이 늦으면 개수가 먼저 말한다
- 이름 없는 포착 셋을 가려낸다