(ANSI-Characterset)
Autor: Matthias Weingart (matthias@penthouse.boerde.de)

                        IIC-Bus Universal
                        =================


IIC-Bus Universal ist ein universelles Programm zum Bedienen von I2C-Bus
Bausteinen. Es kann an viele passive Parallelport-I2C-Bus Interfaces
angepat werden. Die I2C-Folgen knnen komfortabel editiert und kommentiert
werden. Zur einfacheren Handhabung von I2C-EEPROMs ist ein Hexdump-Editor
vorhanden. Es ist geschrieben fr Windows 3.1 und laeuft auch unter
Windows 95, nicht jedoch in Windows NT (direkter Portzugriff nicht erlaubt
in NT).
Das Programm erlaubt als Single Master alle in der I2C-Bus-Spezifikation
von Philips vorgesehenen Zustnde, so z.B. auch 'repeated start' und
'clock stretching'. Es ist nicht multimasterfhig.
IIC-Bus Universal ist geschrieben in Borland Delphi 1.02.
Auf die Erluterung des I2C-bus Protokolls gehe ich nicht ein, da
es bereits sehr hufig u.a. auch in Elrad beschrieben wurde.


Kurzbeschreibung der Bedienelemente
===================================
Hauptfenster
------------

Men:   'File|Load command file' bzw.
        'File|Save command file' zum Laden/Sichern des oberen Editorfeldes
        'File|Load received file' zum Speichern des unteren Editorfeldes
        'Extra|Dump' ruft ein Hexdump zur Editierung eines I2C-EEPROM auf
        'Extra|Settings' Konfigurierung der Pinzuordnung zu den I2C-Signalen

oberes Editorfeld:      Eingabe der zu sendenden I2C Kommandofolgen
                        mit Ctrl-Enter wird eine neue Zeile eingefgt
                        Syntax siehe unten
unteres Editorfeld:     Ausgabe der gesendeten I2C-Daten
Send-Button:    Sendet die Zeile, in der der Cursor steht bzw. die Zeilen,
                welche markiert sind (wenn 'Send All' aktiviert ist,
                werden immer alle Zeilen gesendet)
                alternativ Enter-Taste im oberen Editorfeld drcken
Repeat-Button:  wie 'Send', sendet aber stndig, Abbruch mit Cancel
                whrend 'Repeat' kann die gesendete Folge editiert werden
'I2C List'-Btn: Zur Feststellung welche I2C-Devices auf dem Bus vorhanden
                sind. Sendet alle geraden Deviceadressen aus (0,2,4...FE).
Up-Down-Buttons:Incrementiert/Decrementiert den Wert, auf dem sich der
                Cursor befindet. Besonders sinnvoll in Verbindung mit
                'Repeat' zur 'online'-Veraenderung eines Einstellwertes
'Send All':     wenn aktiviert, werden immer alle Zeilen des oberen
                Editfeldes gesendet, sonst nur die Zeile in der sich der
                Cursor befindet, bzw. die Zeilen, welche markiert sind
                ( es werden immer die kompletten Zeilen gesendet, auch
                wenn nur ein Teil einer Zeile markiert ist)
BaseAdr+0
BaseAdr+2
Set-Button:     Die LPT-Ausgabeports knnen hiermit direkt modifiziert
                werden. 'Set' stellt die Werte ein. BaseAdr+0 ist der
                normale 8 bit Datenausgang, BaseAdr+2 wird fr die
                Ausgabe der Steuersignale benutzt. BaseAdr+1 ist Input
		und nicht editierbar.
Port-Editfeld:  Angabe des Parallelports (LPT1..LPT4) oder einer
                beliebigen Hex-Adresse, an der sich das Interface befindet
I2C-Brake:      Zur Verlangsamung des I2C-Taktes. Wird bei 'Auto'
                automatisch bestimmt (Takt H/L-Zeit je 5s entspricht
		100 kHz). Erst ab 75 MHz Prozessortakt noetig. 
		(P133: Brake=67)


HexDump
-------

