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