도와주세요!!
글 수 15,339
2007.07.10 08:21:08 (*.212.137.23)
7043
말씀 주신 프로그램에 아래의 헤더 파일을 추가하여 테스트 해 보았는데 문제가 없네요.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/poll.h>
#include <termios.h> // B115200, CS8 등 상수 정의
#include <fcntl.h> // O_RDWR , O_NOCTTY 등의 상수 정의
그러나 말씀 주신 내용을 보면 상대편과 보오율이 맞지 않았을 때의 모습처럼 보입니다.
1. 만일 전송하는 데이터와 수신한 데이터의 바이트 개수가 많이 차이난다면
보오율 설정 문제일 경우가 많습니다.
2. 만일 몇 바이트 차이가 나지 않는다면 패리티 설정이 맞지 않을 수 있습니다.
3. 전송한 바이트 개수와 수신한 바이트 개수가 같다면 DataBit 가 설로 다른 경우입니다.
아래의 글도 참고하여 주십시오.
FALINUX 포럼 : 시리얼 통신 - 통신 속도 결정
http://forum.falinux.com/bbs/zboard.php?id=lecture2&page=5&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=121
FALINUX 포럼 : start bit와 stop bit
http://forum.falinux.com/bbs/zboard.php?id=lecture2&page=5&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=122
FALINUX 포럼 : data bit size와 parity
http://forum.falinux.com/bbs/zboard.php?id=lecture2&page=5&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=123
>pc 와 연결해서 데이타를 확인하면 잘 들어오는데요, ez-2410 시리얼쪽과 연결해서 데이터를 확인해보면 이상하게 들어옵니다.
>
>다음은 틀린 데이타와 올바른 데이타입니다. 이상하게 한 바이트 중 앞에 4비트가 뭔가 마스킹이나 세팅이 되는 것 같습니다.
>
>틀린 데이타 : fe 85 00 ff ff 00 05 77 42 0c ec 05 00 00 00 00 00 0f fd ff 00 ff fe 00 00 05 73 73 00 00 00 00 00 02 a0 b5 82 18 ff fd ff ff fe 00 00 05 ff 02 00 00 00 00 00 00 00 00 00 00 00 00 00 02 7a 05 00 00 72 00 00 00 00 04 71 fe
>올바른 데이타 : 7e 45 00 ff ff 00 05 37 22 0c 69 05 00 00 00 00 00 8f fd ff 00 ff fe 00 00 05 33 33 00 00 00 00 00 02 50 d5 42 88 ff fd ff ff fe 00 00 05 ff 02 00 00 00 00 00 00 00 00 00 00 00 00 00 02 3a 85 00 80 32 00 00 00 00 09 35 7e
>
>
>시리얼 프로그램은 딱히 문제가 없다고 생각합니다.
>int main( )
>{
> int handle;
> struct termios oidtio, newtio;
> unsigned char buf[120];
> int RxCount;
> int i;
>
> /* 시리얼 인터페이스는 /dev/ttyS00 이나 /dev/ttyS01이 될 수 있다. */
> handle = open( "/dev/ttyS1", O_RDWR | O_NOCTTY );
>
> printf("handle = %dn", handle);
>
> if( handle < 0 ) {
> printf( "Serial Open Fail [/dev/ttyS1]rn " );
> exit(0);
> }
>
> tcgetattr(handle, &oidtio);
>
> for(i=0; i < NCCS; i++)
> newtio.c_cc[i] = ' ';
>
> memset( &newtio, 0, sizeof(newtio));
> newtio.c_cflag = B115200 | CRTSCTS | CS8 | CLOCAL | CREAD;
> newtio.c_iflag = IGNBRK | IGNPAR;
> newtio.c_oflag = 0;
>
> newtio.c_cc[VTIME] = 0;
> newtio.c_cc[VMIN] = 1;
>
> tcflush( handle, TCIFLUSH );
>
> tcsetattr( handle, TCSANOW, &newtio );
> printf("Read module startn");
>
> while(1) {
>
> tcflush( handle, TCIFLUSH );
> memset(buf, 0, 120);
>
>
> RxCount = read( handle, buf, 120);
>
> printf("RxCount = %dn", RxCount);
>
> for(i = 0; i < RxCount; i++) {
> printf("%x ", buf[i]);
> }
> printf("nn");
>
>
> }
>
> close(handle);
>
> exit(0);
>}
>
>혹시 이런 현상이 있으셨던 분들 어떻게 해결하셨는지 답변 부탁드립니다.
>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/poll.h>
#include <termios.h> // B115200, CS8 등 상수 정의
#include <fcntl.h> // O_RDWR , O_NOCTTY 등의 상수 정의
그러나 말씀 주신 내용을 보면 상대편과 보오율이 맞지 않았을 때의 모습처럼 보입니다.
1. 만일 전송하는 데이터와 수신한 데이터의 바이트 개수가 많이 차이난다면
보오율 설정 문제일 경우가 많습니다.
2. 만일 몇 바이트 차이가 나지 않는다면 패리티 설정이 맞지 않을 수 있습니다.
3. 전송한 바이트 개수와 수신한 바이트 개수가 같다면 DataBit 가 설로 다른 경우입니다.
아래의 글도 참고하여 주십시오.
FALINUX 포럼 : 시리얼 통신 - 통신 속도 결정
http://forum.falinux.com/bbs/zboard.php?id=lecture2&page=5&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=121
FALINUX 포럼 : start bit와 stop bit
http://forum.falinux.com/bbs/zboard.php?id=lecture2&page=5&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=122
FALINUX 포럼 : data bit size와 parity
http://forum.falinux.com/bbs/zboard.php?id=lecture2&page=5&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=123
>pc 와 연결해서 데이타를 확인하면 잘 들어오는데요, ez-2410 시리얼쪽과 연결해서 데이터를 확인해보면 이상하게 들어옵니다.
>
>다음은 틀린 데이타와 올바른 데이타입니다. 이상하게 한 바이트 중 앞에 4비트가 뭔가 마스킹이나 세팅이 되는 것 같습니다.
>
>틀린 데이타 : fe 85 00 ff ff 00 05 77 42 0c ec 05 00 00 00 00 00 0f fd ff 00 ff fe 00 00 05 73 73 00 00 00 00 00 02 a0 b5 82 18 ff fd ff ff fe 00 00 05 ff 02 00 00 00 00 00 00 00 00 00 00 00 00 00 02 7a 05 00 00 72 00 00 00 00 04 71 fe
>올바른 데이타 : 7e 45 00 ff ff 00 05 37 22 0c 69 05 00 00 00 00 00 8f fd ff 00 ff fe 00 00 05 33 33 00 00 00 00 00 02 50 d5 42 88 ff fd ff ff fe 00 00 05 ff 02 00 00 00 00 00 00 00 00 00 00 00 00 00 02 3a 85 00 80 32 00 00 00 00 09 35 7e
>
>
>시리얼 프로그램은 딱히 문제가 없다고 생각합니다.
>int main( )
>{
> int handle;
> struct termios oidtio, newtio;
> unsigned char buf[120];
> int RxCount;
> int i;
>
> /* 시리얼 인터페이스는 /dev/ttyS00 이나 /dev/ttyS01이 될 수 있다. */
> handle = open( "/dev/ttyS1", O_RDWR | O_NOCTTY );
>
> printf("handle = %dn", handle);
>
> if( handle < 0 ) {
> printf( "Serial Open Fail [/dev/ttyS1]rn " );
> exit(0);
> }
>
> tcgetattr(handle, &oidtio);
>
> for(i=0; i < NCCS; i++)
> newtio.c_cc[i] = ' ';
>
> memset( &newtio, 0, sizeof(newtio));
> newtio.c_cflag = B115200 | CRTSCTS | CS8 | CLOCAL | CREAD;
> newtio.c_iflag = IGNBRK | IGNPAR;
> newtio.c_oflag = 0;
>
> newtio.c_cc[VTIME] = 0;
> newtio.c_cc[VMIN] = 1;
>
> tcflush( handle, TCIFLUSH );
>
> tcsetattr( handle, TCSANOW, &newtio );
> printf("Read module startn");
>
> while(1) {
>
> tcflush( handle, TCIFLUSH );
> memset(buf, 0, 120);
>
>
> RxCount = read( handle, buf, 120);
>
> printf("RxCount = %dn", RxCount);
>
> for(i = 0; i < RxCount; i++) {
> printf("%x ", buf[i]);
> }
> printf("nn");
>
>
> }
>
> close(handle);
>
> exit(0);
>}
>
>혹시 이런 현상이 있으셨던 분들 어떻게 해결하셨는지 답변 부탁드립니다.
>