Problem beim Read-Befehl: i2c-bus mit smbus von raspberry pi

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
svens
User
Beiträge: 3
Registriert: Freitag 24. Juli 2015, 10:11

Hallo,

ich hab da mal ne Frage:

ich will eine Kommunikation zwischen einem raspberry pi und einem Nucleo Mbed aufbauen. Nucleo Mbed benutzt I2C-Bus. Raspberry Pi den SM-Bus, der ja auf dem I2C-Bus aufbaut. Ich benutze folgenden Befehl in Python:

read_i2c_block_data(int addr, char cmd)

und krieg Fehlermeldung. Kann mir vielleicht jemand weiterhelfen?
Der entsprechende Write-Befehl funktioniert.

Gruß
Sven
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Hallo Sven,

es würde helfen, den genauen Code und die komplette Fehlermeldung zu zeigen.

So wie du deinen Aufruf schreibst, scheint mir schon etwas seltsam. In Python brauchst du die Typen "int" und "char" nicht angeben. Vielleicht funktioniert der Aufruf schon, wenn du die 2 Worte weglässt.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
svens
User
Beiträge: 3
Registriert: Freitag 24. Juli 2015, 10:11

Hallo,

die Fehlermeldung ist ein Input/output Error [Errno5].
Ja, klar int und char sind wegelassen, hab das nur geschrieben um welche Daten es sich handelt.

Es geht eher um das Problem zwischen SM-bus und dem I2C-Slave im Nucleo Mbed.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Bitte mehr Details, damit sinnvoll geholfen werden kann. Das mindeste wäre die Zeile, die im tatsächlichen Programm für den Aufruf genutzt wird, d.h. mit den echten Werten für die Parameter. Idealer wäre ein passendes Minimalbeispiel, bei dem der Fehler aufritt.

Sinnvolles Fragestellen heißt, dass man auch ausgiebig über die eigene Fragestellung nachdenkt und möglichst viele Hintergrundinformationen mitliefert. Das Forum ist schließlich kein Orakel, dem man nur die Frage stellen muss, um prompt die korrekte Antwort zu erhalten. ;)
svens
User
Beiträge: 3
Registriert: Freitag 24. Juli 2015, 10:11

Tut mir leid, ich bin noch neu im Forum und bei der Thematik noch ein Anfänger.
Ich hab folgenden Code (Werte sind Beispiele):

Code: Alles auswählen

import smbus
NUCLEO_ADDRESS = 0x5e        #Nucleoadresse eintragen
data = [0x03,0x02,0x6f,0x6f]
ret = [0xc7,0xc8,0xc9]
i2c_port = smbus.SMBus (1)  #I2C-Bus Nummer 1 am Raspberry
#ret = i2c_port.read_byte (NUCLEO_ADDRESS)             #funktioniert
#ret = i2c_port.read_byte_data(NUCLEO_ADDRESS, 0xC3)
ret = i2c_port.read_i2c_block_data(NUCLEO_ADDRESS, 0xC3)
Taktrate-Runtersetzen am Raspberry PI hat nichts gebracht. Ich denke es liegt nicht am Clock-Stretching, sondern am Restart-Bit.
Siehe Seite 3 bei incompatible:
http://www.ti.com/lit/an/sloa132/sloa132.pdf

Ich weiß auch nicht wie ich die Read_Block-Befehle modifizieren soll:

Hoffe das genügt euch erstmal :-)
Zuletzt geändert von Anonymous am Montag 27. Juli 2015, 14:30, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Antworten