Pic32MX I2C 400kHz Fast Mode

OP #3771585
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
#3781345
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.

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