I2C Probleme beim starten

Gast #645956
Lesenswert?

Hallo,
ich benutze einen LPC2138 auf einem Board der Firma Bipom. Dieser über 
I2C mit einem Peripherieboard verbunden. Ich habe bei dem 
Peripherieboard ein Beispielprogramm dabei welches ich erstmal testen 
will und es dann erweitern möchte.

Hier nun mein Problem:
Die I2C Routine bricht beim starten ab. Er hängt in einer While-Schleife 
fest, in der abfragt ob I2STAT ungleich 0x08 ist. I2STAT bleibt immer 
auf 0x20, es wird nicht 0x08. So weit ich das Manual verstanden habe, 
heißt dass der Conroller auf ACK wartet, das er aber wohl nicht bekommt.

Hier die Problemstelle:

I2C_ERRCODE Start(void)
{
  I2C_ERRCODE ec = I2C_SUCCESS;
  unsigned long delay =0;
/* Generate Start */
  I2CONSET = 0x60;
/* Clear SI */
  I2CONCLR=0x08;
  int i =I2STAT;
  while (I2STAT != 0x08)
  {
     int j = I2STAT;
    if (delay++ == I2C_TIMEOUT)
    {
      ec = I2C_START_ERROR;
      break;
    }
  }
  return ec;
}

Woran kann es liegen? Am Bus hängt außer dem Controller und dem 
Peripherieboard nichts dran.

Hardwaremäßig kann ich eigentlich auch alle Fehler ausschließen, da ich 
zuvor ein anderes Peripherieboard über SoftI2C angeschlossen hatte und 
es auch lief. Außerdem handelt es sich um ein Stecksystem, die Boards 
kann man einfach übereinander stecken, dadurch habe ich kaum 
Leitungslängen. Ob Pullup Widerstände verbaut sind kann ich nicht sagen, 
da ich diese im Manual nicht finden konnte.

Kann mir jemand helfen?

Ich habe noch den Quelltext der I2C Routine angehängt.
Angehängte Dateien:
Gast #646586
Lesenswert?

Ich habe mir mal die Signale mal mit dem Oszi angeschaut. Auf SDA liegt 
ein konstantes 5V Signal an und auf SCL ein 500 mHz Signal mit 5V. Es 
sind keine Störungen, denn es sind einwandfreie 5 V und sehr sauber 
Signale mit steilen Flanken. Es ist allerdings nicht symetrisch, es ist 
ein Pulspausenverhältnis von ungefähr 2. Ist das normal?

Wieso ist der Bus nur mit 500 mHz getaktet, obwohl 100kHz eingestellt 
sind. Und warum liegt am SDA konstante 5V an?

Ich habe auch noch im Datenblatt nachgelesen, also es werden 2,2k 
Widerstände als Pullup verwendet.

Außerdem hab ich mich noch mehr in den I²C Bus eingelesen, aber noch 
nicht rausgefunden was genau die 0x08 im I2STAT Register bedeuten. Ich 
weiß zwar dass es das Statusregister ist, aber ich verstehe die Tabelle 
im Datenblatt nicht ganz was danach gemacht wird.

Das Problem liegt aber auch daran dass einfach keine Signale über den 
Bus kommen.

Wäre schön wenn mir jemand helfen könnte.

Lutz
#646631
Lesenswert?

Im Ruhezustand müssen SDA und SCL high sein. Beim I²C-START muss SDA low 
werden. Mir scheint, Du hast ein Hardwareproblem - Schluss gegen Vcc, 
oder gegen eine andere Leitung. Oder etwas falsch konfiguriert.
Zur Software kann ich nicht mehr sagen, ohne mich einzulesen; wozu ich 
aber weder Lust noch Zeit habe.
Gast #646767
Lesenswert?

Ok, danke soweit schon mal. Also SDA und SCL sind beim Ruhe auf VCC. 
Beim Starten geht allerdings SDA nicht auf LOW, aber der Takt an SCL 
beginnt.
Ich habe eben mal das andere Board was mit Soft I²C läuft getestet, da 
kann ich aber keiner der Leitungen ein Signal messen, aber 
komischerweise überträgt das Board Signale, wie von Zauberhand ;-).

Falls ich einen Schluss habe, habe ich ein großes Problem, da es ein 
fertiges Board von BIPOM ist und ich da nichts drauf rumlöten will/kann.

Hat sonst jemand noch eine Ahnung was ich tun kann? Ich habe mal die 
Überprüfung von I2Stat beim starten auskommentiert, aber beim Senden bei 
der Abfragen kommt das gleiche Problem  wieder. Es scheint also als ob 
sich I2STAT nie ändert.
Gast #651845
Lesenswert?

Vielen Dank für die Hilfe, ich habe das Problem mittlerweile gelöst. Ich 
habe einfach "I2CONCLR=0x08;" auskommentiert, dann ging es, denn dadurch 
wurde das Interrupt Flag zurückgesetzt, obwohl dies an der Stelle nicht 
nötig ist.

Die 500mHz waren nicht der Bustakt, sondern die Frequenz mit der die 
angeschlossenen Relais an- und ausgeschaltet wurden, also der Bus 
geschaltet wurde, der Bus selber hat die eingestellten 100kHz.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren