Forum: Mikrocontroller und Digitale Elektronik Neues bei ST: STM32F217


von Hannes S. (Gast)


Lesenswert?

Bin gerade frisch verliebt: 
http://www.st.com/internet/mcu/product/250173.jsp

Datenblatt ist verfügbar und status ist immerhin schon "preview" - mal 
schauen, wie lange wir noch warten müssen...

von Gerd (Gast)


Lesenswert?

Hannes S. schrieb:
> Datenblatt ist verfügbar und status ist immerhin schon "preview" - mal
> schauen, wie lange wir noch warten müssen...

Ich habe weniger Ansprüche, eine laufende I2C Peripherie bei den 
STM-Cpus wäre schon etwas ....

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich habs mal in die Übersicht vom Artikel STM32 rein geschrieben.

von Steffen (Gast)


Lesenswert?

Gerd :
> Ich habe weniger Ansprüche, eine laufende I2C Peripherie bei den
> STM-Cpus wäre schon etwas ....

Was läuft denn nicht bei dem I2C im STM32 ? Hatte bisher noch keine 
Probleme, ob mit INT/DMA oder polling.

von Stm32User (Gast)


Lesenswert?

@Steffen:

Bitte den promblemlosen I2C + Int (ohne DMA) Quellcode mal zeigen. Ich 
glaube nicht das die I2C-Einheit bugfrei ist. Diverse Quellen 
reinitialsieren die gesamte Hardware nach jedem I2C Transfer, vor allem 
kombinierte Read/Write Zugriffe bringen Probleme.

Beitrag "STM32 I2C Bus bleibt hängen"
http://www.jiangsheng.tk/56.html
http://svn.openpilot.org/blame.php?repname=OpenPilot&path=%2Ftrunk%2Fflight%2FPiOS%2FSTM32F10x%2Fpios_i2c.c&rev=1350&peg=1350

von Gerd (Gast)


Lesenswert?

Die kurze Beschreibung aus der Errata:
1
Description
2
When the EV7, EV7_1, EV6_1, EV6_3, EV2, EV8, and EV3 events are not managed before the current byte is being transferred, problems may be encountered such as receiving an extra byte, reading the same data twice or missing data.
3
4
Workarounds
5
When it is not possible to manage the EV7, EV7_1, EV6_1, EV2, EV8, and EV3 events before the current byte transfer and before the acknowledge pulse when changing the ACK control bit, it is recommended to:
6
1. use the I2C with DMA in general, except when the Master is receiving a single byte
7
2. use I2C interrupts and boost their priorities to the highest one in the application to make
8
them uninterruptible

Man soll als I2C Master die DMA benutzen, es sei denn man will nur ein 
Byte empfangen. Für einen Sensor der evtl. nur 2 Bytes empfängt und 2 
Bytes sendet ein ganz schöner Overhead und der DMA Channel ist für diese 
Zeit nicht für eine andere Peripherie nutzbar.

Oder der I2C Interrupt soll benutzt werden, aber nur mit der höchsten 
Priorität. Sprich, das System hängt oder "stört" den I2C Interrupt und 
bei jeden Byte das gesendet oder empfangen wird schlägt ein Interrupt 
auf.

Oder man schaltet alle Interrupts aus und macht ein auf Pollen ....


Die I2C Peripherie ist in Verbindung mit einem Real-Time-Kern nur 
bedingt benutzbar.

von Steffen (Gast)


Lesenswert?

@Stm32User :

> Bitte den promblemlosen I2C + Int (ohne DMA) Quellcode mal zeigen.

so einfach zeigen kann ich das nicht, da ich den I2C unter CMX ( RTOS ) 
laufen lasse. Ich benutze dabei einige Events im CMX und das muss man 
erstmal trennen.
Ich habe an dem Bus einen EEPROM und ein Display, wobei ich das Display 
über DMA beschreibe und den EEPROM im INT-Betrieb. Die Software läuft 
seit 2 Jahren in Laborgeräten ohne Probleme.
Das Bsp. von ST im INT-Betrieb war leider ( oder ist noch ? ) falsch und 
da habe ich schon eine Weile geraucht, um den Fehler zu finden.

@ Gerd:

> Die I2C Peripherie ist in Verbindung mit einem Real-Time-Kern nur
> bedingt benutzbar.

Wie oben schon geschrieben läuft der I2C zusammen mit CMX ohne Probleme. 
Leider ist es richtig, das der I2C-INT in der höchsten Priorität laufen 
muss, stört bei meiner Applikation aber nicht, da nur selten in den 
EEPROM geschrieben wird. Ich wollte schon lange mal den EEPROM auf DMA 
umstellen, hatte aber leider dazu noch keine Zeit.

Versuchen kann ich mal, eine Applikation hier reinzustellen. Muss das 
aber erstmal aus dem System ( CMX ) trennen.

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.