IOWarrior40 als I2C-Master: Kein Auslesen des Slave möglich

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

Moderator: Guido Körber

Post Reply
Adrian
Posts: 2
Joined: Tue Nov 03, 2015 1:39 pm

IOWarrior40 als I2C-Master: Kein Auslesen des Slave möglich

Post by Adrian »

Hallo,

ich habe einen IOWarrior40 dessen I2C-Sonderfunktion ich nutze. Ich will damit mit einer smarten Batterie kommmunizieren, die mittles SMBus kommuniziert. Der verwendete Chip des Batteriemanagementsystems ist von TI (http://www.ti.com/product/BQ20Z65-R1/technicaldocuments).

Mit dem fertigen Beispiel Simple-I2C.exe funktioniert sowohl das Schreiben als auch das Lesen von der Batterie. In meinem eigenen Programm, das in C# geschrieben ist und auf die IOWKit.dll zurückgreift funktioniert aber nur das Schreiben (Senden von Befehlen an die Batterie mittels IOWKitWrite und Report-ID 02), das Lesen funktioniert nicht. Ich lese immer das gleiche aus, egal welchen Befehl zum Auslesen (z.B Spannung, Ladezustand, Seriennummer,....) ich vorher geschickt habe. Das was ich auslese, ist übrigens immer genau das, was ich als letztes mittels Simple-I2C.exe ausgelesen habe. Das Initialisieren des Lesens funktioniert also in meinem Code nicht.

Das Auslesen von Daten mache ich entsprechend Dokumentation und Beispielen zunächst mit dem Senden eines Reports über IOWKitWrite und Report-ID 03 und anschließendem Lesen mittels IOWKitRead. Hier ein Auszug aus dem Quellcode, zum Auslesen der Batteriespannung (Bytearray namens data_array wird für die Reports verwendet; Byte 09 ist Command für die Spannung, dies liefert laut Datenblatt des Batteriechips 2 Byte zurück; I2C-Adresse ist 16 und wird hier zum Lesen auf 17 gesetzt; am Ende wird der ausgelesene Report als String in einer RichTextBox angegeben):

Code: Select all

private void btnVoltage_Click(object sender, EventArgs e)
        {
            byte[] data_array = { 0x03, 0x02, 0x17, 0x09, 0x00, 0x00, 0x00, 0x00 };
            IOWarrior.Functions.IowKitWrite(handle, IOWarrior.Defines.IOW_PIPE_SPECIAL_MODE, data_array,         
                IOWarrior.Defines.IOWKIT_SPECIAL_REPORT_SIZE);
            IOWarrior.Functions.IowKitRead(handle, IOWarrior.Defines.IOW_PIPE_SPECIAL_MODE, data_array,  
                IOWarrior.Defines.IOWKIT_SPECIAL_REPORT_SIZE);
            rtbDisplayReports.Text += "Read_I2C; Gelesener Report:   " + BitConverter.ToString(data_array) + "\n"; 
        }
Ich erhalte als String dann auch einen Report, beginnend mit 03-02-XX-XX-..... wobei XX die ausgelesenen Bytes sind.
Wie gesagt aber immer das gleiche, was ich zuvor als letztes in Simple-I2C ausgelesen habe, unabhängig vom Command.

Ich weiß nicht mehr was ich noch ausprobieren soll. Habe viel rumgespielt, u.a. mit der Reihenfolge/Position der Bytes im initialen Report, mit einer Wartezeit zwischen Initialisieren und Auslesen, mit IOWKitReadNonBlocking aus der dll, mit zwei verschiedenen Arrays zum Schreiben und Lesen, mit anderen Report-IDs,....
Die Doku habe ich auch soweit durch und kann keinen Fehler finden. Die Simple-I2C.exe macht etwas auf Anhieb richtig, was ich falsch mache. Ich vermute mal dass es also auch nichts batteriespezifisches ist, wie z.B. geringe Unterschiede zwischen SMBus und I2C oder die Verwendung der PEC (Packet Error Checking) des SMBus.

Ich hoffe Ihr habt einen Tip für mich ?
Vielen Dank und viele Grüße,

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

Re: IOWarrior40 als I2C-Master: Kein Auslesen des Slave mögl

Post by Christoph Jung »

Ohne ein wenig mehr Code kann ich leider nicht weiterhelfen und die Fehlerbeschreibung ist recht unspezifisch.
Was meist fehlt ist, das man das Startregister, ab dem man die Daten lesen möchte nicht gesetzt wurde.

Bitte einmal das komplette Projekt (wenn möglich) an mich (jung@codemercs.com) als ZIP, Rar oder 7Zip (ohne bin Ordner) schicken, dann kann ich mal drüber schauen ob alles drin ist oder ob etwas fehlt.
Abteilung: Softwareentwicklung
Folge uns auf Twitter
Follow us on twitter
Adrian
Posts: 2
Joined: Tue Nov 03, 2015 1:39 pm

Re: IOWarrior40 als I2C-Master: Kein Auslesen des Slave mögl

Post by Adrian »

Hallo Herr Jung,

danke für die schnelle Reaktion. Ich habe Ihnen geschrieben.

viele Grüße,

Adrian
Post Reply