Forum: Mikrocontroller und Digitale Elektronik Einfaches USB-Protokoll für STM32-Controller


von Stackpointer (Gast)


Lesenswert?

Hallo Mikrocontroller-Gemeinde!


Ich müsste für ein Projekt einen 2D-Laserscanner von einem STM32F407 
ARM-Controller per USB auslesen lassen.
Das Übertragungs-Protokoll des Scanners (URG-04LX-UG01) nennt sich Scip 
2.0 und erfolgt durch Senden und Empfangen einzelner Character (ähnlich 
UART).
http://www.hokuyo-aut.jp/02sensor/07scanner/download/data/URG_SCIP20.pdf

Von daher scheint die Kommunikation einfach. Allerdings habe ich noch 
nie eine USB-Kommunikation implementiert und die library-Files die ich 
im Internet zu USB am STM32 gefunden habe, scheinen mir sehr komplex. 
Ist es bei USB nicht möglich, einfach einzelne Zeichen nacheinander 
auszugeben und einzulesen ähnlich wie bei UART, oder brauche ich dazu 
wirklich all diese Host-Controller-Treiber usw.?

von René Z. (dens)


Lesenswert?

Stackpointer schrieb:
> oder brauche ich dazu
> wirklich all diese Host-Controller-Treiber usw.?

Ganz kurz: JA!

von Uwe (Gast)


Lesenswert?

> brauche ich dazu wirklich all diese Host-Controller-Treiber usw.?
Virtual comport wär das einfachste aber Treiber und den ganzen Device 
Controller Kram (Konfiguration) brauchst du trotzdem auf dem STM32.
Wenn du dich an den USB-Standart für Virtuelle com ports hältst brauchst 
du den Host-Controller-Treiber (Kernel) nicht auf dem PC selber zu 
machen und kannst z.B. den Windows internen benutzen.

von Stackpointer (Gast)


Angehängte Dateien:

Lesenswert?

Danke für die schnellen Antworten!

> Virtual comport wär das einfachste aber Treiber und den ganzen Device
> Controller Kram (Konfiguration) brauchst du trotzdem auf dem STM32.
> Wenn du dich an den USB-Standart für Virtuelle com ports hältst brauchst
> du den Host-Controller-Treiber (Kernel) nicht auf dem PC selber zu
> machen und kannst z.B. den Windows internen benutzen.

Windows-Treiber brauch ich nicht, ich will ja den STM32 mit dem 
Laserscanner verbinden, d.h. der STM32 ist der Host. Kommunikation zum 
PC erfolgt über UART. Virtuelle com-Ports sind ja für den PC, oder?

Müsste ich die Treiber am STM32 speziell für den Laserscanner schreiben 
oder reicht da so ne Art "allgemeiner Treiber"? Als einzigen 
Anhaltspunkt dafür hab ich nen Windowstreiber des Scanners gefunden 
(siehe Anhang).
Ist es überhaupt möglich, daraus einen C-Treiber zu entwickeln oder ist 
das sowieso zum Scheitern verurteilt?

von Christoph H. (Gast)


Lesenswert?

Stackpointer schrieb:
> Müsste ich die Treiber am STM32 speziell für den Laserscanner schreiben
> oder reicht da so ne Art "allgemeiner Treiber"? Als einzigen
> Anhaltspunkt dafür hab ich nen Windowstreiber des Scanners gefunden
> (siehe Anhang).
> Ist es überhaupt möglich, daraus einen C-Treiber zu entwickeln oder ist
> das sowieso zum Scheitern verurteilt?

Die INF-Datei im Anhang ist für einen virtuellen Seriellen Port unter 
Windows. Das SCIP-Protokoll wird über diese virtuelle serielle 
Schnittstelle gesprochen.
Also wirst Du zuerst einen Treiber für die CDC-Klasse (virtuelle 
serielle Schnittstelle) schreiben dürfen.

Hast Du schon mal geschaut, ob der Scanner nicht sogar eine "normale" 
serielle Schnittstelle hat? Viele Scanner haben beide Schnittstellen 
oder sind auch als Version mit RS232C zu bekommen. Unter Umständen ist 
es sinnvoller/preiswerter als da viel zu entwickeln.

von Oliver J. (skriptkiddy)


Lesenswert?

Flansch doch einen Vinculum 2 dran. Für den gibt es eine 
Applicationnote, um einen CDC-Host aufzusetzen, der das CDC-Device auf 
einen UART mappt.

Gruß Oliver

von Stackpointer (Gast)


Lesenswert?

Da quält man sich mit USB Routinen rum, nur um dann damit einen 
popeligen UART-Port zu simulieren. ^^
Die Hardware ist aber schon im Haus und der Laserscanner hat leider nur 
USB.

Ich schätze mal, ich brauche hierzu einen virtuellen COM-Host, also 
wirds mit den Treibern z.B. von 
http://www.mikrocontroller.net/articles/STM32_USB-FS-Device_Lib wohl 
nicht gehen, weil die ja für Kommunikation STM32 mit dem PC geschrieben 
wurden. Oder gibt es bei virtuellen COM-Ports gar keinen Host?


@Oliver: Danke für die Info! Die Option mit dem Vinculum2 werd ich mir 
mal offen lassen.

Muss ich beim virtuellen COM-Port Rücksicht auf das angeschlossene Gerät 
(Laserscanner) nehmen, oder ist dieses Protokoll geräteunabhängig?

von Stackpointer (Gast)


Lesenswert?

http://www.ftdichip.com/Support/Documents/AppNotes/AN_183_Vinculum-II_UART_to_CDCModem_Host_Bridge.pdf

Mit dem Code für den Vinculum2 müsste es also sofort funktionieren, ohne 
etwas am Code ändern zu müssen, d.h. ich kann die gesamte Kommunikation 
dann über den UART des STM32 abwickeln? Oder täusche ich mich?

von Stackpointer (Gast)


Angehängte Dateien:

Lesenswert?

Hier übrigens noch eine Device Description für den Laserscanner, die ich 
mit USB Device Viewer am PC erstellt hab.

von Oliver J. (skriptkiddy)


Lesenswert?

Stackpointer schrieb:
> Mit dem Code für den Vinculum2 müsste es also sofort funktionieren, ohne
> etwas am Code ändern zu müssen, d.h. ich kann die gesamte Kommunikation
> dann über den UART des STM32 abwickeln? Oder täusche ich mich?

Das kann ich nicht beantworten, weil ich noch nichts mit den Vinculum zu 
tun hatte. Bestell dir doch einfach ein Dev-Kit und probier es aus.

Gruß Oliver

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.