리눅스에서 시리얼 포트를 이용해서 통신을 하고 있는데요~ 전송 속도를 변화시키니 데이터 전송이 이상하게 되네요;;
글쓴이: blackcsy / 작성시간: 월, 2008/04/28 - 6:35오후
Server Test 용으로 윈도우즈 창을 하나 만들고요. 임베디드 보드와 시리얼 포트로 연결시킨 다음 하이퍼 터미널로 보드에 접속해서 리눅스 프로그램을 가동 시키고 Server Test용 윈도우즈 프로그램을 돌려서 0x05 라는 데이타를 임베디드 보드로 전송 시킴니다.
9600 bps로 전송 시 0x05 를 전송 하면 출력하면 0x05 라고 잘 출력되고 read 도 잘 이루어 집니다.
그런데 둘 사이의 전송 속도를 115200 bps로 올려서 0x05 를 전송하니 ' 0 ' 이렇게 3 byte 데이타가 날라가네요;;
전송 속도를 높임으로 인해 기존의 데이타가 변질되어서 날라가는건가요??
검색을 하다 보니 overrun 현상이랑 비슷한거 같기도 한데;;
시원한 대답이 없네요 ㅠ.ㅠ
아시는 분 있으시면 시원스레 답변 좀 남겨주세요 ^^*
Forums:
임베디드 보드가
임베디드 보드가 어떤건지 확인하시고 임베디드 보드에 있는 시리얼 통신과 관련된 유닛의 데이터 시트를 찾아보시면 됩니다...
일반적으로 저속은 에러율이 0% 지만 고속으로 갈수록 에러율이 높아집니다만...
정확하게 어떤 문제가 발생하는지 모르겠습니다 1바이트 데이터를 날리신건지 "0x05"라는 4바이트 데이터를 전송하신건지...?
후자인것 같은데.. 4바이트중 3바이트가 깨졌다는건데 그건 다른문제일 경우가 클것 같습니다..
B9600 이 기본
B9600 이 기본 설정으로 되어있어요. 저속으로 하면 에러율이 적어져야 한다고 하셨는데..
저속으로 Test해보니.. 고속일 때와 마찬가지로 0x02 1 Byte가 다른 값으로 변질되어서 전송되네요;;
3byte가 날라간다고 생각했던 문제는.. 제 코딩 실수였네요;;
0x02 전송(16진수)
B57600 -> 224, 224, 0
B38400 -> 120, 60 , 0
B19200 -> 102, 0
B4800 -> 240
한 번 전송 했을 뿐인데.. 결과는 저렇게 나오네요.. 결과값들은 10진수에요.
포트 설정은
newtio.c_cflag = Boudrate | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 30;
newtio.c_cc[VMIN] = 0;
으로 하고 있어요..;; 왜 저속도 안되는지.. 죽겠네요 ㅠ.ㅠ
쌍방의 보레이트를
. 잘못 봤네요 =.=;
답글 내용이 잘못되어 수정합니다.
댓글 달기