Anfängerprobleme mit Simple-I2C und Eeprom

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Zakkrifice
Posts: 12
Joined: Tue Jul 05, 2022 1:21 pm

Anfängerprobleme mit Simple-I2C und Eeprom

Post by Zakkrifice »

Liebes CodeMercs-Forum,

dies ist mein erster Beitrag, daher: Hallo!
Als völliger Anfänger in Sachen I2C versuche ich gerade etwas sehr einfaches: Mit dem IO-Warrior56 per I2C einen Eeprom (M24256-BW) ansteuern und Bits schreiben/lesen.

Die Kommunikation zwischen Interface und Chip funktioniert, ich kann den Eeprom mit Simple-I2C detektieren und Schreib-/Lesebefehle senden. Jetzt beginnt meine Unkenntnis:
Der Chip hat 256kb Speicher mit 512 Blöcken je 64 Byte. Laut Datenblatt erwartet der Chip zum Schreiben Folgendes:
ID-Byte | Address-MSB | Address-LSB | Daten-Byte | Stopp

Die Software sendet das ID-Byte (in meinem Fall die 50) automatisch und auch richtig, da der Chip antwortet.

Welche Syntax wird jetzt von mir in der "Input"-Zeile erwartet?
Ich würde erwarten, mit "50 00 00 44" in das Byte mit der Adresse "00 00" den Wert 44 schreiben zu können. Ist das richtig? Muss ich das Kommando "Stopp" selbst senden, oder setzt die Software das hinten dran?

Wenn ich den Chip nun auslesen möchte, kann ich mit maximal 256 Bytes anzeigen lassen. Welche der 256 der 32k sehe ich denn? Kann ich steuern, welche Bytes ausgelesen werden sollen?
Wenn ich mehrmals auslese, ändert sich auch das ausgelesene Ergebnis ==> Zählt da intern irgendetwas hoch, das mir "den nächsten Block" oder so anzeigt....oder ist der Speicherzugriff zufällig und damit auch die Startadresse der angezeigten Daten?

Jedenfalls gelingt es mir nicht, den erwarteten Wert "44" irgendwo zu finden und ich bin verwirrt.

Es wäre super, wenn mit jemand weiterhelfen, oder mich auf hilfreiche Quellen zum weiteren Einlesen verweisen könnte.

Schon jetzt vielen Dank und viele Grüße,
Zakk
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Guido Körber »

Simple-I2C sendet die Adresse selber, in die Eingabezeile für die Daten gehören also wirklich nur die Daten, nicht das Adressbyte.

Die EEPROMs halten typischerweise die Adresse intern und zählen selber hoch. Details dazu finden sich im Datenblatt des jeweiligen Chips.
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Christoph Jung »

Wie Guido schon geschrieben hat baut Simple-I2C den Report selber zusammen mit Startbit, Stopbit und I2C-Geräteadresse.
Auch die Leseadresse (also die I2C-Geräteadresse mit Read-Bit) baut sich das Tool selber.

Wenn also auf/ab die Speicherzelle 0x0000 (16 bit bei dem Eeporm) geschrieben werden soll, muss in dem spziellen Fall in das Eingabefeld nur "00 00 44" geschrieben werden.

Bei "00 00 44" wird der Adresscounter auf 0x0001 hoch gesetzt und wenn man dann einfach z.B. 32 Byte lesen will, dann bekommt man alles ab 0x0001.

Um von einer spezifischen Adresse zu lesen muss man in der Regel einfach einen Schreibbefehl ohne Daten schichen. Also "00 00". Das sollte
dann den interenen Adresscounter auf 0x0000 setzten und wenn man dan liest sollte es klappen und man bekommt die gewünschten Daten zurück.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Zakkrifice
Posts: 12
Joined: Tue Jul 05, 2022 1:21 pm

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Zakkrifice »

Hallo zusammen,

super, vielen Dank! Das hat mir sehr weitergeholfen und zumindest die ersten 256 bytes meines Eeprom kann ich jetzt gezielt ansprechen und beschreiben/auslesen.

Vielen Dank!

Jetzt schließt sich mir das nächste Problem an.....denn meine Zielanwendung für das Ganze ist LabView.
Soll ich dafür einen eigenen Thread aufmachen?

