|
|
Diskussion:Hantek Protokoll[Bearbeiten] Prüfsumme der gesamten DatenIch konnte die Prüfsumme über alle Daten bei dem Bildschirm-Snapshot nicht nachvollziehen. Weder die reinen Nutzdaten, noch die einzelnen Pakete mit oder ohne Protokolldaten, die Summe war nie richtig. Jede mir sinnvoll erscheinende Kombination habe ich ausprobiert, ohne Erfolg. Peter
Laut Hantek ist das protokol für screenshot empfang so aufgebaut: 53 SS SS A0 01 ZZ ZZ .. ZZ ZZ YY XX - ist summe aller ZZ bytes aus sämtlichen frames, genaue wortlaut
"XX is expressing LCD Data total cumulative and the end of the transmission"
Ich habe weder eine information ob die frames tatsächlich immer gleich sind,
noch über die anzahl der frames. Danke, die YY Prüfsumme ist klar, die stimmt auch, aber die berechnete XX Prüfsumme paßt nicht mit der gesendeten überein. Wie du sagst, es geht auch ohne, wer braucht ein Protokoll :-) Peter Die Prüfsumme über alle empfangenen Datenpakete stimmt bei dem Kommando 0x10 'Datei lesen', bei dem Bildschirm-Snapshot stimmt sie nicht. Obwohl die Daten mit derselben Prozedur eingelesen wurden. Peter [Bearbeiten] Bildschirm-Snapshot - ProtokollEs kommt oft vor das die Kommandos bei der Antwort vom DSO nicht stimmen bzw. eine Bedeutung haben die ich nicht kenne. Als Beispiel mitten in einer Übertragung ändert sich das Antwortkommando von 0xA0 auf 0x92, was die Antwort auf das Bedienfeld sperren ist: 53 E3 27 A0 01 00 00 00 .. .. Paket mit 10208 Bytes Das DSO wurde während der Übertragung nicht berührt und das Sperren-Kommando auch nicht gesendet. Alles sehr seltsam, zumindest stimmt die Prüfsumme pro Paket immer, auf das kann man sich verlassen. Peter Es wird auch direkt nach dem Start eines Bildschirm-Snapshots öfter mit 53 04 00 92 01 00 EA oder 53 04 00 92 02 ED D8, also den Antwort-Kommandos '92 01' und '92 02' vom DSO geantwortet. Mir kommt vor, die 0x92 bedeutet ungefähr "bin gerade beschäftigt, bitte probier's nochmal'. Wenn ich mich beim Abholen der Snapshots daran halte, und die 0x92 bei vorhandenen Daten in einem Paket wie eine 0xA0 behandle, noch dazu die Längenangaben in der Paketen ignoriere, dann lauft das Ding ohne Probleme. Peter Auf der suche nach dem seltsamen "92" habe die chinesischen dokumente von Hantek durchgeguckt und nur ein (abgesehen von den 2 schon bekannten) hinweis gefunden: Beim "waveform abholen" beispiel gibts ein 53 03 00 92 02 XX als antwort auf "do DSO suspend acq." -> 53 04 00 12 02 00 XX (wieder starten ist 53 04 00 12 02 01 XX. In dem screenshot beispiel ist nix drin,auch die reihenfolge sehr sparsam beschrieben : PC send DSO 53 02 00 20 XX, DSO answering 53 x0 x1 A0 01 .... and 53 x0 x1 A0 02 sum XX - kein wort zum sum oder sonst was. Zur error handling beim screenshot abholen steht weiterhin folgendes: Exception handling: if the DSO after a certain period of time is not responding the host computer will automatically repeat sending the command a certain number of times, if still no answer it will raise a communication timeout. Alles in allem sind die infos die ich bekommena habe (nach massiven druck als beispiel dafür das die an die SDK denken) wenig brauchbar, den grossten teil muss man sowieso selber "entdecken". Andererseits auch die kleinen schritte bringen uns weiter. Übrigens, auf deiner website schreibst du "geplannt start/stop acq.", dafür kannst du wunderbar das 53 04 00 12 00 00/01 benutzen. Klar geht auch über die Virtuellen tasten, die sind aber model abhängig - die kontrole über 0x12 0x00 befehl ist aber model unabhängig.
[Bearbeiten] DSO Start/Stop - ProtokollHallo Thomas, bei meiner Firmware 120224.0 ist das Protokoll etwas anders. Start/Stop ist vertauscht und die Antwort ist anders: PC an DSO -> Stop Akquisition ist "53 04 00 12 00 01 6A" PC an DSO -> Start Akquisition ist "53 04 00 12 00 00 69" Peter Das Kommando übergeht nicht die Schaltfläche am DSO, wenn also am DSO auf STOP gedrückt wurde, kann man es mit diesem Kommando nicht aufheben, finde ich sinnvoll. Peter
laut Hantek doku ist es richtig, entspricht aber nicht dem was alle meine DSOs machen - da ist genau wie du gemerkt hast umgedreht. Wird wohl also ein zahlendreher in der doku sein, das macht mich jetzt sehr "glücklich". Interessant das ich hin und wieder auch andere seltsame "92" codes als antwort bekomme, z.b. 53 03 00 92 00 E8 FB BB 0E BC D1 59 36 beim stoppen der acq. Auch sowas wie 53 03 00 92 00 E8 ist eigentlich falsch. Laut Hantek sollte die antwort 53 04 00 92 00 xx yy sein, wobei xx ist dann 00 oder 01 je nach status und yy checksum. Anscheinend verstehen wir den sinn des ganzen nicht, diese kommandos sind anscheinend doch nur sinnvoll um kurz zu stoppen um die daten zu holen und fortführen und nicht als richtige "remote control" kommandos. Habe jetzt auch die 92 02 00 kommandos getestet, obwohl die beschrieben sind tun die 0,nix auf den DSOs. Also etweder ist das noch nciht implementiert aber schon dokumentiert (von der sorte habe schon zwei kommandos für handheld - die fw kennt es nciht die doku von Hantek schon) oder nicht mehr implementiert. Thomas Hallo Thomas, dein Text: "Allerdings scheint diese funkton etwas buggy zu sein oder falsch verstanden (da die eigentlich gedacht ist? die acq. zu stoppen bevor Sample-Daten über USB übertragen werden)." Das tut das Kommando doch. Ich lasse dem DSO im Programm noch kurz Zeit zum Stoppen, ansonst bleibt ein Streifen vom vorherigen Bild bei dem Bildschirm-Snapshot stehen. Peter [Bearbeiten] Datei lesen - ProtokollEs wird beim Senden des Kommandos noch ein Sub-Kommando bzw. ein Null-Byte vor dem Pfad benötigt. Das DSO entfernt ansonst das erste Zeichen vom Pfad. Peter
sehr aufmerksam :) da fehlt tatsächlich subkomando 00 in dem Artikel. Wenn versucht wird eine Datei zu lesen die nicht vorhanden ist, antwortet das DSO nicht. Betrifft auch den Text bei "0x01 DSO Einstellungen lesen: "Sollte die protocol.inf auf dem DSO nicht lesbar/vorhanden ist die Antwort leer. D.h. sie enthält kein Datenbyte:" Peter (Pedre 07:44, 26. Mär. 2012 (UTC)) [Bearbeiten] DSO Bedienfeld sperren - ProtokollAls Antwort wird immer das gleiche gesendet, egal ob man sperrt oder entsperrt. Anwort vom DSO -> "53 04 00 92 01 00 EA" - Das Datenbyte ist immer '0'. Aber das Sperren ist nur von kurzer Dauer, das DSO entsperrt wieder automatisch nach ein paar Sekunden. Peter [Bearbeiten] Sample-Daten lesen - ProtokollWenn das DSO angehalten wird, kann ich keine Sample-Daten lesen. Es ist egal ob das DSO mit dem Kommando 0x12 oder manuell gestoppt wurde. Nachtrag: Habe es gerade mit der TTSope-Software probiert, die gibt auch die Meldung aus, dass man bitte doch das DSO starten möge. Peter Wenn das DSO angehalten ist, antwortet das DSO bei der Anfrage nach Sample-Daten sofort mit dem Fehler Sub-Kommando 0x03, z.B. für Kanal 1: Peter
stimmt, hab im Protokol ein vermerk dazu gemacht. Thomas Das DSO sendet manchmal die Daten vom anderen Kanal zurück, vorallem wenn mehr als 4k Speicher aktiviert sind. Sieht man auch bei TTscope, am DSO beide Kanäle aktivieren und den Speicher auf 40 k setzen, bei TTscope nur z.B. den Kanal 1 einschalten und etwas warten. Es wird vom DSO nicht die gesendete Kanalnummer angepasst, es bleibt die vom abgefragten Kanal, also die Falsche! Peter (Pedre 13:08, 7. Apr. 2012 (UTC)) das habe ich nie beobachten können, es ist aber schon eine weile her als ich TTScope richtig benutzt habe (mag sein das die aktuellen firmwares einfach schrott sind). Wenn das aber so ist dann muss es Hantek wieder fixen, das macht kein spass. Thomas [Bearbeiten] USB-TreiberDas Verhalten des DSO-USB-Treibers ist gleich wie vom Cypress EZ-USB-Treiber, den folgenden Text habe ich von deren Seite, den Link aber leider nicht gesichert: Zitat: ----------8<-------- Knowledge Base Article DeviceIoControl() to read data from my EZ-USB FX Last Updated: 03/16/2009 Question: I've used the function "DeviceIoControl()" to read data from my EZ-USB FX device and if it doesn't have any data to transfer in the IN endpoint, my PC application hangs, What could be the problem? I am using your general purpose driver ezusb.sys. Response: ezusb.sys is a synchronous driver, so any of the Bulk or Iso IOCTLs are blocking threads. Your PC application will sit there if the device has no data to return (for example in the case of a bulk read). The way to get out of that is to use a driver that supports overlapped I/o, commonly referred to as an asynchronous driver. ----------8<-------- Peter (Pedre 08:01, 26. Mär. 2012 (UTC)) [Bearbeiten] Tastendruck auslösen - ProtokollIm Text steht: "- in den nächsten Zeilen folgen die Tastenkomandos (eigentlich deren Namen verwendet durch die firmware) und die Anzahl der Bytes die von jeweiligen Keycode benutzt sind." Mir geht es um die "Anzahl der Bytes". Ist das eine interne Angabe oder missverständlich für den Wert des Bytes gedacht. Denn im beschriebenen Protokoll kommt die Anzahl ja nicht vor. Es deckt sich aber die '1' in der Datei mit den Wert der Bytes im Protokoll. Peter (Pedre 10:46, 26. Mär. 2012 (UTC)) laut der info die ich bekommen habe soll die "1" in der keyprotocol.inf die anzahl der bytes bedeuten. Das passt aber nicht irgendwie zu den tastencodes (die dumped waren und in dem artikel stehen - EDIT : habs gerade atrikel angepasst damit jeder weisst das es code + anzahl der clicks ist) da die zweistellig sind. Das liegt daran das der erste byte in den tastencodes der eigentlich code ist, der zweite parameter die anzahl der clicks (angeblich), also z.b. 0x30 0x01 (vom probe check taste) ist der tastencode 0x30 (die 0x30 wiederum entspricht der keyprotocol.inf zeile-1). Diese angeblich anzahl der clicks, in der doku steht folgendes : 53 04 00 13 Key KeyCnt Checksum (Key: 表示键值, KeyCnt:表示写入的数量) übersetzt Key ist key und KeyCnt key counter. Ich habe versucht z.b. utility taste 2 mal zu senden, hat nix gebracht es war immer nur "einmal" zu sehen gewesen (um ein schritt geändert). Thomas [Bearbeiten] Init DSO - ProtokollBei mir tut sich nichts beim Senden, das DSO sendet nichts zurück und eine Reaktion sehe ich auch nicht. Peter (Pedre 20:40, 26. Mär. 2012 (UTC)) --- also wenn ich 43 02 00 7F C4 sende kommt auch 43 02 00 FF 44 als antwort. Dazu habe es mit "0x41 DSO Selbstkalibrierung schreiben" und "0x40 DSO Firmware Variablen schreiben" getestet - ohne init waren die einstellungen nicht geladen, nach dem init schon. Man sieht auch LCD kurz blinken, es muss also auch bei dir funktionieren. In deiner fw ist auch die 0x7F unterroutine vorhanden, wenn also nicht geht wird an deinen code liegen: loc_7494C BL Main_RecallInit ; jumptable 0007455C case 127 BL SendToPcUartWriteOk B locret_74968 Thomas --- habe mir dein DSO-USB-Tool_Code_20120326b angeguckt (mit USBLyzer), Du benutzt iDSOMessageStart (0x53) statt iDSOMessageStartDebug 0x43) in der DSOInitialise. Damit kann kein init funktionieren. Thomas Hallo Thomas, danke, bin wohl schon 'betriebsblind'. Peter (Pedre 05:53, 27. Mär. 2012 (UTC)) [Bearbeiten] Datei senden - ProtokollMit dem Kommando 'Datei senden' kann man auch eine vorhandene Datei überschreiben. Mehr als 4,3 MB konnte ich in einem kurzen Test nicht schreiben, bei 4,9 MB gab's immer Fehler. Peter (Pedre 21:23, 30. Mär. 2012 (UTC)) Wenn beim Überschreiben bzw. beim Senden ein Fehler auftritt, wird die ursprüngliche Datei nicht gelöscht, die bleibt erhalten. Mit 'Datei senden' kann man also alles machen, neue Datei speichern und vorhandene ersetzen. Peter (Pedre 21:29, 30. Mär. 2012 (UTC)) Man darf oder soll nach dem Senden des letzten Pakets mit der Gesamtprüfsumme, nicht mehr vom DSO lesen. Das DSO sendet nichts mehr zurück, wenn man es trotzdem macht gibt es auf der Konsole die Meldung "usb_recv: RPC for non-existent buffer". Der USB-Treiber hängt dann für ein paar Sekunden, es geht aber alles ohne Fehler weiter. Peter (Pedre 20:03, 10. Apr. 2012 (UTC)) das wundert mich etwas, ich sehe das SendToPcUartWriteOK oder SendToPcUartWriteError aufgerufen wird nach jedem block, damit sollte immer etwas in dem buffer stehen. hier, bei jedem "datei speichern" paket wird die PcUartWriteObjFile aufgerufen:
ja stimmt, es ist schon richtig wie im Protokoll beschrieben. Nur jedesmal wenn ich direkt nach dem Schreiben z.B. die DSO-Einstellungen lese, gibt es diesen Hänger und das DSO antwortet danach mit den "43 04 00 92 01 00 0A". Diese Antwort kommt öfters zwischendurch, breche die Kommunikation wegen dieser Antwort ab, weil sie eigentlich falsch ist, kommt irgendwie alles durcheinander. Ignoriere ich sie, bin ich wieder am Anfang mit den vielen Ausnahmen und das Protokoll ist dann nicht ernst zu nehmen. Peter (Pedre 07:52, 12. Apr. 2012 (UTC)) [Bearbeiten] Datei updaten - ProtokollDas Kommando funktioniert irgendwie nicht richtig. Wenn eine Datei am DSO nicht vorhanden ist, aber überschrieben werden soll, wird keine neue Datei angelegt, passt. Wenn eine Datei vorhanden ist und überschrieben werden soll, funktioniert es nur wenn 1 Paket mit Daten gesendet wird, also die Datei < 10.000 Bytes ist. Sind es mehr, wird nur das zuletzt empfangene Paket in die Datei geschrieben. Peter (Pedre 08:03, 31. Mär. 2012 (UTC)) Die Bedeutung des Fehlercodes 0x11 könnte man umkehren. Es gibt nämlich keinen Fehler wenn eine Datei nicht vorhanden ist, aber den Fehler 0x11 wenn eine vorhandene Datei überschrieben wurde. Peter (Pedre 08:41, 31. Mär. 2012 (UTC)) [Bearbeiten] Formelle Diskussion zum ArtikelIch finde den Stil, wie man die Handlungsweise von Hantek kritisiert, nicht optimal. Allerdings begrüsse ich ausdrücklich den Artikel selber und die Arbeit, die sich manche damit manchen! Das ist sehr lobenswert. Engineer 13:10, 21. Dez. 2012 (UTC) |