REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
  EnglischEpochenFranzösischBiologieInformatikItalienisch
  KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  

Slave-Receiver - I2C-Bus-Dokumentation



I²C-Bus-Dokumentation

Slave-Receiver

1         Aufgabenstellung

Unser Projekt sollte darin bestehen, einen I²C-Bus Slave-Receiver als XILINX-Schaltung zu realisieren. Hr. Prof. Guggenberg hatte jedoch bald die Idee, daß es praktisch wäre, einen Slave-Receiver als Software-Programm für den Mikroprozessor zu erstellen. So wurde unsere Aufgabe in zwei Teile unterteilt, zuerst die softwaremäßige und anschließend die hardwaremäßige Realisierung des I²C-Bus-Bausteins.



2         Projektablauf

Anfänglich mußten wir uns in die Grundlagen des I²C-Bus einarbeiten. Während dieser Zeit wurden auch einige andere Aufgaben, wie die Fertigstellung unseres Vorjahresprojekts oder die Programmierung einiger WSI-Chips für das Heinrich-Clausen-µP-Board, erledigt. Anschließend entstanden erste Programmteile, z.B. die Erkennung der Startbedingung, Adress­erkennung, usw. Am Ende des ersten Semesters war ein Programm entstanden, bei dem eine I²C-Bus Übertragung software­mäßig möglich war (hierfür wurde ein "Software-Master" programmiert). Dieses Programm war jedoch nicht zu verwenden, da es die I²C-Bus Spezifikationen nicht einhielt. Der größte Teil des zweiten Semesters wurde dafür verwendet, das Programm so umzuarbeiten, daß ein "Hardware-Master" damit kommunizieren konnte (Einhaltung der Spezifikationen!). Somit entstand ein komplett überarbeitetes Programm, daß bis jetzt ohne Fehler funktioniert und bereits von anderen Klassen verwendet wird. Christian Steinbrecher kümmerte sich ebenfalls um eine 19"-Konstruktion, auf der ein fix verdrahteter I²C-Bus aufgebaut wurde. Ein Teil besteht aus einem Hardware-Master-Transmitter und einem Software-Salve-Receiver, der andere aus einem Hardware-Master-Receiver und einem Software-Slave-Transmitter, also zwei Specon- und zwei Heinrich-Clausen-Boards. Zusätzlich wurde ein Hardware-Slave-IC montiert. Das zweite Problem, die XILINX-Schaltung, wurde anhand eines Zustandsdiagramms (nach mehrmaligem Drängen von Hrn. Prof. Guggenberg) gelöst. Dort wurden die Zustände an der SCL- bzw. SDA-Leitung eingetragen und benötigte Signale hinzugefügt. So entstand eine Schaltung die mit VIEWLOGIC gezeichnet wurde und nun nur noch in das Programm XACT übernommen werden muß, sodaß ein XILINX-Baustein der 3000er Serie programmiert werden kann. Dies ist unsere letzte Aufgabe, somit wird unser Projekt wahrscheinlich rechtzeitig und erfolgreich abgeschlossen werden.

Nähere Informationen zu den einzelnen Projekttagen sind dem Projekttagebuch zu entnehmen.


2.1            Prinzipielle Überlegungen (Flussdiagramm)

2.2            Impulsdiagramme + Spezifikationen

Timing-Spezifikationen

Parameter

Symbol

min.

Max.

Einheit

SCL Taktfrequenz

SCL-clockfrequency

fSCL

100

kHz

Zeit in der Bus frei bis wieder Übertragung starten kann

Bus free time

tBUF

4,7

-

µs

Haltezeit nach Startbedingung (Zeit bis erster Takt generiert wird)

Start condition hold time

tHD;STA

4,0

-

µs

LOW-Periode des Taktes

SCL-LOW period

tLOW

4,7

-

µs

HIGH-Periode des Taktes

SCL-HIGH period

tHIGH

4,0

-

µs

Zeitdifferenz zwischen SCL->HIGH u. Startbed.

(bei Repeated Start -Bedingung)

Start condition set-up time

tSU:STA

4,7

-

µs

Haltezeit der gültigen Daten nach SCL-Impuls

(für C-Bus kompatible Master

Data hold time

tHD:DAT

0

5

-

-

µs

µs)

Vorhaltezeit der gütigen Daten vor SCL-Impuls

Data set-up time

tSU:DAT

250

-

ns

Anstiegszeit (SDA und SCL-Flanken)

Rise time

tR

-

