Forum: Mikrocontroller und Digitale Elektronik STM32 Cortex-Arm I2C Bug?


von Gast (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei mehrere Platinen mit jeweils einem Cortex-M3 von ST 
(STM32F103RBT6) in Betrieb zu nehmen. Unteranderem ist auf der Platine 
ein 2k EEPROM verbaut welches über den ersten I2C-Bus des Cortex 
angeschlossen ist. Bei 2/3 der Platinen funktioniert dies auch 
Problemlos, das restliche 1/3 bleibt beim Starten der Schnittstelle mit 
I2C_GenerateSTART(I2C1, ENABLE); while(!I2C_CheckEvent(I2C1, 
I2C_EVENT_MASTER_MODE_SELECT)); hängen. Auf dem Oszi ist auch nichts zu 
erkennen. Daher die Frage ob euch evtl. einen Fehler im STM32 bezüglich 
I2C-Bus bekannt ist?

von Star K. (starkeeper)


Lesenswert?

Wenn dort ein Hardwarefehler bekannt wäre, dann würdest du den in einem 
Errata beschrieben finden. Das passendende Errata findest du auf der 
Webseite von STM.

Es ist sehr sehr unwahrscheinlich einen Bug zu finden, der dort noch 
nicht beschrieben ist. Wahrscheinlicher ist da ein Fehler deinerseits, 
sei es Software oder Hardware-seitig.

von Matthias (Gast)


Lesenswert?

>Wenn dort ein Hardwarefehler bekannt wäre, dann würdest du den in einem
>Errata beschrieben finden.

Falls man icht mal wirklich das Glück hat, der ERSTE zu sein!

Die I2C EEProms stehen bei mir unter "mit Vorsicht genießen"!
So einen Effekt hatte ich auch mal, aber bei einem DSPIC32. Irgendwie
kann es wohl vorkommen, dass das EEPROM "hängen" bleibt. Dann wird
von I2C Modul eine "Kollision" erkannt. Meine Lösung war, dass ich kein
I2C Modul benutzt hab, sondern einen Software Algo. Denn wenn man 
einfach stur weitertaktet, läuft es komischerweise normal weiter...

von Gast (Gast)


Lesenswert?

Es gibt ein Bug. Der STM schickt nachdem man das Stop setzt nochmals 8 
Clock Signale, warum auch immer.
Bei mir gab es dadurch riesige Probleme.

von domi_ (Gast)


Lesenswert?

Hi,

ich habe eine Lösung im STM32 Forum gefunden, hat bei mir geholfen, beim 
Initalisieren wird nochmal ein STOP über die I2C-Leitung gesendet, wenn 
der Bus "Busy" ist: http://www.st.com/mcu/forums-cat-8300-23.html

von (prx) A. K. (prx)


Lesenswert?

Wenn man den RCC-Takt vom I2C-Modul zu einem Zeitpunkt einschaltet, zu 
dem die betreffenden GPIO-Pins bereits dem I2C zugeordnet sind (AltOut), 
dann gibt es einen kurzen Low-Impuls auf beiden Leitungen.

Man sollte also darauf achten, erst das I2C-Modul mit Takt zu versorgen 
und dann die Pins zu programmieren.

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.