Forum: Mikrocontroller und Digitale Elektronik Pic32MX I2C 400kHz Fast Mode


von Ralf H. (ralf_09)


Lesenswert?

Hallo,

ich versuche eine RTC an einem PIC32MX795 ans laufen zu bekommen.
Mit 100kHz arbeitet alles wunderbar. Wenn ich aber den Bus mit 400kHz 
fahren will funktioniert es nicht mehr.
Die RTC kann laut Spec. 400kHz Fast Mode.

Meine Init Funktion für den Bus:

void init_i2c_2(int peripheral_clock)
{
    I2CConfigure(I2C_BUS, I2C_ENABLE_HIGH_SPEED);
    I2CSetFrequency(I2C_BUS, peripheral_clock, I2C_CLOCK_FREQ);
    I2CEnable(I2C_BUS, true);
}

peripheral_clock = 40MHz
I2C_CLOCK_FREQ = 400kHz

Ich habe es auch ohne das setzen des Bits "I2C_ENABLE_HIGH_SPEED" 
versucht, hat aber nichts gebracht.

Das Oszi zeigt mir eine Clock Flanke, danach passiert nichts mehr. Ich 
schätze mal das die RTC sich nicht regt.

Hat jemand eine Idee?

Ralf

von Michael H. (morph1)


Lesenswert?

Welchen Wert haben deine Pull-Ups? Wie steil sind die Flanken?
Normal liegts eher daran als an den verbauten Komponenten. Dennoch 
darfst du auch gerne verraten welche RTC du gewählt hast :)

von Ralf H. (ralf_09)


Lesenswert?

Hallo,

die PullUps sind 4,7k groß und als RTC habe ich eine RX8010SJ.

Grüße Ralf

von Michael H. (morph1)


Lesenswert?

Sorry wegen der verspäteten Antwort, hab glatt drauf vergessen.

4k7 ist wohl ok, wenn die Leitungen kurz genug sind und wenig Kapazität 
haben.

Hast du mal in Betracht gezogen die I²C-Lib selbst zu bauen? Ich hab das 
vor Jahren einmal erledigt und seither keine Probleme.

von Klaus (Gast)


Lesenswert?

Ralf Herms schrieb:
> Das Oszi zeigt mir eine Clock Flanke, danach passiert nichts mehr. Ich
> schätze mal das die RTC sich nicht regt.

Der Master schlägt den Takt, d.h. die Clock muß kommen egal was der 
Slave macht, selbst wenn er gar nicht da ist.

MfG Klaus

von Michael H. (morph1)


Lesenswert?

Klaus schrieb:
> Ralf Herms schrieb:
>> Das Oszi zeigt mir eine Clock Flanke, danach passiert nichts mehr. Ich
>> schätze mal das die RTC sich nicht regt.
>
> Der Master schlägt den Takt, d.h. die Clock muß kommen egal was der
> Slave macht, selbst wenn er gar nicht da ist.
>
> MfG Klaus

Naja, fast. Dank Clock-Streching kann ein schlecht implementierter Slave 
allerdings den Pegel auf Low halten und somit erscheint keine weitere 
Flanke.

Das Problem aus meiner Sicht ist nur, wenn wirklich nur eine Flanke 
kommt, dann ist zu dem Zeitpunkt nicht relevant ob 100 oder 400kHz 
verwendet werden, die Flanken sind immer gleich steil.

Der gewählte PIC hat ein recht ausführliches Errata-Sheet, wo auch 
einige Sachen bezüglich I²C vorkommen. Eventuell liegt der Fehler hier.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.