From: Chuck Messenger <chuckm@rochester.rr.com>
To: linux-serial@vger.kernel.org
Subject: Trouble reading from my serial device (a microcontroller)
Date: Thu, 20 Nov 2003 14:22:52 -0500 [thread overview]
Message-ID: <bpj3mo$6th$1@sea.gmane.org> (raw)
I'm unable to read from a serial device under Linux (Mandrake 9.1,
2.4.21-0.13mdk kernel), but the device works find in Windows. I'm
hoping someone can offer me suggestions.
My device is a Basic Stamp microcontroller, which I've programmed to
spit out a certain byte continuously -- 0x40 -- at 38400 baud,n,8,1. The
device loops RTS back to DSR (i.e. it connects pins 6 and 7 of the 9-pin
serial connector -- DSR and RTS). Other than that, only Rx and Tx are
connected (and ground, of course).
I know the hardware works (both controller and PC), because I can boot
Win2k on the same machine and run a short program I wrote which
continuously dumps to the console whatever comes in.
Also, I know that things are _basically_ configured right, in my Linux
boot, since I can run "statserial /dev/tts/0", which shows, in real
time, the status of the DSR line. When I unplug from my device, DSR
goes low; when I plug it back in, DSR goes high.
I tried writing a simple port-dumping program on Linux, based on Peter
Baumann's sample in his Serial Programming Howto:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#define BAUDRATE B38400
#define MODEMDEVICE "/dev/tts/0"
#define _POSIX_SOURCE 1 /* POSIX compliant source */
int
main()
{
int fd,c, res;
struct termios oldtio,newtio;
fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY );
if (fd < 0) {
perror(MODEMDEVICE);
exit(-1);
}
tcgetattr(fd, &oldtio); /* save current port settings */
memset(&newtio, 0, sizeof(newtio));
newtio.c_cflag = BAUDRATE | /*CRTSCTS |*/ CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR // ignore parity errors
| IGNBRK; // ignore BREAK characters
newtio.c_oflag = 0;
/* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 1; /* blocking read until 1 chars received */
tcflush(fd, TCIFLUSH); // Flush an data received by not read
tcsetattr(fd,TCSANOW,&newtio);
while (1) { /* loop for input */
char buf[1];
res = read(fd,buf,1); /* returns after 1 chars have been input */
printf("%02x ", buf[0]);
fflush(stdout);
}
tcsetattr(fd,TCSANOW,&oldtio);
return 0;
}
However, the program fails to read any bytes -- it hangs at the read().
I've tried running serlook, but that, too, failed to see any bytes.
Any suggestions?
I've tried 9600 baud instead of 38400 -- still no luck (although it
works under Win2k).
Poking around, I've seen mention of the DCD control line -- could that
be the problem (i.e. does the Linux serial driver require it, somehow?
I don't have it hooked up.)
- Chuck Messenger
next reply other threads:[~2003-11-20 19:40 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-11-20 19:22 Chuck Messenger [this message]
2003-11-20 21:07 ` Trouble reading from my serial device (a microcontroller) Chuck Messenger
-- strict thread matches above, loose matches on Subject: below --
2003-11-20 20:42 Ed Vance
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='bpj3mo$6th$1@sea.gmane.org' \
--to=chuckm@rochester.rr.com \
--cc=linux-serial@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.