Falls nicht: Ich hab in Labview jetzt eine Weile herumgesucht, und mir die Beispielprogramme und die IOWarrior V150.llb angeschaut. Ich blicke aber noch nicht durch, wie ich z.B. dem VI "I2C read all" klar mache, dass ich unter der I2C-Adresse "50" die Speicheradresse 00 00 anspringen und dann 1 Byte auslesen möchte. Ich nehme an, dass der Eingang "NoOfBytes" eine numerische Zahl erwartet, wie viele Bytes gelesen werden sollen. Soweit verständlich. Unter "Other Senbytes" würde ich jetzt vermuten, dass ich die Adresse setzen kann, aber ich verstehe leider nicht, wie.

Ist irgendwo dokumentiert, welche Datenformate die VIs erwarten?

Schon jetzt wieder vielen Dank und viele Grüße,
Zakk

P.S. hier mein riesiger Labview-Code. ich würde gerne die ersten 10 Bytes auslesen. Die Adresse ist wie bei Simple-I2C die 50.
Attachments
IOWarrior_Auslesen_Labview_220708.jpg
IOWarrior_Auslesen_Labview_220708.jpg (34.71 KiB) Viewed 1828 times
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Christoph Jung »

An sich sollte das eigentlich funktionieren, auch wenn die Lib von LabView nicht auf dem neusten Stand ist (aber das ist für den IOW56 egal)
Wir haben die LabView Lib geändert und die ganzen Blöcke für I2C entfernt, weil die nicht kompatibel sind mit den neuen IO-Warriorn. V

Naja es ist wie beim Simple-I2C. Man muss ihm erstmal sagen ab wo er lesen soll. Also vor dem ReadAll müsste einmal ein Schreibbefehl sein, der ihm die 00 00 sendet.

Ich komme leider erst am Montag dazu mich drum zu kümmern.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Christoph Jung »

So ich hab mal eine VI erstellt. Diese nutzt nur die RAW Write/Read Funktionen und müsste 16 Byte ab Start Register/Adresse 00 00 auslesen.
Die VI ist ungetestet, da ich den EEPROM nicht habe und nichts vergleichbares.
iow56-i2c-read.png
iow56-i2c-read.png (33.9 KiB) Viewed 1809 times
iow56-i2c-read-v2.vi
(18.1 KiB) Downloaded 111 times
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Zakkrifice
Posts: 12
Joined: Tue Jul 05, 2022 1:21 pm

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Zakkrifice »

Hallo,

das hilft schon mal sehr weiter, vielen Dank!
Außerdem habe ich mittlerweile auch das volle Datenblatt für den Warrior mit der Addressierungsvorgabe gefunden. Damit gehts auch deutlich leichter.

Ich habe das oben genannte Codebeispielt nachprogrammiert und auf verschiedene Weisen angepasst...und stoße auf ein Problem: Der Warrior gibt ein 8 Byte breites Array aus, von dem die ersten beiden Bytes die ID und das Flag sind, und dann noch 6 Bytes vom Eeprom. Der Pointer des Eeproms springt dabei 16 byte weiter. D.h. es werden die hinteren 10 Bytes abgetrennt.
Gibt es dafür eine Lösung? Muss der Warrior noch mit etwas anderem beschickt werden, um mehr Bytes auszugeben?

Ich habe das im Moment so gelöst, dass ich in einer for-Schleife den Lesebefehl immer wieder ausführe und quasi in Vierer-Schritten durch den Speicher hüpfe und die jeweils vier Werte in einem Array hintereinander packe. Damit komme ich erstmal klar, eleganter wäre aber, die 64 Byte einer Speicher-Page des Eeprom am Block auslesen zu können. Hätte da jemand einen Tipp für mich?

Soweit erst nochmal Danke, denn das hilft mir schon sehr weiter.

Viele Grüße!
Attachments
For-Schleife-4er-Steps.jpg
For-Schleife-4er-Steps.jpg (93.49 KiB) Viewed 1797 times
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Christoph Jung »

