BLIT2008-Board mit i2c-tiny-usb-Firmware

Aus BraLUG-Wiki

Wechseln zu: Navigation, Suche


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 Adresse 0xA2 (schreiben) und 0xA3 (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 auch i2cdetect -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

'Persönliche Werkzeuge