C++ --> Python I²C-Command Übersetzung

OP #7134795
Lesenswert?
• ▲
▼
Hi,

Ich möchte aus einem C++ Codebeispiel den Code in Python für meinen 
Raspberry Pi umschreiben. Es handelt sich dabei um die kommunikation 
mittels I²C. In dem Codebeispiel ist von 
"soft_i2c_master_write(data_out[x]);" die rede. Wie kann ich das 
mithilfe der SMBUS-Library nachbilden?

Im Anhang befindet sich die Datei mit dem Codebeispiel. Es geht konkret 
um einen Cryptographischen Chip, für welchen es für mich keine 
geeigneten Codebeispiele in Python gibt.

Ich hoffe, jemand kann mir weiterhelfen.

Danke
Angehängte Dateien:
OP #7134888
Lesenswert?
• ▲
▼
Ich möchte wissen, was der befehl "soft_i2c_master_write(data_out[x])" 
in Python bedeuten würde. Also mit welchem smbus-befehl aus folgender 
Übersicht entspricht dem C++ 
command?:https://docs.kernel.org/i2c/smbus-protocol.html

Meiner Meinung nach müsste es "smbus.write_byte(Adresse,Data)" sein. 
Stimmt das? Und wenn mehrere male "soft_i2c_master_write(data_out[x])" 
geschrieben wird, ist es dann synonym zu 
"smbus.write_block_data(Adresse,..,...)"?
Gast #7134942
Lesenswert?
• ▲
▼
// schickt i2c start condition und ein byte mit addresse und write-bit

soft_i2c_master_start(cryptoauth_address | I2C_WRITE);


//schickt 9 rohbytes auf dem Bus hinterher

    for (uint8_t x = 0; x < 10; x++) {
      soft_i2c_master_write(data_out[x]);
    }

// schickt 2 rohbytes an crc, die der chip wohl erwartet

    soft_i2c_master_write(crc[0]);
    soft_i2c_master_write(crc[1]);

// schickt i2c stop condition

    soft_i2c_master_stop();

Diese separat geschickten Bytes musst du jetzt in eine Bytewurst packen 
und an den write data block übergeben. Die write byte Funktion wird 
wahrscheinlich eine separate Übertragung starten, inkl. Start und Stop 
condition (meine Vermutung). Nicht so ängstlich sein und einfach mal 
machen.
Gast #7135367
Lesenswert?
• ▲
▼
Piet schrieb:
> Diese separat geschickten Bytes musst du jetzt in eine Bytewurst packen
> und an den write data block übergeben. Die write byte Funktion wird
> wahrscheinlich eine separate Übertragung starten, inkl. Start und Stop
> condition (meine Vermutung).

So verstehe ich die Doku auch. Allerdings ist das 
(https://docs.kernel.org/i2c/smbus-protocol.html) die Doku vom Linux 
Kernel, nicht die von Python. Verwendest du (Manuel) diese? 
https://pypi.org/project/smbus/

Die würde ich nicht benutzen, weil sie offenbar weder dokumentiert noch 
gepflegt wird. Suche dir eine andere und lies ihre Doku. Wenn du danach 
noch Fragen hast, können wir weiter diskutieren. Dann musst du uns 
allerdings mitteilen, welche Bibliothek du verwendest.

Manche wenige Bibliotheken haben separate Funktionsaufrufe zum Senden 
der Start/Stop Condition. Bei denen kannst du jedes Byte einzeln senden 
und empfangen.

Die meisten wollen aber den ganzen Block an einem Stück (Array) senden. 
Wenn du etwas empfangen willst, musst du angeben, wie viele Bytes du 
erwartest.

Manche Bibliotheken haben auch nur eine einzige Funktion die sowohl zum 
Senden als auch zum Empfangen dient. Sie macht beides nacheinander, 
sofern die jeweilige Blockgröße nicht 0 ist.
Gast #7135467
Lesenswert?
• ▲
▼
Manuel N. schrieb:
> data_out[x]

Ist ein Binar-Array. Je nach Libs und (vielleicht möglicher) Deklaration 
meist 8 Bits groß. Man setzt vorher ALLE Bits und schiebt dann via 
Befehl ALLE auf einmal rein.

Du verwechselt da was mit einen Schieberegister wo man die Bits einzeln 
rein schiebt.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.