Ich habe eine Mikroprozessor Boart (imx6) auf dem ich das Linux Derivat Yokto installiert habe. Das Boart besitzt einen USB OTG Anschluss. Ich kann jetzt verschiedene Module Laden. g_mass_storage Flash Speicher g_serial serielle Schnittstelle g_ether Netzwerkkarte Ich habe vor ein Messinstrument zu realisieren, welches seine Messdaten an Labview sendet wo diese ausgewertet werden. Aber auch an andere Programme Plattform unabhängig. Das Messinstrument selber ermittelt seine Daten aus Video Aufnahmen (CMOS Sensor). Sowohl die Bilddaten(rund 1MB/s) als auch die aus den Bilddaten ermittelten Messwerte(1KB/s) möchte ich via USB als Live Stream übertragen. Erstmal nur an Labview. Die Bedienung muss dabei DAU freundlich sein. plug&play. Mir fehlt da die richtige Idee. Flash Speicher und serielle Schnittstelle kommen nicht in frage. Mit dem Flash Speicher ist kein Stream zu realisieren und die serielle Schnittstelle kann wohl nur mit 115200Baud Daten übertragen. Die Netzwerkkarte ist da schon besser. Aber der User muss dann immer ein Netzwerk mir 2 IP's aufbauen und aufpassen, dass es da zu keinen Konflikten mit bereits vorhandenen Netzwerken kommt. viel zu viele mögliche Fehlerquelle. damit kommt ein DAU nicht klar. Ich habe daher google befragt und herausgefunden das Herstelle von Messinstrument mit USB Anschluss sich ihre Treiber selber Programmieren und dabei oft einen Standard verwenden. USB-TMC (Universal Serial Bus Test and Measurement Class) Labview unterstützt diesen Standard. Ich glaube das beste wehre, wenn ich das genauso machen könnte. Nur wo fange ich da an? Ich habe noch nie einen Treiber für USB Programmiert und weiß auch nicht wie da das Protokoll aus sieht. Kann mir da jemand einen tipp geben, wie ich am besten an die Sache ran gehe? Kennt jemand ein Buch oder ein Tutorial, welches mir weiterhelfen könnte? Hat jemand vielleicht eine bessere Idee?
Joachim J. schrieb: > serielle Schnittstelle kann wohl nur mit > 115200Baud Daten übertragen USB CDC ist die Datengeschwindigkeit egal. Da gehen bei Full Speed auch 1MByte/sec durch - wenn die Programmierung sowohl auf dem µC als auch auf dem PC stimmt. Aber schau Dir mal WinUSB an. Damit entfällt die lästige Entwicklung von USB Treibern.
USB-TMC ist nicht so das Problem. Es müsste einen Linux Gadget-Treiber dafür geben. Wenn nicht, das Protokoll ist einfach. Problematisch sind eher: - USB-UVC für den Video-Stream. Das zu implementieren ist schon eine ganz andere Nummer. Und zwar so, dass der Windows USB-UVC Treiber damit zurecht kommt. - Ein USB-Port auf dem Linux-Board, zwei Geräte (Video, Messwerte) = Zwei USB-Interfaces = USB Composite Device Auch hier wieder so implementiert, dass der entsprechende Windows Composite Device (Mini?) Treiber damit zurecht kommt. Keine Ahnung ob es für Linux einen Composite Device Gadget Treiber gibt. - Video-Stream in LabView reinbekommen... M.w. kostet das Video-Modul für LabView nur rund 400 Euro. Schnäppchen! Das kann dann vom gammeligen DirectShow API in Windows lesen. DirectShow wiederum kann vom USB-UVC Treiber in Windows lesen. Zumindest auf dem Papier. Ich würde sagen, na dann mal viel Spaß.
Ich nehme für so etwas immer libusb. Die stellt eine Api bereit, mit der man beliebige USB-Geräte ansprechen kann. Damit habe ich schon USB-MassStorage, USB Kameras und Arduinos direkt angesteuert. Wie genau das Protokoll darüber aussieht, dass muss sie dein Messgeräte-Hersteller beantworten. Mit neueren Versionen von Wireshark kann man auch USB mitschneiden, und so evtl das Protokoll beobachten und 'Reverse Engineeren'. Dazu ist aber Erfahrung nötig.
Das mit dem Video Stream ist weniger aufwendig als es klingt. Ich verwende einen Monochromen(Grau Stufen) Cmos Sensor. das heißt pro Pixel ein Byte. 160 Pixel pro Zeile und 120 Zeilen pro Frame. der Video Stream soll dann in Row Datenformat(seriell Pixel für Pixel) übertragen werden. Ist ein Frame fertig übertragen werden die restlichen Messdaten hinten ran gehängt. Das ganze dann mit 50fps.
:
Bearbeitet durch User
Joachim J. schrieb: > Das mit dem Video Stream ist weniger aufwendig als es klingt. Ja dann mach. Was hängst du hier noch im Forum rum?
Jay schrieb: > Joachim J. schrieb: >> Das mit dem Video Stream ist weniger aufwendig als es klingt. > > Ja dann mach. Was hängst du hier noch im Forum rum? das Problem ist nicht die Formatierung der Daten sonder das Protokoll mit dem ich mich nicht auskenne und wo ich nicht weiß wie man das umsetzt. Plug in, plug out, USB Identifikation, senden, empfangen und was da sonst noch so alles giebt. ich werde am besten mal etwas in Detail gehen. im Kernel des Boarts läuft ein Treiber(V4l Modul) welcher die Bilddaten vom CMOS Sensor entgegen nimmt und im Speicher ablegt. über eine Device Datei(/dev/video0) nehme ich die Daten im Userspace entgegen. Ein C++ Programm empfängt den Byte Strom und wertet diesen aus. Jetzt möchte ich den Datenstrom + Auswertung so wie er ist via USB weiter senden und z.B. in labview empfangen. Dort möchte ich die Daten anzeigen und weiter auswerten. Von labview aus möchte ich Einstellungen vornehmen können. Also einfache Steuerbefehle. z.B. Messung starten, 50/30/20 fps ... Alles was ich bis her auf Basis von USB umgesetzt habe lief über UART und einem FTDI. wie stelle ich aus c++ heraus auf meinem Device eine Verbindung via USB zu labview auf meinem PC her und wie funktioniert der Daten Austausch?
:
Bearbeitet durch User
Im Kernel sind die entsprechenden Device-Treiber (dort Gadget genannt) vorhanden https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/drivers/usb/gadget/function?id=refs/tags/v4.6.2 dazu ConfigFS und libusbg https://github.com/libusbg/libusbg
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.