1

µs

Abfallszeit (SDA und SCL-Flanken)

Fall time

tF

-

300

ns

Zeitdifferenz zwischen SCL->HIGH u. Stopbed.

Stop condition set-up time

tSU:STO

4,7

-

µs


START-Bedingung

Kurze Erklärung

·         START:   Clock - Leitung HIGH  ą  Datenleitung wechselt von HIGH auf LOW                                

·         START Bedingung wird immer vom Master generiert.

·         An den Bus angeschlossenen ICs (gewisse Geräte) können die START Bedingung leicht erkennen, weil sie das richtige Interface besitzen.

Mikrocomputer ohne ein solches Interface müssen die Datenleitung zwei mal pro Periode abtasten, um den Übergang zu erkennen.

Spezifikationen

tBUF      min  4,7µs       .  BUS FREE TIME      Zeit , die der Bus frei sein muß, bevor wieder eine

Übertragung gestartet            werden kann

tHD;STA  min  4,0µs       .  START CONDITION HOLD TIME           Haltezeit nach Startbedingung (Zeit bis

erster Takt generiert wird)

LOW und HIGH Zustände - Mastertakt

Kurze allgemeine Erklärung

[i]

Der Takt beim I²C-Bus hat eine minimale LOW-Periode von 4,7µs und eine minimale HIGH-Periode von 4µs. In diesem Mode kann ein Master einen Takt mit einer Frequenz von bis zu fmax=100kHz erzeugen.

Alle an den Bus angeschlossenen Geräte müssen aber in der Lage sein, diese Frequenz zu verarbeiten - gegebenenfalls muß der Takt synchronisiert werden  ą  d.h. der Master wird in einen WAIT STATE gebracht. Dadurch wird die LOW-Periode ausgedehnt. Daraus ergibt sich natürlich eine Verminderung der Frequenz.

Spezifikationen

tLOW     min  4,7µs       .  SCL-LOW  period                 LOW-Periode des Taktes     

tHIGH     min  4,0µs       .  SCL-HIGH  period                HIGH-Periode des Taktes


Zeitspezifikationen  bei  Datentransfer

Allgemein

Daten dürfen nur während der LOW-Periode des Taktes geändert werden (ausgenommen START- und STOP-Bedingungen).

Spezifikationen

tLOW     min  4,7µs       .  SCL-LOW  period                 LOW-Periode des Taktes     

tHIGH     min  4,0µs       .  SCL-HIGH  period                HIGH-Periode des Taktes

tHD;DAT            0µs       .  DATA HOLD TIME             Haltezeit der gültigen Daten nach einer

(negativen) SCL-Flanke

        (  5µs      .  DATA HOLD TIME                        Haltezeit der gültigen Daten nach einer

(negativen) SCL-Flanke  ß für C kompatible Master )

tSU;DAT  min  250ns      .  DATA SET-UP TIME           Vorhaltezeit der gültigen Daten vor einer

(positiven) SCL-Flanke

STOP  Bedingung

Kurze Erklärung

·         STOP:     Clock - Leitung HIGH  ą  Datenleitung wechselt von LOW auf HIGH

·         STOP  Bedingung wird immer vom Master generiert.

·         Auch hier gilt: An den Bus angeschlossenen ICs können die STOP Bedingung leicht erkennen, weil sie das richtige Interface besitzen. Mikrocomputer ohne ein solches Interface müssen die Datenleitung zwei mal pro Periode abtasten, um den Übergang zu erkennen.

Spezifikationen

tSU;STO  min  4,7µs       .  STOP CONDITION SET-UP TIME            Zeitdifferenz zwischen positiver Flanke

SCL und der STOP-Bedingung

RISE-  und  FALL - TIME

Spezifikationen

tR         max.  1µs        .  RISE TIME                Anstiegszeiten für SDA- und SCL-Flanken

tF         max.  300ns    .  FALL TIME              Abfallzeiten für SDA- und SCL-Flanken

Repeated  start

Spezifikationen

tSU;STA  min.  4,7µs      .  SCL HIGH                Zeitdifferenz zwischen der (positiven) Flanke des

Taktes und der Startbedingung (Repeated Start

Bedingung !)

 


2.3            Programm:

;#############################################

;############### I2C Slave ###################

;#############################################

;### Christoph Auer,Christian Steinbrecher ###

;############### 5HNA 1997/98 ################

;#############################################

;#############################################

;############## Zuweisungen ##################

;#############################################

hauptpr    code        8100h

