PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : atmega <-> cp210 unter Linux Problem



Lurchi
19.04.2010, 21:39
Hallo,

vorweg - warum dieses Forum: Bin mir nicht sicher was das Problem ist. Evtl. hat einer der C/C++ Entwickler ein ähnliches Problem (mein Code ist Komplett in C++; allerdings nutze ich hier C++ zur Strukturierung des Codes - keine Sorge: kein new und keine Vererbung oder Templates - es kann angenommen werden, das es sich bei dem hier relevanten Code um C-Code in Klassen handelt)

Zudem Programmiere ich bis auf die Low Level Funktionen am Backend OS unabhängig - also gleicher Code und Strukturen für Windows / Linux.

Zum Problem:
Der ATMega2560 und das Linuxsystem wollen nicht miteinander kommunizieren. Unter Windows gehts.

Ich habe auf meinem atmega2560 (von Robotikhardware) eine mit Interrupts arbeitende UART Schnittstelle implementiert. Um die Kommunikation abzusichern übermittle ich eine CRC8 Prüfsumme bei jeder Datenübertragung.
Unter Windows der Silicon Lab VCP und unter Linux (debian lenny) im Kernel enthaltener cp210 treiber. Hardware meldet sich ohne mucken.

Auf meinem Windows System klappt das Öffnen des COM Ports ohne Probleme und es kommen zu 98% saubere Werte an. Gelegentlich sind Prüfziffernfehler drin deren Ursache ich noch nicht ermitteln konnte.

Unter Linux hatte ich enorme Probleme die Schnittstelle überhaupt ans laufen zu bekommen (open und ioctl geht, select kam regelmäßig mit Fehlercode 22 zurück) Gelegentlich scheint der Code zu funktionieren - leider habe ich aber ca. 98 % Prüfziffernfehler.

Die Übertragung zum Atmega scheint aber zu funktionieren (gesendete Commands werden korrekt bearbeitet), lediglich das Senden durch den AtMega oder Lesen der gesendeten Daten durch das Linuxsystem macht Probleme.

Vermutung meinerseits:
1.) elektrische Probleme. Eher Unwahrscheinlich, da der Linuxrechner an gleicher Batterie und Stromversorgung hängt wie Atmega.
2.) Fehlerhafter Umgang mit ttyUSB0 - unklar, ich benutze das Ding wie eine reguläre Serielle (und auf dem gleichen Rechner geht der Code an einem anderem COM Port ohne zu mucken.
3.) Feenstaub und Kobolddreck...

Hat jemand einen Tipp? Oder mal ähnliche Probleme gehabt? Oder evtl. eine Idee wie ich das Problem ohne Oszilloskop eingrenzen kann.

Kommunikation:
9600 8N1, 25 Bytes pro Transfer, Pull-Protokoll - Linux/Windows System sendet ein Command, AtMega antwortet.
Frequenz: Abfrage ca. alle 100 ms.

Danke im Voraus

Lurchi

Lurchi
10.05.2010, 20:48
Problem habe ich mittlerweile gelöst.

Die Baud-Rate wurde nicht korrekt gesetzt. (Obwohl Sie im Code eigentlich gesetzt wurde) Unter Windows funktioniert das ganze ohne Probleme, unter Linux musste nochmal mit "cfsetspeed(&terminal, B9600);" nachhelfen dann geht's.
Ist mir etwas unverständlich warum - aber es geht.

Für alle die den CP210X Treiber unter Linux verwenden. Der hat einen sehr komfortablen Debug Modus.

Grüße

Lurchi :-)