Hallo Zusammen,
ich habe folgendes Problem und weiss noch nicht wie ich das überhaupt
anfangen kann zu lösen.
Ich will eine GSM Engine wie z.B. (Siemens HC 25, oder Telit) an einen
FPGA anschliessen.
http://www.telit.com/en/products/umts-hsdpa.php?p_id=14&p_ac=show&p=13
Die Engines sind komplette HF-Boards um z.B. HSDPA also High Speed GSM
Verbindungen aufzubauen. Bisher habe ich das immer über die serielle
Schnittstelle und einem Soft UART im FPGA angeschlossen.
Die hohen Geschwindigkeiten von bis zu 7 MBit kann man aber nur per USB
Anschluß im High-Speed Mode mit der Engine austauschen.
Die Hersteller liefern da zwar komplette Windows Treiber etc. aus, aber
das hilft mir bei einem FPGA leider gar nicht weiter. (denn das ganze
soll auch ohne PC funktionieren)
Eine Idee hatte ich schon, und zwar mit einem USB-to-Seriell Chip zu
arbeiten, weiss aber nicht ob dies so ohne weiteres transparent
funktionieren kann. Alternativ kann ich natürlich noch irgendwie einen
Controller mit USB auf der einen und SPI auf der anderen Seite
einsetzen.
Über eine Hilfe wo ich ansetzen kann wäre ich sehr dankbar.
Wer hat schon mal USB Devices (aber kein Massenspeicher) an einen FPGA
angeschlossen?
Viele Grüße Woko
>USB-to-Seriell Chip
das wird dir nicht weiterhelfen, das sind i.A. nur USB-Devices.
Du brauchst aber eine USB-Host-Implementation und die nötigen Treiber.
Das ist eine sportliche Aufgabe.
Wieso nimmst du nicht einen AVR mit OTG-Funktionalität, der hat den Host
schon mit drin. Dann musst du nur noch die SW portieren.
Woko wrote:
> Ich will eine GSM Engine wie z.B. (Siemens HC 25, oder Telit) an einen> FPGA anschliessen.
Nach meinem letzten Wissensstand hat Siemens die Abteilung verkauft.
Also mit den HC25 wäre ich vorsichtig falls du da was kommerzielles
drauf aufbauen willst.
Die Telits .... naja die hatten massive Probleme Ihre Firmware in den
Griff zu kriegen. So langsam gehts, aber irgendwie, für zwei entfernte
Bugs bauen sie einen neuen ein.
> Die Engines sind komplette HF-Boards um z.B. HSDPA also High Speed GSM> Verbindungen aufzubauen. Bisher habe ich das immer über die serielle> Schnittstelle und einem Soft UART im FPGA angeschlossen.> Die hohen Geschwindigkeiten von bis zu 7 MBit kann man aber nur per USB> Anschluß im High-Speed Mode mit der Engine austauschen.> Die Hersteller liefern da zwar komplette Windows Treiber etc. aus, aber> das hilft mir bei einem FPGA leider gar nicht weiter. (denn das ganze> soll auch ohne PC funktionieren)
Die HC25 find ich im normalfall schwer zu nutzen. Die letzte Version die
ich davon in den Händen hatte wollte erstmal immer in den Composite
Modus gehen (um sich dann als Mass-Storage zu präsentieren) Da musste
man dann erstmal einen SCSI-Eject machen damit sie sich als normales
cdc-device zeigen. (Lässt sich nach dem ersten mal aber via AT-Commands
umstellen)
Für die Telits kann ich dir empfehlen dir mal usb-serial.c und option.c
im Linux kernel anzuschauen. Damit laufen die hier problemlos. Vlt.
findest du da ein paar Anhaltspunkte.
Ein reiner usb-serial-adapter bringt dir hier nix. Da die normal nicht
im HostModus arbeiten. Ausserdem brauchst du, um die volle
Funktionalität zu nutzen, Zugriff auf zwei der virtuellen Com-Ports.
@Lothar
Jaaa, der OTG Mode ist glaub ich mehr für Mass Storage Devices gedacht,
oder nicht ?
@Nico
Ja, das Telit massive Software Probleme hat habe ich auch schon mehrfach
selbst erlebt, zwar mit anderen engines, aber dass ist auch der Grund
warum ich für eine neue Anwendung die HC25 von Cinterion verwenden will.
Ja die Siemensabteilung ist verkauft, die heissen jetzt Cinterion. War
wohl ein Management buy out. Die stehen wohl recht gut da am Markt.
Ich hatte den Telit Link eingefuegt weil der frei zugänglich ist...
"...Die HC25 find ich im Normalfall schwer zu nutzen. Die letzte Version
die ich davon in den Händen hatte wollte erstmal immer in den Composite
Modus gehen (um sich dann als Mass-Storage zu präsentieren) Da musste
man dann erstmal einen SCSI-Eject machen damit sie sich als normales
cdc-device zeigen. (Lässt sich nach dem ersten mal aber via AT-Commands
umstellen).."
Hattest Du die denn per Windows oder Linux angeschlossen oder über einen
Microcontroller ?
@all
Könnte man den Vinculum Chip von FTDI nutzen oder ist das auch wieder so
ein "Mass Storage Device" Teil ?
Gruss woko
Du brauchst einen recht universellen USB-Host-Stack mit genau dem
Treiber der zu dem USB-Device passt. Die Vinculum gibts nur für
bestimmte Devices: Mass-Storage, die FTDI-USB-Serial-Wandler...
Du müsstest erst mal den PC-Treiber auseinander nehmen und dann auf
deinen Zielprozessor portieren. Eine aufwendige Sache.
Aalso was ich jetzt in der Doku rausgefunden habe muss ich wohl
sogenannte USB message pipes aufmachen.
"...A USB host has to support at least 6 „Message Pipes“ (see “Universal
Serial Bus Specification Revision 2.0“3 for a definition
of the term „Message Pipe“) to work with the USB interface."
Hat das denn schon jemand mit FPGA oder AVR und Co hinbekommen ?
Gruss und Danke auch für die bisherigen Tips ;-)
Wenn Du funktionierende USB hardware auf einem FPGA implementieren
möchtest, dann solltest du einen IP-Core in Betracht ziehen, ansonsten
verspreche ich dir : Das wird nichts!
Gruß,
SuperWilly
PS: Doch müsste gehen, habe jetzt auf der Webseite nachgeschaut (
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/4751/ln/en )
Da steht folgendes:
Cameras
Cell Phones
Custom USB Devices
Desktop Routers
Instrumentation
Microprocessors and DSPs
MP3 Players
PC Peripherals
PDAs
PLCs
Set-Top Boxes
Ich empfehle aber in dem Fall einen µC oder ARM einzusetzen, der das
alles abwickelt und wiederum mit dem FPGA kommuniziert über z.B. ein
8Bit parallel-Interface. Treiber für den Chip in VHDL zu schreiben in
Selbstmord :)
>Alternativ kann ich natürlich noch irgendwie einen>Controller mit USB auf der einen und SPI auf der anderen Seite>einsetzen.
würde dir evtl. ein VNC1L helfen? USB-Host auf SPI.
http://www.vinculum.com/prd_vnc1l.html
Hallo Zusammen,
ich geh mal die bisherigen Antworten durch:
Also: ja ein USB Treiber komplett in VHDL scheint mir auch recht
schwierig zu sein, da bricht man sich wahrscheinlich wirklich die
Finger.
Ich bin jetzt am Recherchieren ob man mit dedizierten
USB-Host-Kontrollern, die die Hauptarbeit machen, weiterkommt...
wie den hier von smsc
http://www.smsc.com/main/catalog/usb3300.html#Additional%20Information
Da hab ich nur das kleinere Problem wie ich die 12 ULNP Anschlüsse an
meine restlichen 8 FPGA-Leitungen dran krieg, aber da muss ich irgendwas
Multiplexen.
Es scheint mir sowieso, das viele Chips und Devices nur mit USB
ausgestattet werden die alle dann den (danke an die Tippgeber)
offensichtlich den USB OTG Mode supporten.
Einen ARM will ich mir ersparen weil ich so schon kaum Power übrig hab
Verfügung hab. Außerdem weitet sich das ganze eh schon zum Supergau aus,
...weil eigentlich wollte ich nur eben einen bestimmten GSM-Chipsatz
anklemmen, und jetzt bin ich bei soviel zusätzlicher Elektronik und
Firmware angelangt, dass es bald keinen Spaß mehr macht.
Es scheint mir das Standardverfahren für Transparente Datenübertragung
mit EINEM USB Device zu sein.
Hier hab ich zumindest mal so Allerlei zu den Details in verständlicher
Form gefunden.
http://www.beyondlogic.org/usb/otghost.htm
Hat den schon mal jemand den USB OTG Mode programmiert, eingesetzt ?
Gruß und Danke schonmal wieder an alle
Woko
Hast du denn den Treiber für deinen GSM-Chipsatz im Quellcode
vorliegen, oder eine Doku, welche Daten in welchen Endpoints was machen?
Ohne kannst du die Sache auch fast vergessen, da müsstest du aufwendiges
Re-Engeneering betreiben, um das herauszubekommen. (USB-Sniffer am PC
erst mal).
Hallo Christian,
ja ich habe quasi die Programmieranleitung für den GSM Chipsatz, was man
denn an Kommandos an welche pipe senden kann und muss. Dies ist wohl
auch nicht weiter schwierig, WENN - ja wenn ich denn überhaupt mal eine
Kommunikation in Gang bringe.
Nur wie ich die so genannten Pipes dann aufmache ist mir nicht klar.
Ich bin mir ja nicht mal sicher ob und was denn zur Kommunikation über
solche Pipes überhaupt nötig ist. Macht das dann ein USB Host Chip
(s.o.) für mich oder muss ich das quasi selbst machen?
Gruss Woko
Hm, das kann ich dir nicht sagen, denn solche Funktionen werden
normalerweise vom Betriebssystem und einem passendem Gerätetreiber
bereitgstellt. Du sitzt ja dann quasi auf unterster Ebene, da musst du
erst mal alles drumherum zum Laufen bekommen (Erkennung der Geräte,
Enumeration usw.). Ich weiß nicht, ob das alles auf einem FPGA klappt.
wenn dann überhaupt nur mit einem Prozessor (Softcore) und einem USN OTG
Controller. Auf jeden Fall eine sportliche Aufgabe, da muss man schon
recht viel ahnung von USB und allem was dazugehört haben.