Klingt danach, dass er die Reportgröße des IOW24/40 nutzt und nicht die des IOW56.
Ist die "IOWarriorV150.llb" denn auf dem aktuellen Stand? Ich glaube mich zu erinnern, dass das nach einem Bug in einer alten
Version klingt.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Zakkrifice
Posts: 12
Joined: Tue Jul 05, 2022 1:21 pm

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Zakkrifice »

Hi!

Also die llb ist von Ende Mai 2015, runtergeladen von der Homepage

https://www.codemercs.com/de/dongles/iow56dg

vor ca. 2 Wochen als Teil der Labview-Beispiele.

Gibt es eine aktuellere Version?

Danke und viele Grüße!
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Christoph Jung »

Nein das ist eigentlich die aktuelle Lib und Beispiele. Wir haben nicht so viele LabView Anfragen, von daher kommt da selten was neues.
Ich schau am Montag mal ob ich ein ähnliches Verhalten bei der VI, die ich oben angehangen habe bekomme.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Zakkrifice
Posts: 12
Joined: Tue Jul 05, 2022 1:21 pm

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Zakkrifice »

Das wäre super!

So richtig fehlerfrei klappt das Auslesen des Eeproms nämlich nicht. Beschreiben mit Blöcken von 4x 256 doubles mit je 8 byte klappt super, beim Auslesen geht immer wieder etwas schief: Nach einer nicht reproduzierbaren Menge von "4-Byte"-Blöcken geht das Auslesen schief und es wird nur noch eine feste Zahl ausgegeben ( -9,17 glaube ich).
Da würde ein einmaliger Auslesebefehl mit 64 Byte sehr helfen!

Danke schonmal!
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Christoph Jung »

Zur Erklärung: Die LabView Lib wurde/wird uns von einem Kunden bereitgestellt, der diese in seiner Freizeit erstellt hatte. Darauf bauen
die Beispiele und die Lib auf. Wir selber können nur bedingt Support für LabView leisten, der über einfache VIs hinaus geht.

Das, was im auf der Webseite bei den Downloads liegt, ist für LabView >2014 und wir selber haben nur LabView 2011. Das ist mir auch jetzt erst beim gegentesten aufgefallen, dass ich die Datein nicht laden/öffnen kann. Anscheinend ist da beim kopieren und Hochladen mal was durcheinander gekommen und wir haben eine falsche/fehlehafte Lib hochgeladen.

Ich habe hier mal das angehangen, was ich mit meiner 2011 Datei ausführen kann:
IOW_2019.zip
(407.81 KiB) Downloaded 100 times
Bitte einmal das im Anhang nehmen und testen, ob damit größere Rückantworten kommen (ist allerdings nur eine 32Bit Variante, da wir keine 64 Bit haben).
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Zakkrifice
Posts: 12
Joined: Tue Jul 05, 2022 1:21 pm

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Zakkrifice »

Hi!

leider nein, die Antwort ist ebenfalls 8 byte lang.
Attachments
Screen_demosoftware_Codemerc.jpg
Screen_demosoftware_Codemerc.jpg (74.55 KiB) Viewed 1728 times
User avatar
Christoph Jung
Posts: 670
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Christoph Jung »

Hmm komisch, bei dem was ich angehangen habe sind beider Arrays 64Byte groß.

Was man schauen kann ist, ob der Block "Enlarge Report" beim IOW56 den Report richtig aufbläht.
Dazu in der VI (nicht die Lib) doppelkick auf den "SprecialRawRead" Block, dort dann wenn das Fenster auf geht ins Blockdiagramm und den "EnlargeReport" ebenfalls öffnen und dann dann mal schauen, was beim IOW56 steht. Bei meiner VI (und was ich hochgeladen hatte) sieht das so aus:
enlarge_block.JPG
enlarge_block.JPG (32.11 KiB) Viewed 1727 times
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Zakkrifice
Posts: 12
Joined: Tue Jul 05, 2022 1:21 pm

Re: Anfängerprobleme mit Simple-I2C und Eeprom

Post by Zakkrifice »

Aha! Ich setze es mal auf 64 und teste......melde mich gleich
Attachments
IOW56_8.jpg
IOW56_8.jpg (26.5 KiB) Viewed 1725 times
Post Reply