[급]시리얼 통신하는데 송신이 안되네요?

k09251의 이미지

리눅스에서 장비와 통신을 하기위해 시리얼 통신 프로그램을 만들어야해서
여기저기 자료와 샘플을 구해서 실행하는데 수신은 되도 송신을 게속 안되네요.

아시는 분들은 꼭 좀 해결 방법을 알려주시면 정말 감사하겠습니다.

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>

#define BAUDRATE B9600
#define DEVICE "/dev/ttyS0"

int fd,res,i;
struct termios oldtio, newtio;
char buf[15]={0};

int main(void)
{
fd=open(DEVICE,O_RDWR | O_NOCTTY );

if(fd<0)
{
printf("Comm Port Open failed!\n");
exit(-1);
}

tcgetattr(fd,&oldtio);

bzero(&newtio,sizeof(newtio));

newtio.c_oflag = OPOST | OCRNL;
newtio.c_lflag = 0;
//newtio.c_iflag = ICRNL | IGNPAR;
newtio.c_cflag = B9600 | CS8 | CREAD | CLOCAL;

tcsetattr(fd,TCSANOW,&newtio);

send_command[0]=0x92;
send_command[1]=0x10;

res=write(fd,"test\n",4);

res=read(fd,buf,11);
buf[res]=0;

if(res>0)
{
printf("RECV: ");
}
close(fd);

printf("Close\n");
return 0;
}

crimsoncream의 이미지

 bzero(&newtio,sizeof(newtio));

저라면 이거 보다는 oldtio를 카피해서 쓰겠습니다.

그리고 장비와 통신을 하실 생각이시라면 man을 보셔서 이놈을 한번 써보시길 권합니다.

man termios
...
 void cfmakeraw(struct termios *termios_p);

canonical 모드로 테스트하실 생각이시라면

 res=write(fd,"test\n",4); 

4를 5로 하셔야 할 것 같고요.

이미 보셨을 수도 있지만,
http://wiki.kldp.org/wiki.php/LinuxdocSgml/Serial-Programming-HOWTO
이 문서를 한번 보실것도 권해 드립니다.

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.

k09251의 이미지

답변 감사합니다.

말씀하신 몇가지 부분을 수정하고 했지만 여전히 송신이 안되는군요.
혹시 샘플 소스를 가지고 있으신분 게시면 좀 주실 수 없는지요.

솔직히 급해서요.

감사합니다.

차카게 살자!!!

crimsoncream의 이미지

    open_flags = O_RDWR | O_NOCTTY;

    fd = open(devname, open_flags);

    memset(&termios, 0, sizeof(struct termios));
    cfsetispeed(&termios, spd);
    cfsetospeed(&termios, spd);
    termios.c_cflag |= (CLOCAL | CREAD);

    cfmakeraw(&termios);
    termios.c_cc[VMIN] = 1;
    termios.c_cc[VTIME] = 0;

    tcsetattr(fd, TCSAFLUSH, &termios);

예전에 짠 코드에 보니까 초기화 부분이 이렇게 돼 있군요.
그리고, 장비로의 송신 여부를 먼저 확인해 보시는게 필요할 것 같은데요.

쉘에 익숙하지 않으시다면 아래와 같이 해보시면

$ stty -F /dev/ttyS0 9600 raw
$ echo 'test' > /dev/ttyS0

원하시는 테스트를 수행하실 수 있습니다.

오늘 우리는 동지를 땅에 묻었습니다. 그러나 땅은 이제 우리들의 것입니다.
아직도 우리의 적은 강합니다. 그러나 우리는 그들보다 많습니다.
항상 많을 것입니다.

k09251의 이미지

감사합니다.
알려주신대로 소스도 수정했구요.

그리고 PC에 약간의 문제도 있었습니다.

다시 한번 감사 드립니다.

차카게 살자!!!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.