도와주세요!!
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/un.h>
#include <sys/ioctl.h>
#include <errno.h>
#define BAUDRATE B115200
int main (void)
{
int fd;
struct termios newtio;
char data;
if((fd = open("/dev/ttySAC2", O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0) // serial 통신 디바이스 오픈
{
perror("/dev/ttySAC2Open Fail: ");
return -1;
}
memset(&newtio, 0, sizeof(newtio));
newtio.c_cflag = B115200 | CS8 | CLOCAL | CREAD; // Control options : 115,200 baud, 8 data bits, Local line, Enable receiver
/* CLOCAL, CREAD 옵션은 항상 활성화 */
newtio.c_iflag = 0;
newtio.c_oflag = 0;
newtio.c_lflag = 0; // LIne options :
newtio.c_cc[VTIME] = 0; // 타이머의 시간설정
newtio.c_cc[VMIN] = 1; // read할 대 리턴되기 위한 최소문자 개수
tcflush(fd, TCIFLUSH); // 입력 데이터를 소거
tcsetattr(fd, TCSANOW, &newtio);
while(1){
read(fd, data, 1);
printf("%d\n", data);
}
close(fd);
}
128은 a라는 문자열을 송신하도록 컴파일하였고 PC로 확인하였습니다.
그런데 위의 소스를 컴파일하여 미니컴에서 실행하여보면 data에서 쓰레기값이 뜨는데.... 왜그런지 잘 모르겟습니다.
도와주세요 ㅠㅠ
답변 감사합니다.
그런데 이미
atmega128 <--> PC
6410 <--> PC 는 통신이 가능한걸 확인하엿습니다.
보레이트도 115200으로 맞췃구요 ㅠ
data에서는 계속 190이라는 값을 읽습니다.ㅠㅠ
통신이 가능한걸 확인하신 건가요? 통신이 되고 있는 것을 확인하신 건가요?
아무튼 두개의 보드에서 각각 PC로 정상적으로 데이타 송수신이 되고 있는데
두개 보드사이에 안된다고 하면 물리적인 케이블을 잘못 연결한거 외에 문제될 만한게 없지 않겠습니까?
128 은 0x80 입니다. High bit 가 오직 한개이고
190 은 0xBE 입니다. high bit 가 좀 많죠?
하드웨어 연결이 잘못되었거나 보우레이이 틀리다에 한표 걸겠습니다.
두개보드와 PC사이의 통신은 직접되는것을 확인하였습니다.
하드웨어부분(TX와 RX를 반대로연결)도 보드의 RX로 128의 TX가 들어가는것을 오실로스코프로 확인하엿습니다....ㅠㅠ
보레이트 역시 확인하였구요,.,....ㅠㅠ
printf("%d\n", data); 에서 뭐가 뜨나요?
128 은 아닐꺼고....
제 생각에는 baudrate 이 안맞을 확률이 제일 큰데요.
어떤 데이타가 뜨는지 한번 올려보시고...
atmega128 <--> PC
6410 <--> PC
간의 통신을 각각 검증한후에 atmega128 과 6410 간의 통신을 시도하는 것도 좋은 방법입니다.