macos - serial - Puerto en serie se cuelga
puerto serie arduino mega (2)
Use el dispositivo /dev/cu.usbserial-A601L9OC
en /dev/cu.usbserial-A601L9OC
lugar, y configure la velocidad a 9600 baudios también. Aquí hay un ejemplo de la publicación de macrumor de Magnus :
strcpy(bsdPath, "/dev/cu.usbserial-A601L9OC");
fileDescriptor = open(bsdPath, O_RDWR);
if (-1 == fileDescriptor)
{
return EX_IOERR;
}
struct termios theTermios;
memset(&theTermios, 0, sizeof(struct termios));
cfmakeraw(&theTermios);
cfsetspeed(&theTermios, 9600);
theTermios.c_cflag = CREAD | CLOCAL; // turn on READ and ignore modem control lines
theTermios.c_cflag |= CS8;
theTermios.c_cc[VMIN] = 0;
theTermios.c_cc[VTIME] = 10; // 1 sec timeout
int ret = ioctl(fileDescriptor, TIOCSETA, &theTermios);
ret = read(fileDescriptor, &c, 1);
Tengo un adaptador USB a serie FTDI conectado a mi Mac. Puedo usar el comando:
screen /dev/tty.usbserial-A601L9OC
Esto abre un terminal serial para el puerto y todo funciona bien. Pero cuando intento enviar caracteres al puerto serie a través del comando:
root# echo ''a'' > /dev/tty.usbserial-A601L9OC
el comando se cuelga y nunca se envía nada. Algo similar sucede cuando trato de conectarme a él en el programa de CA. El programa se bloquea al tratar de abrir el puerto serie:
int fd = open("/dev/tty.usbserial-A601L9OC", O_RDWR | O_NOCTTY | O_SYNC);
Cuando corro en el puerto imprime:
root# stty -f /dev/tty.usbserial-A601L9OC
speed 9600 baud;
lflags: -icanon -isig -iexten -echo
iflags: -icrnl -ixon -ixany -imaxbel -brkint
oflags: -opost -onlcr -oxtabs
cflags: cs8 -parenb
que se ve correcto ¿Alguien tiene alguna idea de por qué estos comandos se cuelgan y nunca se envían al conectarse al puerto serie, pero la pantalla funciona bien? Cualquier ayuda será apreciada.
Actualización: los resultados de obtener información de stty
bash-3.2# stty -a -f /dev/tty.usbserial-A601L9OC
speed 9600 baud; 0 rows; 0 columns;
lflags: -icanon -isig -iexten -echo -echoe -echok -echoke -echonl
-echoctl -echoprt -altwerase -noflsh -tostop -flusho -pendin
-nokerninfo -extproc
iflags: -istrip -icrnl -inlcr -igncr -ixon -ixoff -ixany -imaxbel -iutf8
-ignbrk -brkint -inpck -ignpar -parmrk
oflags: -opost -onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^/; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
Use O_NONBLOCK, de lo contrario, la espera abierta de Carrier Detect.