Hi, ich verwende für ein Projekt den LTC2945 Power Monitor: http://www.linear.com/product/LTC2945 Dieser ist über I2C mit einen Raspberry Pi B+ verbunden auf dem ein aktuelles Linux läuft. Mein Problem ist dass die Datenübertragung über I2C nicht richtig funktioniert bzw. ich das mit den i2c-tools irgendwie nicht hinbekomme. Mit i2cdetect wird der Baustein im System gefunden: ~ # i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 6f 70: -- -- -- -- -- -- -- -- Das Control-Register (Register 0) lässt sich auch auslesen: ~ # i2cget -y 1 0x6f 0x00 0x05 Ich denke daher dass der Baustein bzw. I2C grundsätzlich funktioniert. Allerdings gelingt es mir nicht weitere Register zu lesen oder zu schreiben. Laut dem Datenblatt http://www.linear.com/docs/42284 muss man zum Lesen eines Byte oder Wort zwei mal die Adresse auf den Bus legen ohne diesen freizugeben, also Start -> Adresse -> Register -> Adresse und erhält dann die Daten vom Slave. Ich hab das mal so probiert, allerdings ohne Erfolg: ~ # i2cset -y 1 0x6f 0x24 ~ # i2cget -y 1 0x6f 0x05 da nach i2cset die Register-Nr leider wieder auf 0 zurückgesetzt wird. Kann mir evtl. jemand weiter helfen? Ist es nicht möglich mit den i2c-tools diesen Baustein anzusteuern? Grüße
Der i2c-Controller des Raspberry Pi kann leider kein Repeated Start. Wenn du Pech hast, kommt dein Chip damit nicht klar und funktioniert gar nicht am Pi. Vielleicht geht es, wenn du die beiden Bytes direkt hintereinander schickst und ein Stopp zwischendrin, manche Slaves tolerieren das auch.
Sven B. schrieb: > Der i2c-Controller des Raspberry Pi kann leider kein Repeated > Start. > Wenn du Pech hast, kommt dein Chip damit nicht klar und funktioniert gar > nicht am Pi. Vielleicht geht es, wenn du die beiden Bytes direkt > hintereinander schickst und ein Stopp zwischendrin, manche Slaves > tolerieren das auch. Danke für den Hinweis! Damit ist mir schon mal weiter geholfen. Der Kernel bietet ja auch den "GPIO-based bitbanging I2C" Treiber, denkst du das es damit funktionieren könnte? Grüße
Kann ich leider nicht sagen -- probier's aus. Gefühlsmäßig würde ich denken wenn dir das langsame i2c reicht hat das gute Chancen zu funktionieren.
Sven B. schrieb: > Kann ich leider nicht sagen -- probier's aus. Gefühlsmäßig würde > ich > denken wenn dir das langsame i2c reicht hat das gute Chancen zu > funktionieren. So ich hab das gerade mal reingehackt... funktioniert! Zwar leider etwas lahm aber immerhin. Falls jemand das gleiche Problem haben sollte ich habe es quick&dirty so gelöst: -) In der Kernel-Config den BMC2708 BSC Treiber deaktivieren und den GPIO-I2C-Treiber aktivieren (CONFIG_I2C_GPIO=y) -) Den GPIO-I2C Platform-Device hinzufügen, das hab ich kurz und schmerzlos in der Datei arch/arm/mach-bcm2708/bcm2708.c erledigt: #include <linux/i2c-gpio.h> ... static struct i2c_gpio_platform_data i2c_gpio_data = { .sda_pin = 2, .scl_pin = 3, }; static struct platform_device i2c_gpio_device = { .name = "i2c-gpio", .id = 0, .dev = { .platform_data = &i2c_gpio_data, }, }; ... void __init bcm2708_init(void) { ... bcm_register_device(&i2c_gpio_device); ... } -) linux-rebuild, kopieren und neustarten Und zum Test: ~ # i2cget -y 0 0x6f 0x25 0xf0 Grüße
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.