TL; DR : puedo abrir screen
o putty
iniciar sesión en la terminal para el /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. Se supone que el código en el microcontrolador transmite cualquier carácter escrito en el teclado a la consola. Esto funciona bien con computadoras con Windows 7 y PuTTY. Con Ubuntu, se establece una conexión en la pantalla o la masilla, pero la salida es invisible; solo el cursor se mueve continuamente con 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 intercalación, ^H
, ^E
, así.
El código en el microcontrolador en sí no revela ningún indicio de problema. La matriz char rxBuffer recibe sus caracteres de RCREG1
like so rxBuffer[rxCount] = RCREG1
.
Información adicional (según lo solicitado) :
Actualmente, el código arroja "HelloWorld string" ( TXREG1 = txStr[txCount]
).
Salida dehexdump -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 destty -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 de 32 bits tampoco funcionó, el mismo resultado
Actualización 4/20 :
He colocado un código muy simple en main
:
while (1) {
while (!PIR1bits.RC1IF); //Wait for a byte
sprintf(txStr,"%X",RCREG1);
LCDWriteLine(txStr,0);
continue;
Se supone que debe mostrar el valor hexadecimal RCREG1
en la pantalla LCD. Para a
la letra escrita en el teclado, Windows produce 61 como se esperaba, pero en Linux obtengo E1
. Por extraño que parezca, los últimos 4 bits son correctos independientemente de lo que escriba. Pero para los 4 primeros obtengo valores generalmente de D
a F
. Entonces, para el valor hexadecimal 62, obtengo E2
.
Parece que Ubuntu está configurando bit7 en todos los caracteres que recibe.
Por ejemplo: Enviar 'a' es 0x61 o 0b01100001 y está recibiendo 0xE1 o 0b11100001.
En formato serie, el bit0 se envía primero y el bit7 se envía al final, por lo que esto puede suceder si la configuración de su terminal no coincide. Por ejemplo, si el PIC envía 7 bits de datos, sin paridad, 1 bit de parada, pero Ubuntu espera 8 bits de datos, sin paridad, 1 parada, entonces Ubuntu registrará un bit extra y bit7 siempre estará alto.
Así que asegúrese de que la configuración de USB a serie/terminal coincida exactamente con la configuración de PIC UART. Espero que ayude. -Vince
Su configuración de stty está desactivando el eco local (¿es eso lo que se pretendía?)
Intente usar minicom o picocom en lugar de stty.
También puede probar 'pantalla /dev/ttyUSB0 9600'
screen /dev/ttyUSB0 9600
es exactamente como me estoy conectando, pero sin resultado. La tasa de baudios es 100% correcta. Lo he comprobado y vuelto a comprobar. Probé minicon pero no picocom, veré si ese funciona. Eco .. . .observación interesante. . . Creo que he intentado configurar el eco local, pero no estoy 100% seguro. Informare si averiguo algo
yippie
hexdump -C
eso es un capitalC
?yippie
stty -aF /dev/ttyUSB0
?yippie
Sergiy Kolodyazhnyy
yippie
yippie
man stty
el significado de todas las banderas enumeradas.Sergiy Kolodyazhnyy
yippie
Sergiy Kolodyazhnyy
yippie
Sergiy Kolodyazhnyy