From: Michael V. <mic...@gm...> - 2006-11-06 15:57:29
|
All, I am having issues reading from the serial port. I am simply writing to it a sync of bytes (0x04, 0x34) with the help of a serial loopback connector on the back of the machine, so I may receive the same data back to me. Unfortunately, I don't get that same data back to me. Bascially, I am wondering if I have read a particular way or do I need to data the data coming in or that is in the serial buffer already? I am using the write/read system calls within my code. Thx. -Mike |
From: Andrei R. <ar...@ya...> - 2006-11-06 16:08:45
|
For a start, try sending printable characters, i.e. bytes in the range of 0x20-0x7E. Byte 0x04 is "control-D" which is interpreted as "end of file" (eof). Read man pages on stty, termios, tty_ioctl. --- Michael Vanacore <mic...@gm...> wrote: > All, > > I am having issues reading from the serial port. I > am simply writing > to it a sync of bytes (0x04, 0x34) with the help of > a serial loopback > connector on the back of the machine, so I may > receive the same data > back to me. Unfortunately, I don't get that same > data back to me. > Bascially, I am wondering if I have read a > particular way or do I need > to data the data coming in or that is in the serial > buffer already? I > am using the write/read system calls within my code. > Thx. > > > -Mike > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support > web services, security? > Get stuff done quickly with pre-integrated > technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 > based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > |
From: Dave H. <dhy...@gm...> - 2006-11-06 16:10:33
|
Hi Mike, > I am having issues reading from the serial port. I am simply writing > to it a sync of bytes (0x04, 0x34) with the help of a serial loopback > connector on the back of the machine, so I may receive the same data > back to me. Unfortunately, I don't get that same data back to me. > Bascially, I am wondering if I have read a particular way or do I need > to data the data coming in or that is in the serial buffer already? I > am using the write/read system calls within my code. Thx. You'll want to put the serial port into raw mode. This covers most aspects: <http://tldp.org/HOWTO/Serial-Programming-HOWTO/> But that article seems to have overlooked cfmakeraw. <http://www.die.net/doc/linux/man/man3/cfmakeraw.3.html> which does most of the work for you (so call tcgetattr, cfmakeraw, and tcsetattr). Otherwise, 0x04 is the same as Control-D, which is treated as end-of-file. -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Michael V. <mic...@gm...> - 2006-11-06 17:31:30
|
All, I am trying to send a message to a camera to control it's lens via a serial connection, so I may start communication with it. The first message to start the connection is allow 2-bytes long with 0x01 as the first byte then a checksum. When I originally start to communicated with it, I sent the 0x01 msg out via write() then polled the serial port via read(). I will try to resetting the settings for the serial port and see if that was the issue. -Mike p.s. Thank you very much for your help. On 11/6/06, Dave Hylands <dhy...@gm...> wrote: > Hi Mike, > > > I am having issues reading from the serial port. I am simply writing > > to it a sync of bytes (0x04, 0x34) with the help of a serial loopback > > connector on the back of the machine, so I may receive the same data > > back to me. Unfortunately, I don't get that same data back to me. > > Bascially, I am wondering if I have read a particular way or do I need > > to data the data coming in or that is in the serial buffer already? I > > am using the write/read system calls within my code. Thx. > > You'll want to put the serial port into raw mode. > > This covers most aspects: > <http://tldp.org/HOWTO/Serial-Programming-HOWTO/> > > But that article seems to have overlooked cfmakeraw. > <http://www.die.net/doc/linux/man/man3/cfmakeraw.3.html> which does > most of the work for you (so call tcgetattr, cfmakeraw, and > tcsetattr). > > Otherwise, 0x04 is the same as Control-D, which is treated as end-of-file. > > -- > Dave Hylands > Vancouver, BC, Canada > http://www.DaveHylands.com/ > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > |
From: Michael V. <mic...@gm...> - 2006-11-06 17:46:00
Attachments:
serial.c
|
Here is my little api for the serial, so I may try to test sending out those messages with. I can't see where the issue lays. -Mike On 11/6/06, Michael Vanacore <mic...@gm...> wrote: > All, > > I am trying to send a message to a camera to control it's lens via a > serial connection, so > I may start communication with it. The first message to start the > connection is allow 2-bytes long with 0x01 as the first byte then a > checksum. When I originally start to communicated with it, I sent the > 0x01 msg out via write() then polled the serial port via read(). I > will try to resetting the settings for the serial port and see if that > was the issue. > > > -Mike > > p.s. Thank you very much for your help. > > > > On 11/6/06, Dave Hylands <dhy...@gm...> wrote: > > Hi Mike, > > > > > I am having issues reading from the serial port. I am simply writing > > > to it a sync of bytes (0x04, 0x34) with the help of a serial loopback > > > connector on the back of the machine, so I may receive the same data > > > back to me. Unfortunately, I don't get that same data back to me. > > > Bascially, I am wondering if I have read a particular way or do I need > > > to data the data coming in or that is in the serial buffer already? I > > > am using the write/read system calls within my code. Thx. > > > > You'll want to put the serial port into raw mode. > > > > This covers most aspects: > > <http://tldp.org/HOWTO/Serial-Programming-HOWTO/> > > > > But that article seems to have overlooked cfmakeraw. > > <http://www.die.net/doc/linux/man/man3/cfmakeraw.3.html> which does > > most of the work for you (so call tcgetattr, cfmakeraw, and > > tcsetattr). > > > > Otherwise, 0x04 is the same as Control-D, which is treated as end-of-file. > > > > -- > > Dave Hylands > > Vancouver, BC, Canada > > http://www.DaveHylands.com/ > > > > ------------------------------------------------------------------------- > > Using Tomcat but need to do more? Need to support web services, security? > > Get stuff done quickly with pre-integrated technology to make your job easier > > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > _______________________________________________ > > gumstix-users mailing list > > gum...@li... > > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > > |
From: Andrei R. <ar...@ya...> - 2006-11-06 18:50:17
|
There's at least one problem: set_baud() does not initialize termios structure, so everything other than what's set by cfmakeraw() is garbage. I'd recommend to keep open(O_RDWR) in your program and comment out all other stuff messing with various settings, you can set all you need using 'stty' just before launching your program. Once you figure proper settings, you can hard-code them. I saw samples that read termios (tcgetattr()), modify a few fields, then do tcsetattr(). That relies on previous settings, a better way is to zero out termios structure, set everything you want, then do tcsetattr(). --- Michael Vanacore <mic...@gm...> wrote: > Here is my little api for the serial, so I may try > to test sending out > those messages with. I can't see where the issue > lays. > > > -Mike > > On 11/6/06, Michael Vanacore > <mic...@gm...> wrote: > > All, > > > > I am trying to send a message to a camera to > control it's lens via a > > serial connection, so > > I may start communication with it. The first > message to start the > > connection is allow 2-bytes long with 0x01 as the > first byte then a > > checksum. When I originally start to communicated > with it, I sent the > > 0x01 msg out via write() then polled the serial > port via read(). I > > will try to resetting the settings for the serial > port and see if that > > was the issue. > > > > > > -Mike > > > > p.s. Thank you very much for your help. > > > > > > > > On 11/6/06, Dave Hylands <dhy...@gm...> > wrote: > > > Hi Mike, > > > > > > > I am having issues reading from the serial > port. I am simply writing > > > > to it a sync of bytes (0x04, 0x34) with the > help of a serial loopback > > > > connector on the back of the machine, so I may > receive the same data > > > > back to me. Unfortunately, I don't get that > same data back to me. > > > > Bascially, I am wondering if I have read a > particular way or do I need > > > > to data the data coming in or that is in the > serial buffer already? I > > > > am using the write/read system calls within my > code. Thx. > > > > > > You'll want to put the serial port into raw > mode. > > > > > > This covers most aspects: > > > > <http://tldp.org/HOWTO/Serial-Programming-HOWTO/> > > > > > > But that article seems to have overlooked > cfmakeraw. > > > > <http://www.die.net/doc/linux/man/man3/cfmakeraw.3.html> > which does > > > most of the work for you (so call tcgetattr, > cfmakeraw, and > > > tcsetattr). > > > > > > Otherwise, 0x04 is the same as Control-D, which > is treated as end-of-file. > > > > > > -- > > > Dave Hylands > > > Vancouver, BC, Canada > > > http://www.DaveHylands.com/ > > > > > > > ------------------------------------------------------------------------- > > > Using Tomcat but need to do more? Need to > support web services, security? > > > Get stuff done quickly with pre-integrated > technology to make your job easier > > > Download IBM WebSphere Application Server > v.1.0.1 based on Apache Geronimo > > > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > > _______________________________________________ > > > gumstix-users mailing list > > > gum...@li... > > > > https://lists.sourceforge.net/lists/listinfo/gumstix-users > > > > > > > #include <stdio.h> > #include <string.h> > #include <unistd.h> > #include <fcntl.h> > #include <errno.h> > #include <termios.h> > #include "serial.h" > > int open_serial(const char *dev, int baud) > { > int fd; > > fd = open(dev, O_RDWR | O_NOCTTY | O_NDELAY); > if(fd == -1) > { > fprintf(stderr, "Err: Unable to open %s\n", > dev); > > return -1; > } > else > { > fcntl(fd, F_SETFL, 0); > > set_baud(fd, baud); > > return (fd); > } > } > > void set_baud(int fd, int baudrate) > { > tcflag_t baudflag; > struct termios options; > > baudflag = parse_baudrate(baudrate); > > cfsetispeed(&options, baudflag); > > cfsetospeed(&options, baudflag); > > //options.c_cflag |= (CLOCAL | CREAD); > cfmakeraw(&options); > tcsetattr(fd, TCSANOW, &options); > > } > > int serial_write(int fd, const void *data, int size) > { > > int n = 0; > > n = write(fd, data, size); > > fprintf(stdout,"Wrote %d bytes to the serial > port\n", n); > > if( n < 0 ) > { > fprintf(stderr,"Err: failed serial > write!\n"); > > return -1; > } > else > { > fprintf(stdout, "Success: serial write!\n"); > > return (n); > } > } > > int serial_read(int fd, void *data, int maxsize) > { > > int nbytes = 0; > > fcntl(fd, F_SETFL, FNDELAY); > > tcflush(fd, TCIFLUSH); > > nbytes = read(fd, data, maxsize); > > > if( nbytes < 0) > { > fprintf(stderr, "Err: failed to read!\n"); > > return -1; > } > else > { > fprintf(stdout,"Success: read %d bytes!\n", > nbytes); > > return nbytes; > } > } > > > int parse_baudrate(int requested) > { > int baudrate; > > switch (requested) > { > #ifdef B50 > case 50: baudrate = B50; break; > #endif > #ifdef B75 > case 75: baudrate = B75; break; > #endif > #ifdef B110 > case 110: baudrate = B110; break; > #endif > #ifdef B134 > case 134: baudrate = B134; break; > #endif > #ifdef B150 > case 150: baudrate = B150; break; > #endif > #ifdef B200 > case 200: baudrate = B200; break; > #endif > #ifdef B300 > case 300: baudrate = B300; break; > #endif > #ifdef B600 > case 600: baudrate = B600; break; > #endif > #ifdef B1200 > case 1200: baudrate = B1200; break; > #endif > #ifdef B1800 > case 1800: baudrate = B1800; break; > #endif > #ifdef B2400 > case 2400: baudrate = B2400; break; > #endif > #ifdef B4800 > case 4800: baudrate = B4800; break; > #endif > #ifdef B9600 > case 9600: baudrate = B9600; break; > #endif > #ifdef B19200 > case 19200: baudrate = B19200; break; > #endif > #ifdef B38400 > case 38400: baudrate = B38400; break; > #endif > #ifdef B57600 > case 57600: baudrate = B57600; break; > #endif > #ifdef B115200 > case 115200: baudrate = B115200; break; > #endif > #ifdef B230400 > case 230400: baudrate = B230400; break; > #endif > #ifdef B460800 > case 460800: baudrate = B460800; break; > #endif > #ifdef B500000 > case 500000: baudrate = B500000; break; > #endif > #ifdef B576000 > case 576000: baudrate = B576000; break; > #endif > #ifdef B921600 > case 921600: baudrate = B921600; break; > #endif > #ifdef B1000000 > case 1000000: baudrate = B1000000; break; > #endif > #ifdef B1152000 > case 1152000: baudrate = B1152000; break; > #endif > #ifdef B1500000 > case 1500000: baudrate = B1500000; break; > #endif > #ifdef B2000000 > case 2000000: baudrate = B2000000; break; > #endif > #ifdef B2500000 > case 2500000: baudrate = B2500000; break; > #endif > #ifdef B3000000 > case 3000000: baudrate = B3000000; break; > #endif > #ifdef B3500000 > case 3500000: baudrate = B3500000; break; > #endif > #ifdef B4000000 > case 4000000: baudrate = B4000000; break; > #endif > default: > baudrate = 0; > } > return baudrate; > } > > unsigned char checksum(unsigned char *data, int > size) > { > unsigned char sum = 0; > > for(size--; size >= 0; size--) > sum += data[size]; > > sum = ~sum; > > sum++; > > return (sum); > > } > > > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support > web services, security? > Get stuff done quickly with pre-integrated > technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 > based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642> _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > |
From: Dave H. <dhy...@gm...> - 2006-11-06 19:01:04
|
Hi Andrei, > Once you figure proper settings, you can hard-code > them. I saw samples that read termios (tcgetattr()), > modify a few fields, then do tcsetattr(). > That relies on previous settings, a better > way is to zero out termios structure, set everything > you want, then do tcsetattr(). Actually that makes alot of sense for working with a serial port which is NOT stdin or stdout. If you're trying to manipulate stdin/stdout then you don't want to start making arbitrary choices, and it's also a good idea to install a Control-C hanlder which restores the original settings (you can normally type stty sane to recover) -- Dave Hylands Vancouver, BC, Canada http://www.DaveHylands.com/ |
From: Michael A. V. <mic...@gm...> - 2006-11-10 02:40:23
|
Dave Hylands wrote: > Hi Andrei, > > >> Once you figure proper settings, you can hard-code >> them. I saw samples that read termios (tcgetattr()), >> modify a few fields, then do tcsetattr(). >> That relies on previous settings, a better >> way is to zero out termios structure, set everything >> you want, then do tcsetattr(). >> > > Actually that makes alot of sense for working with a serial port which > is NOT stdin or stdout. If you're trying to manipulate stdin/stdout > then you don't want to start making arbitrary choices, and it's also a > good idea to install a Control-C hanlder which restores the original > settings (you can normally type stty sane to recover) > > Guys, Thank you very much for your help. The issue turned out to be that I didn't disable hardware flow control, for I was using a serial connector that only had the Tx looping back to the Rx. So my inexperience with RS-232 was to blame here...lol. Again, thank you for your help. -Mike V. |
From: Chad R. <cr...@lu...> - 2006-11-07 19:47:55
|
How will the Gumstix respond to a large MMC card? There are 2GB cards out now - will the Gumstix work with them properly? Thanks, Chad |
From: G E. <gel...@gm...> - 2006-11-07 20:34:03
|
i'm using a 1gig with no problems (bought it on newegg) greg On Nov 7, 2006, at 11:47 AM, Chad Robinson wrote: > How will the Gumstix respond to a large MMC card? There are 2GB cards > out now - will the Gumstix work with them properly? > > Thanks, > Chad > > > ---------------------------------------------------------------------- > --- > Using Tomcat but need to do more? Need to support web services, > security? > Get stuff done quickly with pre-integrated technology to make your > job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache > Geronimo > http://sel.as-us.falkag.net/sel? > cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users |
From: Jesse W. <jes...@gm...> - 2006-11-07 21:55:48
|
I've had good luck with kingston rs-mmc's and I use a 1gig. -- -Jesse W. |