'Serial-Port'에 해당되는 글 1건

  1. Serial-port 관련 자료 정리

Serial-port 관련 자료 정리

centos 에서 Serial-Port를 이용한 파일전송 모듈을 개발하면서 정리한 자료 입니다.

 

시리얼 포트 상태 확인

  • 장치 확인

    $ cat /proc/tty/driver/serial
    serinfo:1.0 driver revision:
    0: uart:16550A port:000003F8 irq:4 tx:930342833 rx:215304 brk:145317 RTS|CTS|DTR|DSR
    1: uart:16550A port:000002F8 irq:3 tx:1090 rx:0 RTS|CTS|DTR|DSR|CD
    2: uart:unknown port:000003E8 irq:4
    3: uart:unknown port:000002E8 irq:3
  • 커널에서 시리얼 드라이버 load 되었는지 확인

    $ dmesg | grep tty

    • 정상적인 경우
      serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
      serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
      00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
    • 예외 상황
      Xen virtual console succefully installed as ttyS0
      • Xen에서 가상콘솔을 사용하는 듯.
      • 출처: https://kldp.org/node/91683
      • 해결 방안: 부팅 관리자에서 Xen이 없는 것으로 부팅
        $vi /boot/grub/grub.conf
        default = 1   <- Xen이 없는 것으로 부팅 '0' 시작 Index
  • 간략한 포트 확인

    $ setserial -a /dev/ttyS0
    /dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
      Baud_base: 115200, close_delay: 50, divisor: 0
      closing_wait: 3000
      Flags: spd_warp skip_test

  • 조금 더 자세한 포트 확인

    $ stty -F /dev/ttyS0
    speed 115200 baud; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>; start = <undef>; stop = <undef>; susp = <undef>;
    rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>; min = 0; time = 100;
    -brkint -icrnl -imaxbel
    -opost -onlcr
    -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke

  • 상세한 포트 확인

    stty -a < /dev/ttyS0
    speed 115200 baud; rows 0; columns 0; line = 0;
    intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>; eol = <undef>; eol2 = <undef>; swtch = <undef>;
    start = <undef>; stop = <undef>; susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>;
    min = 0; time = 100;
    -parenb -parodd cs8 -hupcl -cstopb cread clocal crtscts -cdtrdsr
    -ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8
    -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke

시리얼 포트 설정 변경 및 복구

시리얼 포트로 접속 테스트

OSX 에서 시리얼 포트 테스트 방법

  • 시리얼 포트가 없으므로 USB2Serial 젠더나 케이블이 필요하다.
  • 터미널에서 screen 유틸 사용
  • GUI에서 SerialTools 유틸 사용(AppStore에 있음) - 연결 상태를 눈으로 확인 할 수 있어서 추천함.

시리얼 포트 통신 프로그래밍

  • 시리얼 통신 특이사항
    • BAUDRATE을 높게 잡아도 특정 수치 이후로는 속도가 같다.
      • null cable 사용시 11,531 byte per sec 정도 나옴.
    • 버퍼를 255 이상 잡으면 짤려서 전송된다.
      • 송/수신시 나눠서 전송 할 필요가 있다.
    • 전송중에 케이블을 빼도 상태를 알수가 없다.
      • 프토토콜을 정의할 필요가 있다.
    • non-canonical, x초(0.1초이상) 동안 입력이 없으면, timeout 처리 되록 하는것이 최적인듯 하다.
      newtio.c_lflag     = 0;
      newtio.c_cc[VTIME] = 100;
      newtio.c_cc[VMIN]  = 0;
    • 속도가 매우 느리므로 데이터를 압축해서 보내는 것이 좋다.
  • 문서

시리얼 포트로 터미널 접속 셋팅(서버측)

참고 문서