Forum: Mikrocontroller und Digitale Elektronik STM32F103VC schnell genug?


von Bernd (Gast)


Lesenswert?

Hi,


weiß jmd von euch ob ein 72MHz Prozessor ST schnell genug ist um DMX 
Daten von USB auf 5x UARTS zu senden bzw. zu empfangen?

Hab nämlich gerade die Rückinfo bekommen von Enttec das mit den FTDIs 
das Receiven von DMX nicht möglich ist :-(... Jetzt suche ich dringend 
nach einer Alternative für 4x DMX Ein/Ausgänge.

Gruß
Bernd

von Peter D. (peda)


Lesenswert?

Bernd schrieb:
> Hab nämlich gerade die Rückinfo bekommen von Enttec das mit den FTDIs
> das Receiven von DMX nicht möglich ist :-(...

Naja, die wollen halt, daß Du ihr Zeugs kaufst.

Ein kurzer Blick auf die FTDI-Seite: mit 4 UARTs ist der FT4232H wohl 
Dein Chip.
USB: bis 480MBit
UART: bis 12MBaud

Also über läppische 4 * 250kBaud lacht der nur.


Peter

von Bernd (Gast)


Lesenswert?

Peter Dannegger schrieb:
> Ein kurzer Blick auf die FTDI-Seite: mit 4 UARTs ist der FT4232H wohl
> Dein Chip.

Das ist völlig richtig von dir erkannt, nur leider schaffe ich es nicht 
den DMX-Break mit diesem FT4232H IC zu erkennen.

von Bernd (Gast)


Lesenswert?

hier noch der thread in dem ich auch einen Code gepostet habe, mit dem 
es meiner Meinung funktionieren sollte: aber leider bekomme ich die 
CE_BREAK Notification viel öfters geliefert als der Break im DMX Signal 
wirklich ankommmt.

Beitrag "FTDI: DMX Rx Break detection"

von Peter D. (peda)


Lesenswert?

Bernd schrieb:
> Das ist völlig richtig von dir erkannt, nur leider schaffe ich es nicht
> den DMX-Break mit diesem FT4232H IC zu erkennen.

Ich hätte vermutet, daß die UARTs als standard 16550-UART emuliert 
werden.
Und dann ist Bit 4 im Line Status Register das Break-Indikator Bit.
Der Windows Treiber sollte ja ne Funktion zum Status lesen 
bereitstellen.


Peter

von Bernd (Gast)


Lesenswert?

das Problem ist dass diese Break zwar erkannt wird (mit 
FT_W32_WaitCommEvent()), aber wenn ich im Anschluss daran die Daten 
auslese (mit FT_W32_ReadFile()), das DMX-Startbyte sonst wo liegt im 
Buffer, aber nicht an erster Stelle.

von Bernd (Gast)


Lesenswert?

hier hab ich grad mal was interessantes gefunden über diese FTDI 
Devices, was genau mein Problem wiederspiegelt:
1
USB-Serial converters are generally a very bad solution - at least with the devices available today. They are known for their very bad design and drivers. No USB-Serial converter today has an 11-bit receiver FIFO, which is necessary to maintain the synchronization between bytes and flags, and the automatic flow control may be so limited that it is useless in practice. Especially, we will warn against the big majority of USB-serial converters, which use chips from Future Technology Devices International Ltd. (FTDI) like the FT232(x) series:

http://max-i.org/testprogram.htm

Vielleicht hat schon mal jmd diesbezüglich Probleme gehabt:

Gruß
Bernd

von Bernd (Gast)


Lesenswert?

"USB-Serial converters are generally a very bad solution - at least with 
the devices available today. They are known for their very bad design 
and drivers. No USB-Serial converter today has an 11-bit receiver FIFO, 
which is necessary to maintain the synchronization between bytes and 
flags, and the automatic flow control may be so limited that it is 
useless in practice. Especially, we will warn against the big majority 
of USB-serial converters, which use chips from Future Technology Devices 
International Ltd. (FTDI) like the FT232(x) series:"

Hier nochmal der Text

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Bernd schrieb:
> weiß jmd von euch ob ein 72MHz Prozessor ST schnell genug ist um DMX
> Daten von USB auf 5x UARTS zu senden bzw. zu empfangen?

Mal zurück zu deiner Ursprungsfrage: Ja, schnell genug sind die allemal, 
insbesondere wenn du sinnvoll die DMA-Kanäle nutzt.

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


Lesenswert?

Vor vielen Jahren mal habe ich einen USB Datenspion entwickelt, der 
exakt die ankommenden V24-Daten beider Datenrichtungen incl Flags 
aufzeichnet. Es waren schlussendlich 2 Bytes je Kanal.
- Datenbyte
- Statusbyte incl Richtungs-Bits

Das geht nur mit einer extra Hardware.

Ein STM32 reicht für diese Aufgabe aus. Er kann 12MBaud Full Speed USB, 
das sollte reichen.
Allerdings muss man mehrere USB Endpoints benutzen, am besten einen je 
UART-Kanal.
Man muss sich bewust sein, dass der PC (Host)den USB Triggert aber der 
STM32 den Datenbuffer freigeben muss. Der PC Triggert die USB 
Kommunikation alle 1ms, dabei kann ein Datenframe sowie das "double 
Buffered" Frame übertragen werden.
Um USB zu Proggen ist etwas Hintergrundinfo schon nett zu wissen, steht 
in der Doku der USB Organisation. Damit kann man den Code effizienter 
gestalten, ansonsten hat man tatsächlich Probleme die Daten rüber zu 
schaufeln. (Dieses Problem haben alle Prozessoren)

von Bernd (Gast)


Lesenswert?

Christoph Budelmann schrieb:
> Mal zurück zu deiner Ursprungsfrage: Ja, schnell genug sind die allemal,
> insbesondere wenn du sinnvoll die DMA-Kanäle nutzt.

Hast du diese Prozessoren schon mal eingesetzt??? Ich möchte ungern 
nocheinmal so einen Bug haben, der dann dazu führt wieder auf eine 
andere Schiene umsteigen zu müssen...

Gerade was USB, UART, Timer, DMA und Interrupts angeht. Ich weiß ja 
nicht wie genau und ausführlich diese Errata-Sheets immer sind

von Christoph B. (christophbudelmann) Benutzerseite


Lesenswert?

Bernd schrieb:
> Hast du diese Prozessoren schon mal eingesetzt??? Ich möchte ungern
> nocheinmal so einen Bug haben, der dann dazu führt wieder auf eine
> andere Schiene umsteigen zu müssen...

Ja, wir setzen die recht häufig ein. USB, UART, CAN, DMA, fast alles 
über Interrupts, funktioniert sehr gut.

> Gerade was USB, UART, Timer, DMA und Interrupts angeht. Ich weiß ja
> nicht wie genau und ausführlich diese Errata-Sheets immer sind

Bei den 103ern hatten wir keinerlei Probleme, auch die Errata halten 
sich in Grenzen. Schwierig war der Einstieg mit den 105ern (2x CAN und 
USB gleichzeitig), da diese einen Bug im Bootloader hatten und der für 
uns wichtig war. ST hat das leider erst recht spät in das Errata Sheet 
aufgenommen, was uns einiges an Zeit gekostet hat. Das Problem tritt 
aber bei neuen Prozessoren immer mal auf, die 103er sind inzwischen aber 
schon recht etabliert.

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


Lesenswert?

Bernd schrieb:
> Hast du diese Prozessoren schon mal eingesetzt??? Ich möchte ungern
> nocheinmal so einen Bug haben, der dann dazu führt wieder auf eine
> andere Schiene umsteigen zu müssen...

Ich bin mit dem STM32 so sehr zufrieden, dass ich keinen anderen mehr 
nehmen möchte. Ich habe USB, UART, CAN und sonst alle anderen Module 
bereits genutzt.

Siehe auch Artikel STM32
Da stehen viele wertvolle Tipps drin.

von Bernd (Gast)


Lesenswert?

noch eine kleine zusätzliche Frage zu dem SMT32F103xV Prozessor: 
unterstützt dieser auch JTAG Chaining? Anhand welchen Merkmalen lässt 
sich das aus einem Datenblatt herausfinden?

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


Angehängte Dateien:

Lesenswert?

Der Segger J-Link kann das. Anbei ein Auszug aus deren Doku.

Ich selbst habe das nie probiert. Einfach mal bei Segger anrufen ob das 
auch mit dem STM32 geht.

Wenn Platzprobleme herrschen, dann empfehle ich diese JTAG 
Steckerbelegung:
http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual

von Bernd (Gast)


Lesenswert?

zum Programmieren verwende ich das Ulink2, welches das JTAG Chaining auf 
jeden Fall unterstützt. Aber der Prozessor muss es soweit ich weiß auch 
unterstützen. Bzw. nicht jeder Prozessor unterstützt JTAG Chaining.

Aber wie gesagt, das ist jetzt auch komplett Neuland für mich. Bis jetzt 
hatte ich immer den notwendigen Platz für die JTAG Buchse.

Gruß
Bernd

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


Lesenswert?

Oder Du nimmst SWD (Single Wire Debug) dann reichen 5 Drähte.

Mit SWD und meinem JLink hatte ich schon Probleme, liegt wohl daran, 
dass mein JLink nicht das aktuellste Modell ist.

Ansonsten mal beim Ulink2 Hersteller nachfragen, der kann sicher 
Auskunft geben.

von Bernd (Gast)


Lesenswert?

Markus Müller schrieb:
> Ansonsten mal beim Ulink2 Hersteller nachfragen, der kann sicher
> Auskunft geben

aber der IC selbst unterstützt das JTAG Chaining?

von Bernd (Gast)


Lesenswert?

Markus Müller schrieb:
> Man muss sich bewust sein, dass der PC (Host)den USB Triggert aber der
> STM32 den Datenbuffer freigeben muss. Der PC Triggert die USB
> Kommunikation alle 1ms, dabei kann ein Datenframe sowie das "double
> Buffered" Frame übertragen werden.

Ich denke dass ein größeres Zeitintervall von ca. 16ms effizienter sein 
wird. Da ich ja die Daten per Bulktransfer übertragen werde und gleich 
ein komplettes DMX-Datenpaket (513 Bytes).

Die Information, wann ein Break im DMX Signal aufgetreten ist, muss ich 
in diesem Fall nicht mitübertragen (USB), sondern nur die reinen Daten, 
so dass immer das Startbyte dem ersten Wert im Bytebuffer entspricht.

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


Lesenswert?

Wegen
> aber der IC selbst unterstützt das JTAG Chaining?
Frage doch im STM32 Forum, dort antworten direkt auch die Experten von 
ST. (In der Doku habe ich auf der schnelle nichts gefunden, deren 
Antwort würde mich auch interessieren.)

16ms ist kein Problem. Die CPU wird dann einfach nach 16ms das Paket für 
den Versand freigeben, der PC holt es dann ab, spätestens nach 1ms, wenn 
die nächste Anfrage läuft.
In der Zwischenzeit kann ein zweiter 512 Byte Buffer beschrieben werden 
(oder man speichert die Daten im RAM).

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.