serie serial puerto protocolo por para mega libreria hexadecimal enviar configurar comunicacion macos unix serial-port posix ftdi

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.