hallo, liebe Gemeinde. Ich habe ein Problem - und zwar haben wir ein Gerät, das am PC an usb angeschlosen wird. Zwecks Datenübertragung. Weil ich so gut wie keine Ahnung vom Eingemachten bei der usb Thematik habe (und da auch keine Zeit ist, sich da entsprechend einzulesen, Protokoll zu studieren, Treiber etc...) steckt in unserem Gerät so ein usb/seriell Chip. Und zwar ein cp2102 von silicon laboratories. Funktioniert auch. Nu aber der Ärger. Jetzt soll ein Drucker (!) an das Gerät angeschlossen werden.... Meiner Meinung nach gar nicht möglich. So ein Umsetzer Chip braucht doch zwingend einen Gerätetreiber und macht mir allenfalls ein usb Garät, aber keinen host, den wiederum der Drucker bräuchte. Stimmts? Und wie Umfangreich Druckertreiber für die heutigen usb Drucker sind weiß ich auch nicht, könnte mir aber vorstellen, daß da auch mehr notwendig ist, als bei nem ibm proprinter. Bisher kämpfe ich aber noch gegen Windmühlen, um offiziell die Anweisung als technisch nicht machbar vom Tisch zu bekommen. Kann mir einer Ratschläge geben, Infos, irgendwas. Gibt es vielleicht doch eine Möglichkeit, einen Drucker möglichst mit wenig weh zu tun an unser Gerät zu bekommen? Vielleicht auch irgendeinen Parallelen oder seriellen? Obwohl ein Umsetzer Kabel usb (vom Brückenchiop am Gerät) <-> Paralleldrucker eigentlich mangels host und Treiber auch nicht funktionieren dürfte? Ist mein usb Verständnis extrem mau, oder bin ích auf dem richtigen Weg? Und was kann ich bloß wegen des Druckers tun? Sei es Argumentativ dagegen? vielen Dank, Christian
Ich habe gerade einen Chip von Phillips entdeckt: ISP1261 USB OTG bridge controller Was ist davon in dem Zusammenhang zu halten? Unproblematisch? Gehts in die richtige Richtung?
Also wenn ich dich richtig verstanden habe willst du mit einem Gerät einen USB-Drucker betreiben. Meiner meinung nach ein hoffungsloses Unterfangen. Weil ich nicht glaube dass der Hersteller die Techniker für Treiber/Protokoll dir geben wird. Gruss Weihnachtsmann
Du hast Recht! Der Chip ist ein USB-Device. Um einen Drucker o.ä. anzusprechen braucht man einen Host-Controller. Einfachster Weg wäre wohl ein PC inkl. Software dazwischen...
Chrissy, mit dem von Dir gefundenen USB-OTG-Controller von Philips ist es prinzipiell möglich, mit anderen USB-Devices zu kommunizieren. Genau dafür ist dieser Controller gedacht. Von Cypress gibt es auch geeignete Bausteine wie den CY7C67200, den CY7C67300 oder den SL811HS. Allerdings müsstest Du dafür einen USB-Host-Stack ('n ganzer Haufen komplexer Software) in Deinem Gerät implementieren. Die grundlegende Ansteuerung von USB-Druckern ist ein auch noch überwindbares Problem, da die reine Schnittstelle, die der Datenübertragung dient, eine Standard-Geräteklasse ist und sich bei allen USB-Druckern (und USB-Parallelportadaptern) gleich verhält. Der USB-Host-Stack muss halt die erforderliche Standard-Geräteklasse unterstützen; kommerziell erwerbbare USB-Host-Stacks können sowas. Richtig problematisch wird es bei der Ansteuerung eines konkreten Druckers, da Du genau wissen musst, welche Steuersequenzen an den Drucker zu übertragen sind, damit der irgendwas sinnvolles damit anfängt. Das Problem tritt allerdings bei jeder Art von Druckeransteuerung auf und hat nichts mit USB zu tun. Bei einigen Druckern ist die "Druckersprache" halbwegs standardisiert (PCL und Postscript), bei anderen Druckern gibt es Pseudostandards des jeweiligen Herstellers (Epsons ESC/P) und viele Drucker, gerade Tintenstrahldrucker oder GDI-Drucker sind völlig undokumentiert. Somit stellen sich Dir zwei bzw. drei Probleme: - Beschaffung eines USB-Host-Stacks, der auf Deiner Hardware implementiert werden kann (auf der Philips- oder der Cypress-Website finden sich möglicherweise einige Hinweise dazu), was aller Wahrscheinlichkeit bedeutet, daß Dein Gerät komplett neu designt werden muss, da ein leistungsfähigerer und mit mehr Speicher ausgestatteter µC verwendet werden muss als bisher - Beschaffung der Spezifikation(en) der anzusteuernden Drucker. - Wenn Deine Marketingabteilung in der Lage ist, intellektuell zu erfassen, daß nicht jeder USB-Drucker unterstützt werden kann, also eine Einschränkung auf nur einige zu unterstützende Drucker getroffen werden kann, dann bestehen halbwegs realistische Chancen. Wenn aber die Marketingabteilung mit Argumenten analog zu "Wieso? An meinem PC funktioniert doch auch jeder Drucker" kommt, dann ist das ganze sowas von zum Scheitern verurteilt ... Somit ist die Marketingabteilung bzw. der technisch inkompetente Vorgesetzte das dritte Problem. Viel Erfolg!
Ist alles Quark. Lass Dich nicht irre machen. 1. Du brauchst keinen Host. Wo lernt man denn so einen Blödsinn? 2. Es ist kein hoffnungsloses Unterfangen. Dein Ansatz ist im Prinzip schon richtig. Ein USB OTG-Chip ist ja exakt dafür da, dass man keinen Host-PC mehr braucht. Allerdings musst Du die USB-Printer-Klasse implementieren, weshalb Du wohl nicht um das Lesen eines Teils der Specs herumkommst.
Dieter, kannst du da konkreter drauf eingehen? Hast du so etwas schon erolgreich gemacht? Zeitaufwand? Wie wird der USB-OTG Chip angeschlossen? Direkt an einem Uart, wie der CP2102? Kann mir noch nichts konkretes darunter vorstellen, was du meinst. Wär schön etwas detaillierter. Was ich bisher so gehört habe, deckte sich noch einigermaßen mit dem, was ich mir selbst so überlegt hatte. danke
@Dieter: Spezifiziere meine Frage. Klar einen host PC braucht man nicht, aber ein usb host ist doch erforderlich, was doch eigentlich den von Rufus erwähnten Aufwand nach sich zieht. Daher meine Frage, ob du das schon ganz greifbar gebaut hast und über welches usb Wissen du verfügst. Bei Äußerungen wie 'geht eigentlich damit' schrillen bei mir die Alarmglocken, da bin ich ziemlich konditioniert. Beim 'geht, aber du wirst leiden...' von Rufus, hab ich das Gefühl, die Problematik ist ernsthaft überdacht. So wie ich beim überfliegen des Datenblattes des Cypress Chips herausgefiltert habe, ist dieser Chip doch eher ein absolut vollwertiger uc, mit entsprechend notwendiger Einarbeitungszeit, Problemen, Ärger und Zeit... Abgesehen davon, daß ich ja, wie erwähnt, vom usb an sich keine intimeren Kenntnisse besitze, also wahrscheinlich auch Arbeit und Recherche in dieser Richtung nötig sein wird. Ganz einfach, weil ich zusätzlich zum Problem, mal eben einen neuen uc einzusetzen noch die Hürde nehmen muss, mir erst mal klar werden müsste, WAS ich mit diesem uc programmieren möchte/muss. Verstehe ich die Angelegenheit grundfalsch? Christian P.S: Was hat es eigentlich mit diesen IDs auf sich, die man theoretisch kaufen/mieten muss, nur bei den Brückenchips á la FTDI nicht. Würde das bei meinem Problem zutreffen, daß so eine ID angeschafft werden muss, wenn man einen host stellt?
Bei Linux sollte es da für alles Sourcecode geben: Für USB-Hostcontroller, für den USB-Stack und auch eine ganze Menge Druckertreiber. Damit sollte man den Aufwand ganz gut abschätzen können. Da die Sourcen allerdings meist unter der GPL stehen, solltest Du vorher abklären, ob Du sie überhaupt verwenden kannst. Markus
Bloß, hab ich wirklich viel von Linux Sourcen wenn ich gerade an meinen uc im Gerät denke??
@Chrissy: Für die Implementierung eines USB-Hosts benötigst Du keine USB-Device-/Vendor-IDs. Die sind nur erforderlich, wenn Du USB-Devices herstellst. Je nach dem, was für einen USB-Device-Controller Du verwendest, darfst Du die Device-/Vendor-ID des Herstellers verwenden; das legt der Hersteller des Bausteines im einzelnen fest. Verwendest Du einen USB-OTG-Controller (das ist ein Hybrid aus einem USB-Device und einem USB-Host mit eingeschränktem Funktionsumfang), dann sind Device- und Vendor-ID spätestens dann erforderlich, sobald die Devicefunktionalität des OTG-Controllers genutzt werden soll; das Gerät also an einen anderen USB-Host angeschlossen werden soll. Der Hinweis auf Linux-Sourcen ist so unpassend nicht; auf ausreichend dimensionierten Controllern kann man ein embedded Linux oder ucLinux laufen lassen, was einem sehr viel Softwareentwicklungsaufwand ersparen kann. Der Controller muss dann aber schon zwingend ein 32-Bit-Controller sein, aber sowas gibt's ja auch - ich verweise da nur auf die Controller mit ARM7-Kern. Der beliebte "Einsteiger-ARM" LPC2106 von Philips scheidet hier als Grundlage leider gleich wieder aus, da er viel zuwenig Speicher (sowohl RAM als auch ROM) mit sich bringt. Wenn ich die Speicheranforderungen von ucLinux noch richtig im Kopf habe, tut sich unterhalb 1 MByte wohl nicht viel.
Hallo Chrissy, ich habe irgendwann mal das hier entdeckt: http://www.ghielectronics.com/USBwiz.htm ich habe keine Erfahrung damit, und dass die Firmware die Version 0.1 hat, macht mich auch stutzig. Aber vielleicht ist das was. Gruß Gerd
Scheidet leider aus. Ist ja schon ein Controller drauf... Und sonst wäre das ja sonst mehr ein neu-design, anstelle eines re-designs. ;-) Irgendwie sehe ich z.Zt. nicht wirklich Land, aber die Notwendigkeit, sich der usb Thematik etwas intensiver anzunehmen. Hoffe da kommt mal demnächst Zeit für. Wie läuft es eigentlich mit Windows. Wenn ich auf solch einen usb-otg Chip umsteige und den rs232 Umsetzer wegrationalisiere. Was ist dann auf Windows Seite zu tun, um mit diesem device Daten auszutauschen. Bisher läuft ja alles ganz prima mit den virtuellen com Treibern. Ist das Ansprechen eines solchen, mit usb-otg ausgerüsteten, Gerätes problemlos mit Windows möglich (via Standard apis), oder müsste ich dann auf PC Seite noch einen Treiber erstellen, der sich mit meinem otg-Chip gut versteht? Denn dann würde das glaub ich wirklich meine Kompetenzen, bzw. den Rahmen des vertretbaren sprengen....
Der von Gerd zitierte Chip ist nicht uninteressant. Das ist ein fertig programmierter ARM-Controller mit USB-Host-Stack, der mit einem USB-Host-Controller von Philips verbunden werden muss (einem ISP1160). Der ARM wiederum kann über eine serielle Schnittstelle (oder SPI) mit der eigenen Hardware verbunden werden. 's wär natürlich schööön, wenn man an die Software 'rankäme, die in eben jenem ARM implementiert ist ...
@Chrissy: Um ein USB-Device mit einem Windows-Host zu verbinden, benötigst Du keinen OTG-Chip, ein USB-Device-Controller genügt hier vollends. Sobald Dein USB-Device keine USB-Standard-Deviceklasse implementiert (HID, Mass Storage oder was auch immer), musst Du Devicetreiber dafür zur Verfügung stellen. Eine standardisierte windowseigene API, um mit beliebigen USB-Devices ohne Devicetreiber zu kommunizieren, gibt es in dieser Form nicht. Allerdings gibt es verschiedene kommerzielle und auch freie generische USB-Treiber, mit denen sich derartiges realisieren lässt. Ein Beispiel dafür ist libusb-win32. USB-Device-Controller gibt es oft als Bestandteil eines Microcontrollers; Cypress beispielsweise vertreibt mit der Ez-USB-Reihe einen um einen 8051 herum aufgebauten Controller (AN2131 etc.), einige der neueren ARM-Varianten von Atmel haben USB-Device-Funktionalität und auch Microchip stellt das mit einigen PIC-Varianten zur Verfügung. Es gibt auch controllerlose USB-Device-Controller von verschiedenen Herstellern, die also eigens mit einem anderen Microcontroller verbunden werden müssen. Ein Beispiel ist der recht alte PDIUSBD12 von Philips. Mittlerweile gibt es auch zwei reine Software-Implementierungen eines USB-Devices auf einem AVR ohne spezifische USB-Hardware, den berühmten Igor-Adapter und eine andere, hier in den letzten Tagen diskutierte Lösung aus Österreich. Auf dem betroffenen AVR lässt sich allerdings nicht sehr viel Funktionalität hinzufügen, da die Softwareemulation der USB-Hardware doch so einige Anforderungen an den AVR stellt. Insgesamt ist der Weg, ein eigenes USB-Device zu implementieren, deutlich steiniger als die Nutzung eines vollständig fertigen USB-Devices wie die verschiedenen FTDI-Varianten.
Das stimmt. Sieht wirklich nicht schlecht aus... Muss ich unbedingt im Auge behalten, wenn der wirklich halten sollte, was er verspricht. Mal schaun.
Die Linuxsourcen dienen zum einen als erster Anhaltspunkt, wieviel Arbeit denn nun konkret dahintersteckt. Ist es eine Woche Arbeit oder eher ein Jahr? Zum anderen programmierst Du doch vermutlich in C und den Code zu portieren ist wahrscheinlich einfacher als ihn komplett neu zu schreiben. Du brauchst ja kein Linux auf dem Controller. Markus
@Markus: Deine Argumente sind aber eher schwach. Er braucht doch nur den Druckerteil und spezifische Treiber. In Linux ist natürlich "alles" dabei, dazu ist das Ganze - für so einen Spezialzweck völlig unnötig - auch noch in diverse Layer aufgeteilt. Als Anhaltspunkt zur Aufwandsabschätzung ist Linux sicherlich denkbar ungeeignet. Höchstens als Einstieg in die USB-Programmierung, wenn man gerade nichts anderes da hat.
wieso treiber? es gibt doch tatsächlich noch Geräte, die DOS unterstützen. HP z.B. baut noch tintenspritzer die das können. meist kommen die mit centronix und usb-schnittstelle. du kannst denen einfach direkt den klartext in ascii schicken und mit CR zeilenumbrüche (chr(10) chr(13)) verpassen. es gabda mal befehle wir dir>lpt1 oder dir>prn, die nix anderes machten. hab sogar n laserdrucker der das macht, keine sache. nur die schrift ist dann halt druckerstandart, normalerweise times
Das können aber auch bei HP nicht alle Geräte, z.B. die relativ teuren Business Inkjet(?) können das nicht.
Hallo Chrissy! Um nur einen Drucker anzusteuern, reicht zunächst einmal ein ausschließlicher USB-Host-Controller, wie z.B. der ISP1160 von Philips, welcher über einen 16Bit Datenbus mit einem uC kommunizieren kann. Ist die Device-Funktionalität wirklich erforderlich, z.B. falls du mit dem gleichen Gerät Messdaten an einen PC senden willst, würde ein OTG-Controller in Frage kommen, wie z.B. der ISP1362. Wobei ich aber dann eher den FTDI FT232BM empfehlen würde, da du dich beim letztgenannten nicht mehr um die softwaremäßige Umsetzung von USB auf Seriell kümmern musst und es eben auch schon frei verfügbare VCP-Treiber gibt. Da ich selbst gerade einen Host-Stack für den ISP1160 zur Druckeransteuerung schreibe, kann ich dir erst einmal dessen Datenblatt und das Buch "USB 2.0" von Jan Axelson empfehlen, welches zwar für die Entwicklung von USB-Peripherie-Geräten (Devices) geschrieben wurde, aber eine Menge Hintergrund-Infos zur Verfügung stellt. Die Linux-Sources eignen sich nur bedingt, da sie (speziell der ISP1160-Stack) schlecht kommentiert sind und sich einer großen Anzahl von Bibliotheken bedienen. Als anzusteuernde Drucker kann ich dir im Tintenstrahlbereich alle HPs empfehlen, welche mit HP-PCL (Printer Command Language) angesteuert werden; im Nadeldruckerbereich Epson mit ESC/P, welches dem PCL sehr ähnlich ist; und im Laserbereich unterstützen fast alle Anbieter PCL (siehe www.druckerchannel.de)! Canon und Lexmark z.B. sind GDI-Drucker, die keinen eigenen Zeichensatz besitzen und ihn vom Betriebssystem (Win oder Linux) beziehen, was etwas zu oversized wäre, um es zu implementieren. PCL und ESC/P hingegen sind auf einem uC kein Problem! Alles in allem ist es machbar! Du brauchst nur ne Menge Zeit! Gruß Danyo
>Alles in allem ist es machbar! Du brauchst nur eine Menge Zeit!
hihi Du musst nur Deinem Chef klarmachen, was der Unterschied
zwischen einem USB Host und einem USB Device ist, weiterhin, dass Du 6
Monate Zeit brauchst, in denen Du Dich nur damit auseinandersetzt, und
dass ein Platinen-Redesign stattfinden muss, dann geht es. Wenn er dann
immer noch zustimmt, hast Du eine Menge bezahlte Zeit für Fortbildung.
Alternativ könnte man Ihm anbieten, doch eher Drucker mit paralleler
Schnittstelle zu verwenden. Die gibt es (noch) genug und die sind
einfacher anzusprechen. Um eine neue Platine, schätze ich, wirst Du
dann aber auch nicht herumkommen.
Gruß,
Sebastian
>>Ich habe ein Problem - und zwar haben wir ein Gerät, das am PC an usb >>angeschlosen wird. Zwecks Datenübertragung. Warum sendet das "Gerät" nicht Steuersignale zum PC und dieser Druckt dann (völlig relaxed) auf einem an den PC angeschlossenem USB Drucker das gewünschte?
Einen USB-Host-Stack quasi "in Hardware" gibt es hier http://www.ghielectronics.com/USBwiz.htm Damit können folgede Geräteklassen angesteuert werden: - HID USB class (Mäuse, Tastaturen etc.) - Printer USB class - Mass storage USB class Letzterer Punkt ist für viele besonders interessant, weil das die berühmten USB-Sticks oder USB-Festplatten sind.
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.