TL; DR : puedo abrir la sesión screen
o putty
en el terminal al /dev/ttyUSB0
, pero los caracteres transmitidos son invisibles. ¿Cuál podría ser el posible problema?
Tengo una placa PICDEM con microcontroladores PIC18F87J11 y PIC18F8722, conectando la placa a través de un cable serial a USB a mi computadora portátil Ubuntu Linux. El código del microcontrolador debe transmitir a la consola cualquier carácter escrito en el teclado. Esto funciona bien con computadoras con Windows 7 y masilla. Con Ubuntu: hay una conexión establecida en pantalla o en masilla, pero la salida es invisible; solo el cursor se mueve de forma continua en cada pulsación de tecla (que es el mismo comportamiento con Windows 7).
Hacer hexdump
revela lo siguiente:
skolodya@ubuntu:$ sudo hexdump -c /dev/ttyUSB0
[sudo] password for xieerqi:
0000000 \b \b \b \b \b \b \b \b \b \b \b \b \b \b \b \b
*
0001900 \b \b \b \b \b \b \b \b \b \b \b \b \b \b \n \n
0001910 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
cat /dev/ttyUSB0
revela que los caracteres están ahí, excepto que aparecen en la notación de caret, ^H
, ^E
, así.
El código en el microcontrolador no revela ningún indicio de problema. El array de caracteres rxBuffer recibe sus caracteres de RCREG1
como así rxBuffer[rxCount] = RCREG1
.
Información adicional (según se solicite) :
Actualmente, el código está escupiendo "HelloWorld string" ( TXREG1 = txStr[txCount]
).
Salida de hexdump -C /dev/tty | head -n 10
skolodya@ubuntu:$ hexdump -C /dev/ttyUSB0 | head -n 10
00000000 0f 01 17 0f 09 0c 0a 08 15 0c 0c 0f 01 17 0f 09 |................|
00000010 0c 0a 08 15 0c 0c 0f 01 17 0f 09 0c 0a 0f 01 17 |................|
00000020 0f 09 0c 0a 08 15 0c 0c 0f 01 17 0f 09 0c 0a 08 |................|
00000030 15 0c 0c 0f 01 17 0f 09 0c 0a 0f 01 17 0f 09 0c |................|
00000040 0a 08 15 0c 0c 0f 01 17 0f 09 0c 0a 08 15 0c 0c |................|
00000050 0f 01 17 0f 09 0c 0a 0f 01 17 0f 09 0c 0a 08 15 |................|
00000060 0c 0c 0f 01 17 0f 09 0c 0a 08 15 0c 0c 0f 01 17 |................|
00000070 0f 09 0c 0a 0f 01 17 0f 09 0c 0a 08 15 0c 0c 0f |................|
00000080 01 17 0f 09 0c 0a 08 15 0c 0c 0f 01 17 0f 09 0c |................|
00000090 0a 0f 01 17 0f 09 0c 0a 08 15 0c 0c 0f 01 17 0f |................|
La salida de stty -aF /dev/ttyUSB0
skolodya@ubuntu:$ stty -aF /dev/ttyUSB0
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^H; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 100; time = 2;
-parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
Actualización : probar una computadora diferente con Ubuntu 14.04 32 bits tampoco funcionó, el mismo resultado
Actualización 4/20 :
He colocado un código muy simple en el main
:
while (1) {
while (!PIR1bits.RC1IF); //Wait for a byte
sprintf(txStr,"%X",RCREG1);
LCDWriteLine(txStr,0);
continue;
Se supone que muestra el valor hexadecimal de RCREG1
en la pantalla LCD. Para a
, la letra escrita en las ventanas del teclado produce 61 como se esperaba, pero en Linux obtengo E1
. Curiosamente, los últimos 4 bits son correctos independientemente de lo que escribo. Pero para los 4 primeros, por lo general obtengo valores de D
a F
. Así que para el valor hexadecimal 62, obtengo E2
.