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?
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.
>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...
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.