Ich komme mal schnell auf den Punkt :)
Ich habe 2 Geräte hier, die ich per I²C Messages ansprechen kann.
Bin gerade dabei mir eine eigene Schnittstelle (in Java) zu meinem USB to I2C Dongle zu entwickeln.
Benutzt wird die Version 1.5 der iowkit.dll unter Windows XP!
Bei den Geräten ist eines der Nachfolger des anderen, neue Hardware und ist auch schneller (interne Mikrocontroller etc.)
So meine Schnittstelle funktioniert mit dem älteren Modell wunderbar (read/write auf den I²C Bus).
Bei der neueren Version hingegen bekomme ich beim Lesen immer eine fehlende Stopbedingung und die restlichen Interaktionen mit dem Bus sind dann nutzlos bzw. fehlerhaft!
Hier mal kurz zwei Bildchen von meinem Trace Programm:
Hier sieht man die Fehlende Stop Bedingung (Message Nr.3 checkt ob die Adresse erreichbar ist, danach wird eine Message zum Slave gesendet damit man was auslesen kann und dann liest man aus)
Durch die fehlende Stop Bedingung bricht der im Bild nach 12 Bytes ab und bringt nur noch Nullen. Obwohl die angeforderten 25 Bytes alle != 00 sind!
Wenn ich danach die gleiche Adresse nochmal auslesen möchte hängt der dem ersten Lesevorgang ein paar Bytes an, bringt ein StopBit und bringt danach wieder nur Müll + Fehlende Stop Bedingung:
Ich dachte zuerst, dass wegen dem schnelleren Gerät etwas mit den Timings nicht stimmt und der deswegen nicht richtig lesen kann. Habe dann versucht die Taktung vorher einzustellen.
Dafür habe ich nachgeschaut wie Herr Wagner dies in seinem IOWJ erledigt.
Beim aktivieren der SpecialModeFunction schickt Herr Wagner ja folgenden Report:
{ 1, 1, x, 0, 0, 0, 0, 0} x= 0 für 100 kHz, 1 für 400kHz, 2 für 50 kHz.
Ich habe die 3 verschiedenen Taktungen bei mir ausprobiert aber keines hat geholfen.
Leider findet man (oder nur ich) keine näheren Informationen in den Dokus zu der Einstellung des Takts. Unter 5.10.1 steht nix von diesem 3. Byte!
Ist vielleicht diese Einstellung des Takts falsch?
Hier mal kurz meine Interaktionen mit der iowkit.dll:
Code: Select all
long devHandle = IowKit.openDevice();
//Aktivierung der Special Mode Funktion
IowKit.write(devHandle, 1, { 1, 1, 1, 0, 0, 0, 0, 0 });
// flags werden wie bei IOWJ erstellt (Start-Stop Bedingungen etc. das Schreiben geht ja auch)
IowKit.write(devHandle, 1, {2,flags,data,data,data,data,data,data});
//Überprüfen ob das Schreiben korrekt war
IowKit.readNonBlocking(devHandle, 1, 8);
....
//Lese von adress bytes Bytes //hier fehlt die Stop Bedingung!
IowKit.write(devHandle, 1, { 3, bytes, adress, 0, 0, 0, 0, 0 });
//Daten aus dem IOW24 auslesen => das klappt auch
IowKit.readNonBlocking(devHandle, 1, 8);
...
Somit liegt es nicht am Gerät sondern an meinem Code!
Hat vielleicht noch jemand eine Idee bezüglich dieser fehlenden Stop Bedingung?
Ich hoffe man kann mein Problem einigermaßen verstehen :)
Danke!