Hallo Zusammen,
ich habe aus einem Buch ein Programm abgetippt, mit dem ich eine
USB-Schnittstelle ansteuern möchte. Soweit läuft das Programm zwar ohne
Fehler, jedoch ohne erkennbare Schreib-/Leseaktivität auf die
Schnittstelle.
Der Programmer von AVR zumindest zeigt dahingehend keine Aktivität.
Nach meiner Einschätzung müsste der Fehler in untem angegebenem Code zu
finden sein, er verschließt sich mir jedoch.
Die TERM_DEVICE habe ich mit /dev/ttyS0 bis S9 sowie mit /devv/ttyUSB0
bis USB7 ausprobiert, jedoch ohne Erfolg.
1
# define TERM_DEVICE "/dev/ttyS4" /* COM1 */
2
# define TERM_SPEED B9600 /* Baud - Bit pro Sekunde */
3
4
intmain()
5
{
6
intfd,old_flags;/* */
7
ssize_tlength;/* Datentyp des Rückgabewertes von sizeof */
8
charbuffer[16];
9
structtermiosterm_attr;
10
fd_setinput_fdset;
11
12
if((fd=open(TERM_DEVICE,O_RDWR))==-1)
13
{
14
perror("terminal: Can't open device "TERM_DEVICE);
Als User gehöre ich folgenden Groups an:
adm uucp dialout cdrom plugdev lpadmin admin sambashare
Mit lsusb finde ich den zum Programmer gehörenden Eintrag:
Bus 004 Device 002: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x
Composite Device
Hat evtl. jemand eine grundsätzlichen Lösungsansatz oder vielleicht
einen Tip, wo ich den Fehler finden kann?
Vielen Dank im voraus.
Micha
P.S.: Ich habe im Forum nach ähnlichen Themen ausschau gehalten, ohne
Erfolg. Sollte mir da etwas entgangen sein entschuldigt bitte diesen
Eintrag.
Micha schrieb:> Bus 004 Device 002: ID 10c4:ea60 Cygnal Integrated Products, Inc. CP210x> Composite Device
dann versuch dich vielleicht an einer UDEV-Rule:
In eine eigene Datei (z.B. 99-programmer.rules) im /etc/udev/rules.d.
(sudo)
udevadm control --reload-rules
Gerät einstecken.
Wenn alles passt: /dev/myprogrammer statt /dev/ttyUSB* verwenden.
Wenn du mehrere Geräte mit selber VID/PID hast: SYSFS{serial} o.Ä. mit
auswerten.
> Die TERM_DEVICE habe ich mit /dev/ttyS0 bis S9 sowie mit /devv/ttyUSB0> bis USB7 ausprobiert, jedoch ohne Erfolg.
meinst Du jeweils die erste Programmzeile, also anstatt
# define TERM_DEVICE "/dev/ttyS4"
dann
# define TERM_DEVICE "/dev/ttyUSB0" ,etc.?
@Smörre R.
Ausprobiert habe ich /dev/ttyS0 , /dev/ttyS1 usw., ebenso /dev/ttyUSB0,
/dev/ttyUSB1 usw.. Leider Ohne erfolg.
@Ernst B* : UDEV-Rule kannte ich noch nicht, werde ich aber gleich
versuchen. Klingt jedenfalls vernünftig, idvendor und idproduct zu
implementieren.
@g457: Leider gibt es in /dev keinen Eintrag ttyUSBn.
Bitte versteht meinen Post nicht als Versuch, euch meine
Programmierproblematik aufs Auge zu drücken und mir eine Lösung zu
erarbeiten. Ich komme mit den C-Grundlagen (inklusive Pointer etc) ganz
gut zurecht, nun wird es aber Zeit, die Schnittstellenprogrammierung zu
erlernen.
Finde ich sehr spannend und bin euch für die bisherigen Tipps sehr, sehr
dankbar und werde diese gleich mal ausprobieren.
Werde Erfolgsmeldung oder mein Scheitern hier posten.
Micha
@g457: Leider gibt es in /dev keinen Eintrag ttyUSBn.
Muss ich korrigieren. Der Eintrag in /dev lautet ttyUSB0. Das Programm
scheint mit dieser Zuweisung ja ohne Fehler zu funktionieren, jedoch
sehe ich keine Aktivität der Schnittstelle. Denn es sollte eine grüne
LED beim übertragen kurz aufleuchten.
@Ernst B* : Zu UDEV-Rule. Ich habe die Datei mit den entsprechenden
Einträgen erstellt, rules reload durchgeführt und sogar meinen PC neu
gestartet.
Folgende Fehlermeldung wird angezeigt:
terminal: Can't open device /dev/myprogrammer: No such file or directory
Ich habe mal die Programmdatei im Anhang geladen. Vielleicht liegt der
Fehler auch an anderer Stelle.
> Denn es sollte eine grüne LED beim übertragen kurz aufleuchten.
Überträgst Du dazu auch schnell genug? Mach mal sowas wie
$ cat < /dev/urandom > /dev/ttyUSB0
(..behelfsweise eine Datei mit gegenstellenverträglichem Inhalt
übertragen..).
Und ad UDEV: Bevor Du noch eine weitere Baustelle aufmachst brings erst
mal hardcoded zum laufen. Danach dann CLI-Parameter und
UDEV-Vereinfachungen einzuführen ist das Sahnehäubchen - für DANACH.
Eine eigene Frage?
Dieser Thread ist über 13 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.