¿Alguien sabe el comando mágico para configurar la velocidad en baudios, la paridad, el control de flujo, etc. para un puerto RS-232 en la CLI de MacOS X?
¿Alguien sabe el comando mágico para configurar la velocidad en baudios, la paridad, el control de flujo, etc. para un puerto RS-232 en la CLI de MacOS X?
Para leer de mi arduino o attiny, utilizo este sencillo programa:
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>
int main(int argc, char **argv) {
int fd;
ssize_t len;
unsigned char buf[8192];
struct termios tio;
fd = open( argv[1], O_RDONLY | O_NOCTTY | O_NONBLOCK );
cfmakeraw(&tio);
cfsetispeed(&tio,B9600);
cfsetospeed(&tio,B9600);
tcsetattr(fd,TCSANOW,&tio);
for(;;) {
len = read( fd, &buf[0], 8192 );
if( len > 0 ) write(1,buf,len);
sleep(1);
}
}
En el mac, usar el chip FTDI (Arduino Duemilanove) para la serie significa que el comando stty no tiene un efecto duradero. Una vez que se cierra el puerto, vuelve a los parámetros predeterminados. Mientras se ejecuta este programa, puede usar stty para modificar los parámetros.
Aquí está el valor predeterminado:
$ stty -f /dev/tty.usbserial-* -a
speed 9600 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb
Luego, si el programa C se está ejecutando:
$ stty -f /dev/tty.usbserial-A6003SHf -a
speed 9600 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel ignbrk -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb -hupcl
discard dsusp eof eol eol2 erase intr kill lnext
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
quit reprint start status stop susp werase
^@ ^@ ^@ ^@ ^@ ^@ ^@
Puede cambiar la velocidad en baudios si, por ejemplo, el Arduino está utilizando Serial.begin (19200) para una transmisión más rápida.
$ stty -f /dev/tty.usbserial-* 19200
$ stty -f /dev/tty.usbserial-*
speed 19200 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel ignbrk -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb -hupcl
discard dsusp eof eol eol2 erase intr kill lnext
^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
quit reprint start status stop susp werase
^@ ^@ ^@ ^@ ^@ ^@ ^@
Una vez que se cierra el programa C, el puerto serie vuelve a su valor predeterminado.