본문 바로가기

Hacked Brain/FPGA

RS-232 시리얼 인터페이스 동작방법. How the RS-232 serial interface works


대부분의 컴퓨터들은 하나 이상의 시리얼 RS-232 인터페이스를 기본 장치로 가지고 있다.


Characteristics(특성)

RS-232 인터페이스는 다음과 같은 특성을 가진다.

  • 9핀 커넥터 "DB-9"(예전PC들은 25핀("DB-25")을 사용한다.)을 사용한다.
  • 양방향 통신이 가능하다.(PC가 송수신을 같이 할수 있다.)
  • 10KB/s 의 최고속으로 할 수 있다.

fpga4fun.com 의 FPGA interface projects 섹션에 serial interface 부분이 있다.
그 RS-232 부분의 번역본이다.
이문서의 원본은 http://www.fpga4fun.com/SerialInterface1.html 에서 찾을수 있다. from 후니유.

공부를 위한 목적으로 번역을 하였기때문에 오역,맘대로의역이 있어도 내맘이다 ㅋㅋ

DB-9 커넥터

PC뒤에서 흔히 볼수 있는 포트다.

이 커넥터는 9핀 을 가지지만, 중요한 핀은 3개 정도이다.:

  • pin 2 : RxD(수신 데이터)
  • pin 3 : TxD(송신 데이터)
  • pin 5 : GND(접지)

이 3개의 핀만을 이용해도 데이터를 송수신 할 수있다.


Serial Communication(시리얼 통신)

데이터는 한번에 1bit 씩 전송이 된다.
한 선은 한 방향으로 쓰여있다.
컴퓨터는 시리얼화된 데이터가 필요로 하게되고,
데이터는 8bit의 덩어리로 보내지게 된다.
LSB(bit 0)가 먼저 보내지며, MSB(bit 7)이 마지막으로 보내진다.


Asynchronous Communication(비동기 통신)

이 인터페이스는 비동기 프로토콜을 사용한다.
이의미는 데이터를 전송할때 클럭신호가 필요없다는 것이다.
리시버는 들어오는 데이터 비트가 'time'이 되는 방식을 가진다.

RS-232에서 사용되는 방법:

  1. 케이블 양쪽이 통신 파라미터(속도,포멧등)가 동일 해야 한다. 통신을 시작하기 전에 정해야 함.
  2. 트랜스미터는 라인이 idle 일경우 '1' 을 보낸다.
  3. 트랜스미터는 각 바이트가 전송되기전에 시작신호로 '0' 을 보낸다. 이러면 리시버가 데이터가 온다는 것을 알수있다.
  4. '시작'신호후 데이터는 이미 규약된 속도와 방법대로 전송이 되고, 리시버는 그것을 해석하게 된다.
  5. 트랜스미터는 '정지'신호로서 각 데이터 바이트 후에 '1' 을 보낸다.

여기에 0x55 바이트가 어떻게 보내지는지 보여주는 그림이 있다.


0x55 바이트는 바이너리 비트로는 01010101이 된다.
그러나 LSB(bit0)가 먼저 보내지고, 라인이 토글된다. 10101010.

다른 예제를 보자.

이데이터는 0xc4 이고, 이는 바이너리로는 11000100 이다.
0->1 로 변하는 구간히 1번밖에 없다.

How fast can we send data?(데이터를 얼마나 빨리 보낼수 있는가)

속도는 baud에 따라 다르게 되는데, 즉, 초당 전송 비트수라 생각하면된다.
1000bauds 는 초당 1000비트를 전송한다는 뜻이다.
일반적으로 RS-232인터페이스의 경우 아무 속도나 정해서 사용하지않는다.
가장 기본적으로 쓰이는 전송속도들은

  • 1200 bauds
  • 9600 bauds
  • 38400 bauds
  • 115200 bauds

115200 bauds 의경우, 각비트들은 1/115200 = 8.7 마이크로초가 걸린다.
결국 8비트를 전송하므로, 8*8.7 = 69마이크로초 정도 걸린다.
거기에 1바이트를 전송하기 위해서 스타트 비트와 스톱비트를 덧붙이게 되므로,
실제 데이터(1바이트)를 보내면 10*8.7 = 87 마이크로초가 걸린다.
이걸 초로 환산하면 1초에 11.5Kbyte 가 전송되게 된다.

어떤 PC에서는 115200 bauds 로 전송을 할경우 칩의 버그로 1.5 혹은 2비트 이상이 스톱비트로 사용이 되어서, 실제 전송하는데 초당 10.5KByte 가 전송이 된다.

Physical layer

신호는 +/- 전압으로 나타낸다.

  • '1' 은 -10V(or -5V, -15V)
  • '0' 은 +10V(or +5V, +15V)

idle 상태는 -10V로 보낸다.

Links

참고할만한 것들이다. 위의 설명을 그린 사진

  • A nice drawing, from this Apple Developer Connection page.
  • A short Asynchronous Communication page
  • An Introduction to RS232 Serial Communications
  • Voltage Waveshapes, part of this huge Serial HOWTO

     

    다음설명은 Baud 제너레이터 이다. 여기를 눌러서 가보자.