I2C-Server

DH1AAD ,Ingo Gerlach , 28.04.2002, e-Mail : IngoGerlach@welfen-netz.com


 

1.0 Info

Die hier eingesetzten Treiber dienen dazu die einzelnen I2C-Komponenten über die serielle Schnittstelle anzusteuern. Die einzelnen Treiber sind in "C" erstellt.
Damit diese etwas einfacher verwendet werden können, sind für diese Treiber Perl-Module erstellt worden. Bis auf das TestUtil hwtest, greifen die Softwaremodule wie z.B. der Wobbler (hf_sweep.pl) über einen Server auf den I2C-Bus zu. Dieser Server arbeitet aber nicht wie im herkömmlichen Sinne.
Seine Aufgabe ist es, immer genau nur einem Prozess zu erlauben, auf den I2C-Bus zuzugreifen. Es wird damit verhindert, das es zu einem "Dead-Lock" auf dem Bus kommt.
Dieses Verfahren ist zwar geringfügig langsamer als der direkte Zugriff, hat aber den großen Vorteil, das es nun möglich ist, verschiedene Applikationen parallel laufen lassen zu können.

1.1 I2C-Softwareinstallation

Um die Hardware von Linux aus ansprechen zu können, wird noch etwas Software benötigt. Die Beschreibung sowie das Tar-File gibt es hier Software. Die Installation ist recht einfach, wenn auch noch nicht vollständig automatisiert.
Vorgehensweise: (als root !)

1. Verzeichnis anlegen -> mkdir /opt/i2c
Das Verzeichnis ist in den Scripts fest vorgegeben. (Derzeit noch ... )
Soll die Software in ein anderes Verzeichnis installiert werden, muss nach dem Auspacken das Makefile angepasst werden.

2. In dieses Verzeichnis nun das Tar-File kopieren und auspacken.
gzip -d i2c-0.3.tar.gz
tar -xvf i2c-0.3.tar

3. Dann INSTALL eingeben
Es werden nun die Lib's kompiliert und die Perl-Module erstellt.
Das Client Modul muss derzeit noch separat erstellt werden.
Dazu in das Verzeichnis /opt/i2c/perl/i2c_client wechseln und dort
perl Makefile.PL starten.
Danach dann mit "make install" installieren.

4. Wenn der I2C-Server automatisch gestartet werden soll, muss ein SymLink erstellt werden. Dieses Verzeichnis ist von der jeweiligen Linux-Distribution abhängig. Für SuSe 6.4 währe es z.B. /sbin/init.d/rc3.d

ln -s /opt/i2c/perl/i2c_server/i2c_serv_start.sh /sbin/init.d/rc3.d/S50i2c_server
ln -s /opt/i2c/perl/i2c_server/i2c_serv_start.sh /sbin/init.d/rc3.d/K50i2c_server

Ob der Server korrekt gestartet wurde, kann man im Log-File nachschauen.

tail /opt/i2c/log/i2c_server.log
Fri Jan 25 21:07:21 2002 I2C-Server: Server:I2C-Interface found on Port 0x3f8h
Fri Jan 25 21:07:21 2002 I2C-Server: I2C-Server gestartet. (Unix-Domain) /tmp/i2c_device

Soll der Server manuell gestartet werden, muss dies als root erfolgen. Der Server kann jederzeit gestartet bzw. gestoppt werden.
Usage: /etc/rc.d/rc3.d/S50i2c_server {start|stop|restart|reload|status}

Auch "hwtest.pl" kann nur als root gestartet werden. Dieses verwendet den Server aber nicht, da es direkt den Bus anspricht.

Die Konfiguration des i2c_servers wird über ein Konfigurationsfile gesteuert. Evtl. ist der Wert der Variable Portdelay anzupassen. Bei sehr schnellen Rechnern diesen Wert mal etwas vergrößern z.B. auf 15, falls es bei der Erkennung des Interfaces zu Schwierigkeiten kommen sollte.

1.2 Konfig

/opt/i2c/perl/i2c_server/i2c_server.cfg

# i2c_server.cfg
# Konfiguration für i2c_server
# Stand : 0.1 / 30.12.2001
 
# Socket , default /tmp/i2c_device
I2C_DEVICE=/tmp/i2c_device
 
# Port , Seriell, default 0, d.h. automatisch suchen
I2C_PORT=0
 
# Portdelay, default 10
I2C_DELAY=10
 
# Logfile für Server  default /opt/i2c/log/i2c_server.log
I2C_LOGFILE=/opt/i2c/log/i2c_server.log
 
# Debug Mode, ausführliche Meldungen in's Logfile, default 0 d.h. Aus
I2C_DEBUG=0

2.0 Funktions-Beschreibungen der Lib's


© Ingo Gerlach, DH1AAD, 28.04.2002
E-Mail bitte an:IngoGerlach@Welfen-Netz.com