Hallo zusammen, ich habe eine kurze Frage zu einem anstehenden Projekt, zu der ich leider bisher keine klare Antwort finden konnte und mich selber zu wenig auskenne. Ich würde gerne einen STM32F4 für eine zeitkritische Aufgabe benutzen, der gleichzeitig per USB mit einem Computer kommunizieren müsste. Dabei soll über ein Timer-Event im (schlimmsten Fall, vorhersehbar) mit Abständen von 1us ~20 Rechenzyklen an Code ausgeführt werden. Zwischendurch sollte jedoch immer viele Millisekunden Zeit sein um eventuell anfallende Daten zu übertragen. Kann dieser Interrupt eine höhere Priorität haben als der USB-Interrupt, oder stört das die Kommunikation? Die nötige Bandbreite sind jedenfalls nur max. 100 Byte pro Sekunde. Ich kenne mich leider noch nicht sehr gut mit den STM32-Controllern aus, daher wäre ich über eine kurze Antwort (falls es die gibt) dankbar, ob das überhaupt funktionieren kann, oder ob ich die USB-Kommunikation und die Zeitkritische Steuerung über zwei verschiedene Controller laufen müssen. Schöne Grüße, GT
Den F4 soll das locker schaffen, aber sind da noch andere Wunschen, wie gross darf der Latenz sein das die Daten uebertragen werden, muss dan noch etwas anderes laufen (adc, uart, i2c....).
GT schrieb: > Kann dieser Interrupt eine > höhere Priorität haben als der USB-Interrupt Ja. GT schrieb: > der stört das die > Kommunikation? Nein. Bei der Enumeration gibt es bestimmte Timeouts, die genauen Werte hab ich grad nicht parat, aber die sind in der Größenordnung vieler Millisekunden. Für die normale Datenübertragung bei Bulk-Transfers kann die Software praktisch beliebig lange brauchen; die Hardware hält den Host solange "hin" bis die Software Daten geliefert hat. Notfalls kannst du deine zeitkritische Aufgabe ja nur nach der Enumeration beginnen. GT schrieb: > mit > Abständen von 1us ~20 Rechenzyklen an Code ausgeführt werden Damit sind 20 MHz schon "verbraucht". Mit Exception-Ein/Austritt könnte das je nach CPU-Frequenz und Flash-Latenz schon eng werden...
GT schrieb: > Kann dieser Interrupt eine > höhere Priorität haben als der USB-Interrupt, oder stört das die > Kommunikation? USB Interrupts sind i.A. überhaupt nicht zeitkritisch - denn den zeitkritischen Teil vom USB Protokoll macht die Hardware (USB Peripherial). Ausnahme sind Hacks wie VUSB, weil da alles in Software gemacht wird und so binnen µs reagiert werden muss. GT schrieb: > Dabei > soll über ein Timer-Event im (schlimmsten Fall, vorhersehbar) mit > Abständen von 1us ~20 Rechenzyklen an Code ausgeführt werden. Das sind verdammt wenige Zyklen - da schaut man mal besser nach ob man das clever in Hardware lösen kann.
Warum ist die Wahl auf den STM32F4 gefallen? Mangelnde Marktübersicht? Für so etwas wäre beispielsweise ein LPC43xx besser geeignet. https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc4300-cortex-m4-m0:MC_1403790133078#/ Der hat einen Cortex M4 als Haupt-CPU - hier würde dann die USB-Kommunikation und das Datenmanagement laufen, und zusätzlich noch einen Cortex M0, der dann Deinen 1us-Task ausführen könnte. In dieser Serie gibt es sogar Versionen mit zwei M0. fchk
Vielen Dank für die Antworten =) Wenn nur die Enumeration zeitkritisch ist, dann bin ich ja beruhigt. Frank K. schrieb: > Warum ist die Wahl auf den STM32F4 gefallen? Mangelnde Marktübersicht? Sicherlich. Ich habe schon wegen eines anderen Prpjekts mit einem STM32F4-Discovery Board herumgespielt und ganz gute Erfahrungen damit gemacht. Ich bin natürlich dankbar über alternative Vorschläge. Ursprünglich hatte ich schon über einen FPGA nachgedacht, da die "zeitkritische Aufgabe" lediglich eine art PWM an ca. 30 Pins ist. Da bin ich mir aber nicht sicher, ob der Aufwand mich in FPGAs einzulernen sich lohnt.
GT schrieb: > da die > "zeitkritische Aufgabe" lediglich eine art PWM an ca. 30 Pins ist. Die STM32 können mit den Timern und deren Synchronisation und DMA ziemlich komplexe Signalformen automatisch in Hardware erzeugen. Andere Controller können das auch noch besser. Vielleicht lässt sich damit deine Aufgabe lösen, wäre besser als in Software.
GT schrieb: > da die > "zeitkritische Aufgabe" lediglich eine art PWM an ca. 30 Pins ist. Je nachdem wieviel Jitter erlaubt ist kannste das durchaus mit Software (Timer IRQ Handler) machen. Man muss nur daran denken dass auch ein IRQ mit allerhöchster Prio ein Tail-Chaining machen darf, und so weniger Take als üblich benötigt. Viele GPIOs kann man mit Timer+DMA ansteuern (Timer triggert DMA, DMA schreibt GPIOx->BSRR). Da hat man wesentlich weniger Jitter und CPU Last, braucht aber RAM fürs DMA. Bei >16 Pins braucht man IMHO mindestens 2 DMA Channels, denn die GPIO Register beim STM32 fassen nur jeweils 16 Pins zusammen.
DMA klingt super, das passt perfekt für meine Anwendung! Dann steht ja allem weiteren nichts mehr im Wege =)
Zeitkritisches Zeug auf dem Controller, aber der PC nur zur Kontrolle, Parametrisierung und Visualisierung. Der zeitkritische Prozess muss ja auch weiterlaufen, wenn das Kabel abgezogen ist, oder abgezogen wird. Plane das Ganze so, dass der PC da sein kann, oder auch nicht.
Zitronen F. schrieb: > Zeitkritisches Zeug auf dem Controller, aber der PC nur zur > Kontrolle, > Parametrisierung und Visualisierung. Der zeitkritische Prozess muss ja > auch weiterlaufen, wenn das Kabel abgezogen ist, oder abgezogen wird. > > Plane das Ganze so, dass der PC da sein kann, oder auch nicht. Genau so hatte ich es vor. =)
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.