LabHub
배우기 러닝패스 코스

센서는 멀쩡한데 보드가 못 알아듣는다 · 클럭 없는 직렬 — UART · 실습

깨진 글자에서 보율을 되찾는다

LabHub 에서 이어서 보기

목표

포착된 표본 열에서 UART 프레임을 직접 해독하고, 송신 클럭이 어긋난 포착에서 실제 비트 시간을 되재어 읽히는 문장을 되살립니다. 그 과정에서 패리티와 프레이밍 오류가 각각 무엇을 잡고 무엇을 놓치는지 숫자로 셉니다.

왜 중요한가

UART 에는 클럭 선이 없습니다. 양쪽이 같은 비트 시간을 믿고 있어야 하는데 그 믿음을 확인할 방법이 프레임마다 한 번, 시작 비트뿐입니다. 그래서 클럭이 어긋나면 프레임 뒤쪽부터 무너지고, 증상은 "글자가 깨진다" 로만 올라옵니다. 이 실습은 그 신고를 몇 퍼센트 어긋났는가라는 숫자로 바꾸는 연습입니다. 값을 고치는 것이 아니라 시간 축을 고친다는 점이 핵심이고, 그 시간 축의 근거는 포착 파일 안에 이미 들어 있습니다.

단계

1. 표본 열에 시간 축을 세운다 — 머리말의 표본 속도로 표본 번호를 시각으로 바꾸고 개요를 남깁니다.
2. 임계값을 올리면 모서리가 움직인다 — rising_edges 를 구현하고 두 임계값의 검출 시각 차이를 잽니다.
3. 프레임 해독기를 쓴다 — 시작 모서리에서 (k + 0.5) 비트 시간 떨어진 표본을 읽는 decode 를 구현합니다.
4. 정상 포착을 읽는다 — 프레이밍 오류 0으로 문장을 얻습니다.
5. 표본을 솎아 판독이 무너지는 곳을 찾는다 — 1·4·10·25·50 간격으로 다시 해독합니다.
6. 명목 보율로 읽었을 때의 증상 — 어긋난 포착의 프레이밍 오류와 가장 짧은 펄스를 잽니다.
7. 비트 시간을 되재어 문장을 되살린다 — 거친 값에서 시작해 긴 기준선으로 좁힙니다.
8. 패리티가 놓친 것을 센다 — 조용히 틀린 프레임이 몇 개인지 셉니다.

참고

단계 8개

  1. 표본 열에 시간 축을 세운다
  2. 임계값을 올리면 모서리가 움직인다
  3. 프레임 해독기를 쓴다
  4. 정상 포착을 읽는다
  5. 표본을 솎아 판독이 무너지는 곳을 찾는다
  6. 명목 보율로 읽었을 때의 증상
  7. 비트 시간을 되재어 문장을 되살린다
  8. 패리티가 놓친 것을 센다