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
Was konkret ist das Problem? Die ursprüngliche Lib schreibt und liest und die SMBUS Lib kann schreiben und lesen. Jetzt musst du nur anfangen.
Ich verstehe die Frage auch nicht. Vielleicht hilft es dir (Manuel), erst mal den Wikipedia Artikel über I²C zu lesen, um zu verstehen, womit du es hier überhaupt zu tun hast.
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,..,...)"?
// 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.
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.