Moin, hat einer von euch mal probiert mit dem LogicPort das USB-Protokoll zu analysieren? Es gibt meines Wissens ja keinen nativen Interpreter dafür. Vielleicht hat jemand ein Script oder ähnliches um aus gespeicherten Daten sinnvolle USB-Frames zu basteln. Irgendwelche anderen Ideen wie man das mit dem LogicPort angehen könnte?
hab zwar nicht wirklich ahnung aber reicht die abtastfrequnz vom logic aus um den eigenen bus abzutasten (nyquist)?
Da der LogicPort kann mit bis zu 500MHz Abtasten, momentan taste ich mit 50MHz ab, was beinahe 4-facher Busfrequenz entspricht (Annahme hier 12MBit/s grob 12MHz?). Ich sehe die Signale, aber wegen NRZI und Bit-Stuffing ist damit erstmal nicht viel anzufangen.
Habe pcinstruments eine Nachricht geschickt und bei denen nachgefragt. Laut Harrison Young ist kein Interpreter für USB in Planung.
Benjamin K. schrieb: > ist kein Interpreter für USB in Planung. Kannst du aus dem Originalprogramm sowas wie ein .vcf oder .csv in maximaler zeitlicher Auflösung, Rohdaten, exportieren? Dann steht einem in C oder C++ oder VHDL oder verilog geschriebenem Encoder nichts entgegen. Notfalls kann man mit nem .csv sogar M$-Excel bemühen... mf
Ich habe mal ein Bildschirmfoto eines Samples gemacht. In der exportierten Datei stehen die Samplerate und ein Sampleindex. Der Index steht jeweils vor den Messkanaldaten. Hier der Beispielauszug aus einer exportierten Datei (nicht die Daten des Screenshots): "SamplePeriod","TriggerSample","CompressedData" "0.00000002","24999994","True" "SampleNumber","D-","D+" "000000000","0","0" "025000001","0","0" "274853690","1","1" "274853691","0","0" "278311098","1","0" "292389181","0","0" "293231714","1","0" "293281640","0","1" "293281644","1","0" "293281648","0","1" "293281652","1","0" "293281657","0","1" Wenn ich das richtig interpretiere, dann muss ich zum "Triggersample" die "Samplenumber" addieren und komme dann auf den Samplindex wie er in der Software angezeigt werden kann. Das "CompressedData" konnte ich jetzt nicht abschalten, macht aber wahrscheinlich nichts. Soweit ich das sehen kann werden jetzt, wie im Handbuch beschrieben, die jeweiligen Signalwechsel gespeichert. Werde mal versuchen die Daten in GNUplot darzustellen. Den Screenshot habe ich als Diskussionsgrundlage angehängt. Soweit ich das auf die Schnelle mit "USB 2.0" von H.J.Kelm interpretieren konnte sieht man bei "-8us" den SOP mit Full-Speed [vergleiche Seite 51]. Bei etwa "-5us" sieht man das EOP. Vor und nach dem Paket ist das ganze im Idle-Zustand (Full-Speed), da D+ (grünes Kabel) auf HIGH und D- (weißes Kabel) auf LOW liegt. Die Frage die ich jetzt habe ist, was sehe ich den hier genau? Hat jemand damit Erfahrung und kann mir das mal Referenz weiter dekodieren? Es müsste sich um das erste gesendete Paket des Host an die Function nach dem einstecken der Function handeln. Anregungen willkommen
Schnitz dir doch einen Decoder in VHDL. Das geht wunderbar mit ghdl, gtkWave und ein paar Zeilen Code.
da müsste man aber erst einmal VHDL können... Außerdem müssen die Daten vorher noch aufbereitet werden, weil ja nur die Zustandswechsel gespeichert werden. Die differentiellen "0" und "1" ohne Zustandswechsel fehlen also. Mal schauen wie ich das bewerkstellige.
ich bin einen Schritt weiter, hab mir in Java mal eine NRZI-Dekodierung gebastelt. Das Programm liest momentan eine vom LogicPort erzeugte .CSV-Datei ein, berechnet die Samplerate und wertet entsprechend die komprimierten Daten aus. Sample-Fehler werden erkannt und entsprechend markiert. Als Ausgabe werden die binären 1 und 0 zeilenweise ausgegeben. Es wird zudem EOP erkannt, so dass man die einzelnen Pakete gut aus einander halten kann. Ein erster Test war ganz vielversprechend. Um dies in GTKWave zu importieren muss ich die Daten der CSV-Datei wohl in ein gängiges Format konvertieren. Samplen sinnvoller Daten stellt sich allerdings momentan als echtes Problem dar. Ich habe mein funktionierendes USB-Gerät mal als einziges Gerät an mein Notebook gesteckt und den LogicPort an einen PC. Es hat den Anschein, dass der Host (Notebook) immer nur SETUP-Pakete sendet. Es ist mir bisher nicht gelungen mal die Enumeration zu samplen. Da muss sich also am Trigger noch was konfigurieren lassen.
Also vorne auf dem Bild hast Du eine 0x80 - wenn das kein SOP ist, toll!
Hallo,
>Sample-Fehler werden erkannt und entsprechend markiert.
Klingt echt gut. Eine Frage hätte ich aber: Fehler beim Dekodieren
werden erkannt und korrigiert oder erkannt aber (noch) nicht korrigiert?
Was meinst Du damit?
Gruß Klaus
@Klaus: soweit ich das sagen kann, bestehen diese Fehler dadurch, dass wohl genau im Pegelwechsel gesampelt wird. Dadurch ist ein Signal schon auf "HIGH" während das andere noch auf "LOW" ist. Im nächsten Sample stimmt es dann. Die Differenz zwischen den Samplen ist also immer 1. "Echte" Sample sind, je nach Abtastfrequenz, länger. Etwa 4 (50MHz) bis 8 (100MHz) mal so lang. Die Länge wird natürlich berechnet und ist nicht starr vorgegeben. Wann immer das Programm also auf zwei Sample trifft, deren Sampleindex genau 1 auseinander liegt, wird angenommen, dass es sich um einen Fehler handelt. Was eigentlich immer der Fall sein dürfte. @Sepp: Auch ein ein "SETUP" hat ein SOP ;-) Das Bild stammte noch von einer ersten Messung, bei welcher mein Proband mit einem ganzen Haufen anderer Geräte am USB der Messstation hingen. Da war ich "besonders" clever ;-) Hatte mich schon gewundert, dass mein USB 1.1 Gerät plötzlich Synch-Frames senden kann ... Leider scheint der interne Speicher des LogicPort nicht für längeres USB-Sampling auszureichen. Vielleicht ist das auch der Grund warum es, noch, keinen Interpreter gibt. Wenn Interesse besteht, dann kann ich den Quellcode zur Verfügung stellen. Wäre schön, wenn man zum Schluss in der Auswertung alle Nachrichten einzeln ausgewertet sieht. Gruß Benny
Moin, für alle die es interessiert. Ich habe für mein ursprüngliches anliegen folgende Lösung gefunden. Es gibt unter Linux (wenigstens) zwei Softwarepakete mit denen man grob USB-Kommunikation debuggen kann. Zum einen wäre da Wireshark zum anderen vusb-analyzer. Für beide Programme MUSS "usbmon" (ein Debuggin-Tool des Kernels) installiert und aktiviert sein. Bei Ubuntu scheint usbmon als Standard aktiviert zu sein. Gruß Benny
Der hier kann USB: http://basic.io/index.php/category-analyzers/alogic-analyzer-detail Die Software gibts als Download mit Beispielen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.