TL; DR : Ich kann im Terminal öffnen screen
oder putty
eine Sitzung mit dem durchführen /dev/ttyUSB0
, aber übertragene Zeichen sind unsichtbar. Was könnte das mögliche Problem sein?
Ich habe ein PICDEM-Board mit PIC18F87J11- und PIC18F8722-Mikrocontrollern und verbinde das Board über ein serielles USB-Kabel mit meinem Ubuntu-Linux-Laptop. Der Code im Mikrocontroller soll jedes auf der Tastatur eingegebene Zeichen zurück an die Konsole übertragen. Dies funktioniert gut mit Windows 7-Computern und Putty. Bei Ubuntu - es wird eine Verbindung in Bildschirm oder Putty hergestellt, aber die Ausgabe ist unsichtbar - nur der Cursor bewegt sich bei jedem Tastendruck kontinuierlich (dasselbe Verhalten bei Windows 7).
Tun hexdump
zeigt Folgendes:
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
zeigt, dass Zeichen vorhanden sind, außer dass sie in der Caret-Notation auftauchen, ^H
, ^E
, so.
Der Code auf dem Mikrocontroller selbst zeigt keine Hinweise auf Probleme. Das char-Array rxBuffer erhält seine Zeichen von RCREG1
so rxBuffer[rxCount] = RCREG1
.
Zusätzliche Informationen (wie gewünscht) :
Derzeit spuckt der Code "HelloWorld string" ( TXREG1 = txStr[txCount]
) aus.
Ausgabe vonhexdump -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 |................|
Die Ausgabe vonstty -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
Update : Das Ausprobieren eines anderen Computers mit Ubuntu 14.04 32 Bit hat auch nicht funktioniert, das gleiche Ergebnis
Aktualisierung 20.04 .:
Ich habe sehr einfachen Code in die eingefügt main
:
while (1) {
while (!PIR1bits.RC1IF); //Wait for a byte
sprintf(txStr,"%X",RCREG1);
LCDWriteLine(txStr,0);
continue;
Es soll den Hex-Wert von RCREG1
auf dem LCD-Bildschirm anzeigen. Für a
auf der Tastatur eingegebene Buchstaben erzeugt Windows wie erwartet 61, aber unter Linux bekomme ich E1
. Seltsamerweise sind die letzten 4 Bits korrekt, unabhängig davon, was ich eingebe. Aber für die Top 4 erhalte ich normalerweise Werte von D
bis F
. Also für den Hex-Wert 62 bekomme ich E2
.
Es scheint, dass Ubuntu Bit7 in allen empfangenen Zeichen setzt.
Zum Beispiel: Das Senden von 'a' ist 0x61 oder 0b01100001 und es empfängt 0xE1 oder 0b11100001.
Im seriellen Format wird Bit0 zuerst und Bit7 zuletzt gesendet, daher kann dies passieren, wenn Ihre Terminaleinstellungen nicht übereinstimmen. Wenn der PIC beispielsweise 7 Datenbits, keine Parität, 1 Stoppbit sendet, aber Ubuntu 8 Datenbits, keine Parität, 1 Stopp erwartet, dann taktet Ubuntu ein zusätzliches Bit ein und Bit7 wird immer hoch sein.
Stellen Sie also sicher, dass Ihre USB-to-Serial/Terminal-Einstellungen genau mit den PIC-UART-Einstellungen übereinstimmen. Hoffentlich hilft das. - Vince
Ihre Stty-Einstellungen deaktivieren das lokale Echo (war das beabsichtigt?)
Versuchen Sie es mit minicom oder picocom anstelle von stty.
Du könntest es auch mit 'screen /dev/ttyUSB0 9600' versuchen.
screen /dev/ttyUSB0 9600
ist genau das, was ich verbinde, aber kein Ergebnis. Die Baudrate ist zu 100% korrekt - das habe ich überprüft und erneut überprüft. Minicon ausprobiert, aber nicht picocom, mal sehen, ob das funktioniert. Echo .. . .interessante Beobachtung . . . Ich glaube, ich habe versucht, das lokale Echo einzustellen, bin mir aber nicht 100% sicher. Werde berichten wenn ich was erfahre
Jippie
hexdump -C
ist ein KapitalC
?Jippie
stty -aF /dev/ttyUSB0
?Jippie
Sergiy Kolodyazhnyy
Jippie
Jippie
man stty
die Bedeutung aller aufgeführten Flags.Sergiy Kolodyazhnyy
Jippie
Sergiy Kolodyazhnyy
Jippie
Sergiy Kolodyazhnyy