unter                       code        8200h     

charout    code        3000h

binout                     code        301eh

binbit                      code        3018h

charin                      code        302ah

cursor                     equ          59h

home                       equ          48h

erase                       equ          4Ah

esc                          equ          1Bh

left                          equ          44h

down                      equ          42h

auer                         equ          10000000b             ;Adresse des Slave-Receivers

enter                        equ          3003h

dat                           bit            01b

sda                          bit            p1.7                        ;Port für die softwaresimulierte              SDA-Leitung

scl                           bit            p1.6                        ;                      -'-                    SCL-Leitung

;#############################################

;############# Startbedingung ################

;#############################################

org          hauptpr

haupt:                      jnb           scl,haupt  ;SCL=HIGH

                              

X1:                         jnb           sda,haupt ;SDA=HIGH

                              

anf:                         jnb           scl,haupt  ;SCL immer noch HIGH

                               jb             sda,anf    ;SDA HIGH->LOW Übergang

                               mov         R1,#00h  ;R1 'leeren'

                               mov         R2,#00h  ;R2 'leeren'

                               mov         R3,#8h                    ;R3 für 8 Durchläufe setzen (1byte)

;#############################################

;############## Adressabfrage ################

;#############################################

X2:                         setb         scl                           ;SCL freigeben

X3:                         jnb           scl,x3                      ;positive Clockflanke zur Datenübernahme

                              

X4:                         mov         c,sda                       ;Daten übernehmen

                               nop                                         ;minimale HIGH-Zeit=4µs

                               clr            scl                           ;Clock auf LOW ziehen ('Master bremsen')

                               mov         A,R2                       ;gesicherten Akku laden

                               rlc            A                            ;Daten (Carry-Bit) bitweise (MSBLSB) in den

                                                                              ;Akku schreiben (rotieren)

                               mov         R2,A                       ;Akku (Daten) sichern

                               djnz         r3, x2                      ;8x wiederholen (8bit=1byte)

X5:                         mov         R4,#auer ;lädt eigene Adresse in R4

                               mov         A,R2                       ;gesicherten Akku laden

                               subb        A,R4                       ;vergleicht die angelegten Daten=Adresse mit der

                                                                              ;eigenen Adresse

                               jnz           haupt                       ;bei Übereinstimmung weiter, wenn nicht warten auf neue

                                                                              ;Startbedingung

;#############################################

;############### Acknowledge #################

;#############################################

ack:                         clr            sda                          ;Daten auf LOW ziehen

                               setb         scl                           ;Takt freigeben

ack11:                     jnb           scl,ack11 ;warten bis Clock auf HIGH (Acknowledge Bit: Daten=LOW

                                                                              ;während SCL-HIGH-Phase)

ack12:                     jb             scl,ack12 ;halten der Datenleitung auf LOW bis Clockleitung LOW                                  

                               setb         sda                          ;Datenleitung freigeben

;#############################################

;############### Datenempfang ################

;#############################################

empfang: mov         R3,#8h                    ;R3 für 8 Durchläufe setzen (1byte)

                               mov         R1,#0h                    ;R1 'leeren'

                               mov         R4,#2h                    ;Stopbedingung 2x abtasten

X6:                         setb         scl                           ;SCL freigeben

X7:                         jnb           scl,x7                      ;postive Taktflanke (SCL LOW->HIGH) zur Datenübernahme

X8:                         mov         c,sda                       ;Daten übernehmen

                               jb             sda,x98   ;wenn sda=HIGH, dann sicher keine Stop-Bed.

x99:                        jnb           scl,x98    ;scl=HIGH

                               jb             sda,haupt ;sda:low->high

                               djnz         R4,x99                    ;2x abtasten

x98:                        clr            scl                           ;Clock auf LOW ziehen ('Master bremsen')

                               mov         A,R1                       ;gesicherten Akku laden

                               rlc            A                            ;Daten (Carry-Bit) bitweise (MSBLSB) in den Akku

                                                                              ;schreiben (rotieren)

                               mov         R1,A                       ;Akku (Daten) sichern

                               djnz         R3,X6                     ;8x wiederholen (1byte)

                               mov         A,R1                       ;gesicherten Akku laden

                               call          charout    ;Ausgabe am Bildschirm

;#############################################

;############### Acknowledge #################

;#############################################

ack2:                       clr            sda                          ;Daten auf LOW ziehen

                               setb         scl                           ;Takt freigeben

