본문으로 바로가기

[Hardware] UART 통신과 물리적 연결

category Reversing/ETC 2019. 9. 29. 16:54

Let's study UART!

UART 란?

UART : Universal asynchronous receiver/transmitter(범용 비동기 송수신기)

  • UART는 병렬형태로 들어온 데이터를 직렬형태로 전환하여 데이터를 전달하는 하드웨어이다.

  • 직렬(Serial) 통신 프로토콜이다.

    • 데이터 송신/수신 시 각각 하나의 LINE만 이용한다.

  • 하드웨어 통신 규약의 한 종류이다.

  • 프로토콜 구현이 매우 간단하다.

우리에게는 시리얼 통신(Serial communication) 으로 더 잘 알려져있다.

일단 UART 관련 프로그램인 putty,Xshell등을 구하기 쉬워서 접근이 간편하다는게 특징이다.

또한, USB-to_Serial같은 장비들도 구하기 쉽다는게 특징이다.

해커의 입장에서는 커널, OS의 각종 메시지나 디버그 메시지, 그리고 오류 메시지를 얻을 수 있다.

또한 부트로더를 획득하여 펌웨어를 획득하고, 우리가 보지 못했던 다른 펌웨어를 볼 수 있다.

최종적으로는 커맨드 쉘(Command Shell)을 획득하여 동적 분석을 가능하게 할 수 있다.

필요한 장비는 아래와 같다.

  • USB to Serial

  • 점퍼 케이블

  • 멀티 테스터

  • Logic Analyzer


UART 통신

UART는 앞에서 설명했듯이 비동기 이다.

동기 / 비동기의 간단한 정의는 아래와 같다.

  • 동기적 일처리 방식 : 순차적으로 일을 스스로 끝내 나가는 방식

  • 비동기적 일처리 방식 : 해야 할 일을 위임하고 기다리는 방식

자세히 설명하면, 동기방식은 요청과 결과가 한자리에서 동시에 일어난다.

A nodeB node사이의 작업 처리 단위를 동시에 맞춘다는 의미이다.

비동기는 요청과 결과가 동시에 일어나지 않는다를 의미한다.

노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.

동기방식은 설계가 간단하고 직관적이지만 결과가 주어질때 까지 아무것도 못하고 대기해야한다.

비동기방식은 동기보다는 복잡하지만 결과가 주어지는데 시간이 걸려도 그동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다는 장점이 있다.

데이터 통신

UART가 데이터를 송신 / 수신 할때 보내는 비트는 크게 Start bit, Data bit, parity bit, stop bit로 크게 5가지로 나누어진다.

  • 시작 비트는 통신의 시작을 의미한다. 이 비트부터 정해진 규약에 따라 통신을 시작한다는 의미이다.

  • 데이터 비트는 보통 5bits ~ 8bits사이의 데이터 전송을 한다. 몇 비트를 전송할지는 레지스터 설정에 따라 결정된다.

  • 패리티 비트는 오류 검증을 하기 위한 비트로, 패리티 값을 생성하여 송신하고 수신쪽에서 오류를 판단한다. 옵션은 사용안함, 짝수패리티, 홀수패리티로 크게 3가지이다.

  • 끝비트는 통신 종료를 알리는 비트이다. 1,1.5,2 비트로 고정된 값을 가져야 하고, 이 값은 레지스터 설정에 따라서 달라질 수 있다.


UART 연결

UART는 크게 4가지의 핀으로 구성되어있다.

  • TX : 데이터 송신 핀

  • RX : 데이터 수신 핀

  • GND : 그라운드

  • VCC : 전압

여기서 송신 수신과의 관계를 헷갈릴 수 있는데, 항상 자기의 입장에서 생각하면 편하다.

PC의 TX는 PC에서 데이터를 송신하는 역할이다.

공유기의 TX는 데이터를 송신하는 역할이다.

PC의 RX는 PC에서 데이터를 수신하는 역할이다.

일단 UART를 연결하기 위해서 관련 USB 드라이버를 설치하고, 점퍼 케이블을 연결한다.

img

위에 보이는것 처럼 장치관리자의 포트에 USB to Serial이 정상적으로 등록되어지면, 이 포트를 동하여 UART 통신을 사용할 수 있다.

그리고 Xshell이나 Putty같은 터미널 소프트웨어를 이용하여 접속을 설정한다.

요런식으로 Serial 연결 부분을 찾아서 잘 설정하면 된다.


물리적인 UART 연결

img

과거 데스크탑에서는 위와 같은 포트들을 볼 수 있는데, 여기서 가운데가 UART serial 포트이다.

요즘에는 요런거 말고 USB로 통신하니까 USB to Serial장비를 이용하여 통신한다.

아래 핀부분을 잘 보면 위에서 설명한대로 4가지의 핀이 존재한다.


RX / TX / VCC / GND 핀 찾기

  1. 멀티 테스터로 찾기

    • 5v나 3.3v가 잡힐때의 (-) 선은GND핀이다.

    • (+) 선은 VCC핀이나 TX핀이다.

    • 나머지 하나는 RX핀이다.

  2. LED를 이용하기

    • LED에 불이 들어올 때 LED의 (-)극은 GND핀이다.

    • 지속적으로 불이 들어오는 핀은 VCC핀이다.

    • 전원을 키면 깜빡이는 핀은 TX핀이다.

    • 나머지 하나는 RX핀이다.

  3. 그 외에도 PCB의 특성을 이용한 방법, 멀티테스터 통전 테스트를 통한 방법등이 있다.


Baud Rate

  • Bit Rate는 초당 얼마나 많은 데이터비트를 전송할 수 있는가를 나타내는 말이다.

    • BPS(Bit Per Second)와 같은 말이다.

    • 모뎀의 전송 속도를 측정하는 단위로 사용했다. (28,000 모뎀 == 28,800bps)

  • Baud Rate는 초당 얼마나 많은 심볼(의미 있는 데이터 묶음)을 전송할 수 있는가를 나타내는 말이다. 초당 신호(Signal) 의 수를 나타낸다.

    • 만약 하나의 신호 요소가 2bit로 구성되어있으면 Baud RateBPS의 절반이다.

      • 즉, 신호를 1bit로 여긴다면 BPS 와 같은 단위가 된다.


UART를 이용한 통신에서는 High / Low signal을 구분할 수 있는 기준이 필요하다.

여기서 Baud Rate를 사용하고, 높을 수록 데이터 전송 속도가 빨라진다.

보통 자주 사용하는 값을 Brute Force하거나 신호 분석기를 이용한다.

Baud Rate를 제대로 맞추지 않으면 신호 간격이 어긋나서 깨진 글자가 나오기도 한다.


Reference