Das Hexdump kann verwendet werden, um den Inhalt eines I2C-EEPROMs zu
modifizieren. Es knnen EEPROMs mit 8 oder 16 bit Adressierung
gelesen und geschrieben werden. Die Grsse des EEPROMs in
Bytes und die erste Deviceadresse des EEPROMs sind in den entsprechenden
Feldern anzugeben. Bei 8 bit EEPROMs wird die Deviceadresse automatisch
nach 256 bytes um 2 erhoeht, so da z.B. ein 24C16 in einem Durchgang
gelesen werden kann. Bei 16 bit Adressierung erfolgt die
Erhhung nach 65536 bytes. (Die grssten EEPROMs sind z.Z. jedoch
'nur' 8 kByte gro.)
Mittels der Menpunkte 'File|Load' bzw 'File|Save' kann der Inhalt des
EEPROMs geladen bzw. geschrieben werden. Das Schreiben und Lesen erfolgt
aus Kompatibilittsgrnden einzel-byte-weise, so da der Schreibproze 
bei 8kBytes bis zu 30 sek. dauern kann.

Pin settings
------------

Alle I2C-Signale knnen den Signalen des Parallelports frei zugeordnet
werden. Jede Zuordung kann separat als 'Profile' in der Ini-Datei dieses
Programms abgelegt werden. Fr die Funktion des I2C-Busses sind die
ersten drei Signale unbedingt erforderlich (SdaOut, SdaIn, SclOut). Der
Scl Input kann auf Bit=None gelegt werden. Er wird verwendet,
um das 'clock stretching' von Slavedevices zu erkennen. Diese knnen
damit ihr Acknowledge hinausschieben.
Chargepump toggelt ein Pin des LPT-Ports alle 50 ms. Damit laesst sich
eine Ladungpumpe realisieren, welche die Betriebsspannung fuer das
Interface aus dem LPT-Port gewinnt.
Die beiden vorgegebenen Profiles entsprechen dem von Philips
verffentlichten passiven I2C-Interface bzw. einem Chipkartenleser
der Firma Mir-Tronic ( Conrad ).


Syntax der I2C-Kommandofolgen:
------------------------------

Startbedingung                          's'
zu sendende hex Bytes                   z.B.: 'a0'
zu empfangende Bytes                     'x' oder 'r'
Stopbedingung                           'p'
Abtrennung einzelner Kommandofolgen     ',' oder neue Zeile
Abtrennung eines folgenden Kommentars   ';'
Am Anfang und am Ende einer Kommandofolge knnen 's' und 'p' weggelassen
werden.

zustzliche Editorkommandos:
Einfgen einer neuen Zeile              Ctrl-Enter
Absenden der aktuellen Zeile            Enter

zustzliche Zeichen im unteren Editorfeld ('Empfang'):
acknowledged                            '+'
not acknowledged                        '-'

Beispiele:

Schreiben eines Bytes in einen I2C-Bus EEPROM
Eingabe:
A0 00 55
         A0 ist Deviceadresse,
         00 Subadresse,
         55 zu schreibender Wert auf Subadresse 0
Ausgabe bei gestecktem EEPROM:
sA0+ 00+ 55+p
         s  ist automatisch erzeugte Startbedingung
         A0 gesendete Deviceadresse
         +  vom EEPROM erzeugtes Acknowledge
         usw.
Ausgabe bei nicht gestecktem EEPROM:
sA0- 00- 55-p
         -  vom EEPROM kommt kein Acknowledge

Lesen eines Bytes aus einem I2C-Bus EEPROM mit 'repeated start'
Eingabe:
a0 00 s a1 x ;Lesen eines Bytes
         A0 ist Deviceadresse (zum Schreiben)
         00 Subadresse
         s  neue Startbedingung (so called repeated start)
         A1 ist die Deviceadresse (zum Lesen)
         x  Platzhalter fuer zu lesendes byte
	 ;  ein Kommentar folgt
Ausgabe:
sA0+ 00+ sA1+ r55-p
         r55- not ackowledge vom Master
        entsprechend der I2C-Busspezifikation gibt der Master (der PC)
        nach dem letzten gelesenen Byte ein nAck aus


Lesen von 8 Bytes aus einem I2C-Bus EEPROM auf einmal
Eingabe:
a0 00 s a1 x x x x x x x x

Ausgabe:
sA0+ 00+ sA1+ r55+ rFB+ r08+ rFF+ rFF+ rFF+ rFF+ rFF-p
        entsprechend der I2C-Busspezifikation gibt der Master (der PC)
        nach jedem gelesenen Byte ein Ack aus bis auf das letzte byte,
        diesem folgt ein nAck


Programmquellen
===============

Die Sourcen befinden sich im Pfad source\ .
Sie wurden mit Delphi 1.02 erstellt.
Vor Laden des Projects (iicuni.dpr) muss die Komponente WHexgrid 
(source\whexgrid\) installiert werden.