ack21:                     jnb           scl,ack21 ;warten bis Clock auf HIGH (Acknowledge Bit: Daten=LOW

                                                                              ;während SCL-HIGH-Phase)

ack22:                     jb             scl,ack22 ;halten der Datenleitung auf LOW bis Clockleitung LOW

                               setb         sda                          ;Datenleitung freigeben

                               jmp          empfang  ;Sprung zur Empfangsroutine=Warten auf neue Daten

;#############################################

end


2.4            TIMING-DIAGRAMM:

Programm

Zeit/Befehl

SDA

SCL

;###########################################

0

1

0

1

;############# Startbedingung ################

;###########################################

org

hauptpr

haupt:

jnb

scl,haupt

2µs

X1:

jnb

sda,haupt

2µs

anf:

jnb

scl,haupt

2µs

jb

sda,anf

2µs

mov

R1,#00h

1µs

mov

R2,#00h

1µs



mov

R3,#8h

1µs

;###########################################

;############## Adressabfrage ################

;###########################################

X2:

setb

scl

1µs

X3:

jnb

scl,x3

2µs

X4:

mov

c,sda

1µs

nop

1µs

clr

scl

1µs

mov

A,R2

1µs

rlc

A

1µs

mov

R2,A

1µs

djnz

r3, x2

2µs

X5:

mov

R4,#auer

1µs

mov

A,R2

1µs

subb

A,R4

1µs

jnz

haupt

2µs

;###########################################

;############### Acknowledge ################

;###########################################

ack:

clr

sda

1µs

setb

scl

1µs

ack11:

jnb

scl,ack11

2µs

ack12:

jb

scl,ack12

2µs

setb 

sda

1µs




;###########################################

;############### Datenempfang ###############

;###########################################

empfang:

mov

R3,#8h

1µs

mov

R1,#0h

1µs

mov

R4,#2h

1µs

X6:

setb

scl

1µs

X7:

jnb

scl,x7

2µs

X8:

mov

c,sda

1µs

jb

sda,x98

2µs

x99:

jnb

scl,x98

2µs

jb

sda,haupt

2µs

djnz

R4,x99

2µs

x98:

clr

scl

1µs

mov

A,R1

1µs

rlc

A

1µs

mov

R1,A

1µs

djnz

R3,X6

2µs

mov

A,R1

1µs

call

charout

1,x ms

;###########################################

;############### Acknowledge ################

;###########################################

ack2:

clr

sda

1µs



setb

scl

1µs

ack21:

jnb

scl,ack21

2µs

ack22:

jb

scl,ack22

2µs

setb

sda

1µs

jmp

empfang

2µs

;###########################################

end


2.5            Zustandsdiagramm (f. XILINX-Schaltung)

2.6            Blockschaltbild


2.7            Gray-Code-Counter (9 negative Flanken)

Dieser Zähler ist kein richtiger Gray-Code-Zähler, weil sich vom 9. Auf den 1.Zustand 2Bits ändern. Dies ist jedoch unerheblich, da bei diesem Übergang nicht der wichtige Zustand 8 erreicht werden kann (hier wird das Schieberegister ausgelesen und das ACK "gesendet").


QN+1

QN

D

C

B

A

D

C

B

A

1

0

0

0

0

0

1

0

1

2

0

0

0

1

0

0

0

0

3

0

0

1

1

0

0

0

1

4

0

0

1

0

0

0

1

1

5

1

0

1

0

0

0

1

0

6

1

0

0

0

1

0

1

0

7

1

1

0

0

1

0

0

0

8

1

1

0

1

1

1

0

0

9

0

1

0

1

1

1

0

1

A

2

3

4

5

1

C

D

8

9

7

6

B

A

1

1

0

0

X

0

X

X

C

D

1

1

X

X

0

X

X

0

B

A=/B*/C*/D+C*D

A

0

1

1

1

X

0

X

X

C

D

0

0

X

X

0

X

X

0

B

B=A*/B*/C+B*/D

A

0

0

0

0

X

0

X

X

C

D

1

1

X

X

1

X

X

0

B

C=/B*D

A

0

0

0

1

X

0

X

X

C

D

1

0

X

X

1

X

X

1

B

D=/A*B+/A*/B*D




2.8            komplette Schaltung (Viewlogic)




[i] So nicht im Datenblatt spezifiziert, TL,TH sollte sich aber bei anderem fmax derart ändern










Haupt | Fügen Sie Referat | Kontakt | Impressum | Datenschutz







Neu artikel