BLIT2008-Board mit i2c-tiny-usb-Firmware
Aus BraLUG-Wiki
MaD (Diskussion | Beiträge) (Ein Anfang) |
MaD (Diskussion | Beiträge) K (→Kerneltreiber) |
||
Zeile 8: | Zeile 8: | ||
==Kerneltreiber== | ==Kerneltreiber== | ||
− | + | Der benötigte Kerneltreiber namens <code>i2c-tiny-usb</code> ist ungefähr seit Version 2.6.22 im Linux-Kernel. Man benötigt folgende Konfigurationsoptionen (sollte im Distributionskernel dabei sein): | |
+ | <pre> | ||
+ | CONFIG_I2C | ||
+ | CONFIG_I2C_CHARDEV | ||
+ | CONFIG_I2C_TINY_USB | ||
+ | </pre> | ||
+ | Geladen werden müssen <code>i2c_tiny_usb</code> und <code>i2c_dev</code>. | ||
==i2c-tools== | ==i2c-tools== |
Version vom 21. November 2008, 12:21 Uhr
Statt das Rad neu zu erfinden, kann man sich für I²C auf dem BLIT2008-Board auch die Linux-Kernel-Unterstützung für ein ähnliches Projekt zunutze machen. Die Firmware für das i2c-tiny-usb-Board läuft mit minimalen Änderungen auch und man hat die Treiber- und Software-Unterstützung von Linux als Bonus.
Inhaltsverzeichnis |
Firmware
TODO
Kerneltreiber
Der benötigte Kerneltreiber namens i2c-tiny-usb
ist ungefähr seit Version 2.6.22 im Linux-Kernel. Man benötigt folgende Konfigurationsoptionen (sollte im Distributionskernel dabei sein):
CONFIG_I2C CONFIG_I2C_CHARDEV CONFIG_I2C_TINY_USB
Geladen werden müssen i2c_tiny_usb
und i2c_dev
.
i2c-tools
Liste der verfügbaren Busse:
# i2cdetect -l i2c-5 i2c i2c-tiny-usb at bus 005 device 004 I2C adapter i2c-0 i2c radeonfb monid I2C adapter i2c-1 i2c radeonfb dvi I2C adapter i2c-2 i2c radeonfb vga I2C adapter i2c-3 i2c radeonfb crt2 I2C adapter i2c-4 smbus SMBus Via Pro adapter at e800 SMBus adapter
- Die Nummer des I²C-Busses ist die 5 in
i2c-5
, nicht die 5 in „at bus 005
“ (USB-Bus-Nummer)
Slave-Chips am Bus finden:
# i2cdetect 5 WARNING! This program can confuse your I2C bus, cause data loss and worse! I will probe file /dev/i2c-5. I will probe address range 0x03-0x77. Continue? [Y/n] 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
-
i2cdetect
verwendet eine etwas andere Darstellung für die Adressen. Im AVR-Code würde man Aread = 2 * n + 1 und Awrite = 2 * n + 0 verwenden,0x51
ist also Adresse0xA2
(schreiben) und0xA3
(lesen). - Die Warnung sollte man durchaus ernst nehmen und das Kommando nicht unreflektiert auf den anderen Bussen ausführen. Ist man sich sicher, den richtigen Bus erwischt zu haben (in diesem Fall
5
), dann kann man auchi2cdetect -y 5
benutzen, um die Nachfrage abzuschalten.
RTC auslesen
In Anlehnung an Uwes Beispiele hier ein Script, um die RTC-Zeit auszulesen. Gegebenfalls sind wieder Bus-Nummer und Adresse anzupassen.
get_rtc_time.sh
:
#!/bin/sh BUS=5 ADDR=0x51 get_part () { i2cget -y "$BUS" "$ADDR" $1 | sed -e 's/^0x//' ; } ss=`get_part 2` mm=`get_part 3` hh=`get_part 4` dd=`get_part 5` mo=`get_part 6` echo "RTC time: $dd.$mo. $hh:$mm:$ss"
# ./get_rtc_time.sh RTC time: 01.01. 03:14:11
lm_sensors
TODO