2016년 11월 28일 월요일

라즈베리 파이에 여러개의 시리얼 포트가 필요할 때 (Use multiple serial port in Raspberry Pi)

라즈베리 파이로 무언가를 만들려고 하다 보면 여러개의 시리얼 포트가 필요한 경우가 있다.  라즈베리 파이에는 기본적으로 두개의 시리얼 포트가 있지만 그 중 하나는 미니포트라 사용에 꽤 신경 써 줘야 하는 부분이 많고,  라즈베리 파이 3의 경우 시리얼포트를 블루투스가 사용하고 있어 블루투스를 동시에 사용하려고 하면 매우 골치 아퍼 진다.  (상세한 내용은 이전 포스트 (라즈베리 파이 3 시리얼/블루투스 문제 (Raspberry Pi 3 UART/Bluetooth problem))를 참고)

그럼 시리얼 포트를 추가할 수 있는 가장 쉬운 방법은 USB-to-Serial converter를 사용하는 것이다. 



시중에 다양한 종류의 제품이 나와 있고 가격도 그리 비싸지 않다.

다만 이 제품들을 사용해서 여러개의  시리얼 포트를 추가하려면 포트당 한개의 USB  포트가 필요하기 때문에 별도의 허브를 붙여줘야 하는 문제가 발생한다. 

그래서 FTDI에서는  USB-to-multiport  Serial  comverter  칩을 제공하고 있다.  FT2232H나 FT4232H  칩을 이용하면 한개의 USB포트로 2개 또는 4개의 시리얼 포트를 확장할 수 있게 된다. 






FT2232H breakout board

그리고  이 경우 가장 큰 장점은 raspbian에 디바이스 드라이버가 이미 포함되어 있어 따로 드라이버를 설치할 필요 없이 라즈베리 파이에 연결만 해 주면 장치를 인식해 곧바로 사용할 수 있다는 것이다. 


위의 화면 캡춰와 같이 breakout board를 연결하기 전에는 없었지만 breakout board를 USB에 연결하고 나면 /dev/ttyUSB0, /dev/ttyUSB1 이 자동으로 추가된다.  (FT2232H의 경우,  FT4232H의 경우는 저 두개 외에 추가로 /dev/ttyUSB2, /dev/ttyUSB3  도 만들어진다.)


FT2232H의 경우 단순히 asynchronous serial (우리가 일반적으로 사용하는 시리얼 통신방식) 뿐 아니고 synchronous serial, FIFO,  SPI,  I2C, Host emulation 등 매우 다양한 방식으로 동작할 수 있기 때문에 여러 핀이 나와 있지만 async serial로 사용하는 경우는 위의 4개 핀만 사용하면 된다. 

테스트를 위해 아래와 같이 uart0의 Tx핀을 uart1의 Rx에 연결해준다.


이제 라즈베리 파이에서 두개의 터미널 창을 열어준다.


minicom 또는 다른 시리얼 터미널 프로그램을 사용해 위쪽의 창은 /dev/ttyUSB0,  아래쪽 창은 /dev/ttyUSB1 포트를 열어준다.


미니컴을 사용하는 경우 디폴트로 하드웨어 플로우 컨트롤을 사용하는걸로 되어 있으므로 그걸 꺼 줘야 한다.  먼저 Ctrl-A 를 누른 다음 'O'를 누르면 위와 같은 메뉴 화면이 나온다.  거기에서 'Serial  port  setup'을  선택  해  준다.


위의 화면이 나오면 'F'  키를 한번 눌러 Hardware Flow Control 부분이 'Yes'로 되어 있는걸 'No'로 바꿔 준다.


위와 같이  되었으면 엔터키를 눌러주고 나서 'Exit'을 선택해주면 된다.  이 과정은 위쪽,  아래쪽 두 터미널 모두 해 줘야 한다.


이제 위쪽 터미널에서 글자를 입력해 보면 아래쪽 터미널에  입력한 글자가 나타나게 된다.  하지만 반대로 아래쪽 터미널에서는 아무리 글자를 입력해도 위쪽 터미널에는 나타나지 않는다.  테스트를 위해 Tx(uart0) -> Rx(uart1) 은 연결했지만 Tx(uart1) -> Rx(uart0)는 연결해 주지 않았기 때문에 그런 것이다. 

현재  aliexpress에서 FT2232H breakout board는 약 $15  정도에 구할 수 있다.  다만 FT4232H breakout board는 aliexpress에서는 찾기가 쉽지 않고 Numato Lab, Mouser 등에서 약 3~4만원 정도(배송비 별도)에 구할 수 있다.

이 디바이스들은 맥,  윈도우용 디바이스 드라이버도 제공되고 있으므로 맥이나 윈도우 환경에서도 여러개의 시리얼 포트가 필요한 경우 유용하게 사용할 수 있다.


Mac Coolterm에서 사용하는 경우  1


Mac  Coolterm에서 사용하는 경우 2

댓글 3개:

  1. 정보 감사합니다,

    라즈베리파이를 "라즈베리파이3 B+"로 입문한지 3일째인 초심자입니다.
    정말 가성비 좋더군요 ^^

    하지만 한가지, 시리얼 포트가 3개도 아니고 딱 2개가 필요한데요, 가장 간단한 방법좀 문의 드려도 될까요?

    위 글을 보면, 블루트스를 해제 하고 시리얼로 사용할수도 있다는 의미 같아서,
    좋은 방법이 될것 같아서 문의드립니다.

    감사합니다~

    답글삭제
    답글
    1. 가장 간단한 방법은 USB-to-serial을 한개 꼽아서 사용하는겁니다. 가격도 몇천원 안하구요. 그렇게 하면 라즈베리 파이에 있는거 1개+USB-to-serial에 있는거 1개를 사용하게 되는거죠.
      라즈베리 파이 시리얼/블루투스 포스트에서 보신건 내부적으로 UART가 2개 들어 있지만 40핀 헤더에는 한개만 연결할 수 있기 때문에 라즈베리 외부 하드웨어적으로 두개를 동시에 사용하는건 안됩니다.

      삭제
  2. 좋은글 감사합니다!! 제가 궁금한게 있습니다. 저는 아두이노에 미세먼지 센서를 연결해서 데이터를 라즈베리파이와 c언어 코딩을 이용해 시리얼 통신으로 화면에 센서값을 출력하는 작업을 했습니다. 이때 센서값을 txt파일에다가 저장을 하려고 하는데 혹시 어떻게 해야할까요?? 버퍼를 만들어야 할까요?????

    답글삭제