hallo, ich arbeite gerade mit dem vy7y68001. er soll später ein speichermedium beidienen...(flashbaustein) z.Z. arbeite ich mit den Treibern von Cypress und der dazugehörigen api (cyapi) an einem c++ beispiel von cypress (bulkloop). diese api stellt eine hülle an funktionen zur verfügung, damit ist es möglich fast jede beliebige usb anwendung zu bedienen. momentan stehe ich noch am anfang dieses projektes, es ist bereits möglich daten über bestimmte endpunkte zu senden, vendor id und produkt id auszulesen usw.. da der cypress chip momentan von einem entwicklungskit vorinitialisiert wird. hier mal mein momentanes beispiel, ausgelesen mit einem unabhängigen usb view tool: Device Descriptor: bcdUSB: 0x0200 bDeviceClass: 0x00 bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x40 (64) idVendor: 0x04B4 (Cypress Semiconductor) idProduct: 0x1002 bcdDevice: 0x0000 iManufacturer: 0x01 0x0409: "Cypress" iProduct: 0x02 0x0409: "EZ-USB SX2" iSerialNumber: 0x00 bNumConfigurations: 0x01 ConnectionStatus: DeviceConnected Current Config Value: 0x01 Device Bus Speed: Full Device Address: 0x01 Open Pipes: 4 Endpoint Descriptor: bEndpointAddress: 0x02 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x04 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x86 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x88 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Configuration Descriptor: wTotalLength: 0x002E bNumInterfaces: 0x01 bConfigurationValue: 0x01 iConfiguration: 0x00 bmAttributes: 0xA0 (Bus Powered Remote Wakeup) MaxPower: 0x32 (100 Ma) Interface Descriptor: bInterfaceNumber: 0x00 bAlternateSetting: 0x00 bNumEndpoints: 0x04 bInterfaceClass: 0xFF bInterfaceSubClass: 0x00 bInterfaceProtocol: 0x00 iInterface: 0x00 Endpoint Descriptor: bEndpointAddress: 0x02 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x04 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x86 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x88 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 da ich letztendlich ein massdata storage device "bedienen" will, stellt sich genau jetzt die frage, ob es nicht einen windows treiber plus api gibt welche die schnittstellen zu einem massdatastoragedevice bereits stellt, da windows ja bereits über die möglichkeit zur kommunikation mit eben speichermedien verfügt. dann müsste auf der gegenseite (auf der eigentlichen hardware) die bedienung/ausführung und umsetzung der windows spezifischen befehle zur ansteuerung eines massdata storage devices erfolgen. hier mal ein beispiel meines usb sticks: Device Descriptor: bcdUSB: 0x0200 bDeviceClass: 0x00 bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x40 (64) idVendor: 0x13FE idProduct: 0x1D00 bcdDevice: 0x0110 iManufacturer: 0x01 0x0409: "Sharkoon" iProduct: 0x02 0x0409: "Flexi-Drive EC " iSerialNumber: 0x03 0x0409: "90730100004A" bNumConfigurations: 0x01 ConnectionStatus: DeviceConnected Current Config Value: 0x01 Device Bus Speed: Full Device Address: 0x02 Open Pipes: 2 Endpoint Descriptor: bEndpointAddress: 0x81 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x02 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Configuration Descriptor: wTotalLength: 0x0020 bNumInterfaces: 0x01 bConfigurationValue: 0x01 iConfiguration: 0x00 bmAttributes: 0x80 (Bus Powered ) MaxPower: 0x64 (200 Ma) Interface Descriptor: bInterfaceNumber: 0x00 bAlternateSetting: 0x00 bNumEndpoints: 0x02 bInterfaceClass: 0x08 bInterfaceSubClass: 0x06 bInterfaceProtocol: 0x50 iInterface: 0x00 Endpoint Descriptor: bEndpointAddress: 0x81 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x02 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 ich wäre für informationen zu dem thema sehr dankbar, eventuell gibt es ja ein ddk o.ä. das sich genau auf solche ansprüche umsetzen lässt - es geht momentan erstmal um die windows seite, die hardwareansprüche sollten allerdings ersehbar sein, also wenn es dann in dem win treiber ein befehl (schreibe daten in sektor (x,y), lösche device()) gibt, müsste schon ersichtlich sein, in welcher pipe der befehl wie codiert gesendet wird, und wie sich das device daraufhin verhalten muss. soweit ich bis jetzt ersehen habe, haben massdata storage devices wie usb sticks usw. ja scheinbar einen in und einen out endpunkt. gruß, fm
Es gibt doch von Cypress direkt ein Referenz-Design für ein USB zu ATA Wandler. Original wird da der FX2 (68013...) benutzt. Da dein SX2 ja keinen integrierten Core hat, muss sich dein an den SX2 angeschlossener Host-Prozessor um die Umsetzung der Kommandos kümmern. Aber das Referenzdesign wäre sicher ein guter Startpunkt. Wir benutzen das, um CF-Karten direkt in´s Windows einzubinden.
Hallo Christian, vielen dank...hört sich interessant an, könntest du mal den link einstellen? kenne die applikation nicht. ist es dort das ziel usb zu ata umszusetzen und umgekehrt, um dann eine ata platte per usb an windows anbinden zu können!? ich frage nur weil es mich dann wundert - ich dachte sowas kann man kaufen - nicht das wir uns falsch verstehen. ich bin gerade auf den treiber usbstor unter windows gestoßen, theoretisch brauche ich eine api dazu, und die möglichkeit das cypress device diesem treiber hinzuzufügen, sodass auch der cypress sx2 mit seiner momentanen vid+pid vom system als massdatastorage erkannt wird - aber warscheinlich stelle ich mir das nur zu einfach vor. ich versuche es gerade umgekehrt, also meinen usb stick mit dem cypress treiber zu laden - ist hakelig - falls es überhaupt geht. gruß, fm
..ist es das? http://app.cypress.com/portal/server.pt?space=CommunityPage&control=SetCommunity&CommunityID=285&PageID=552&shortlink=DA_667858&ref=sch fm
Ja genau, das meine ich. Nur dem System "vorgaukeln" bringt nix, die Firmware auf der USB-Device Seite, also in deinem Prozessor, der am SX2 hängt muss ja alle Kommandos handhaben. Ansonsten hängt das nicht an der VID/PID, sondern an den Interface Descriptoren und DeviceClass Einträgen. Dein SX2 ist ja ohne externen Prozessor "dumm", das heißt, er kann höchstens Daten, die du in die Endpunkte schreibst, ausgeben bzw. eben umgekehrt. Mass-Storage geht nur mit externer "Intelligenz".
hi christian,
>>Ansonsten hängt das nicht an der
VID/PID, sondern an den Interface Descriptoren und DeviceClass
Einträgen. Dein SX2 ist ja ohne externen Prozessor "dumm", das heißt, er
kann höchstens Daten, die du in die Endpunkte schreibst, ausgeben bzw.
eben umgekehrt. Mass-Storage geht nur mit externer "Intelligenz".<<
-das weiß ich, deswegen schrieb ich ja schon:
momentan stehe ich noch am anfang dieses projektes, es ist bereits
möglich daten über bestimmte endpunkte zu senden, vendor id und produkt
id auszulesen usw.. da der cypress chip momentan von einem
--->>>entwicklungskit vorinitialisiert wird.
-dort ist ein programm enthalten welches den 68001 initialisiert und 4
endpunkte eröffnet, von denen eben 2 in und 2 out sind, und ein kanal
einfach stumpf gespiegelt wird, wie damals bei den seriellen devices ein
"echo", jetzt das echo auf eínem in und out kanal des usb.
...was ich benötige ist eine beschreibung dieser "daten" - und wie man
den windows treiber dazu bekommt, das cypress device mit in die liste
der bekannten devices aufzunehmen, der treiber heißt wohl usbstor und
bedient alle massdata storages unter windows, die frage ist wie? damit
man eben genau diese kommunikationsanfragen an den cypress korrekt
beantworten kann.
also
1) wie kann ich den treiber erweitern (usbstor) windows treiber für
massdata storages
2) gibt es ein cpp konforme ddk dazu, mit dem man dann auf diese
funktionen zugreifen kann, oder ist das alles quatsch!?
3)wie sieht die kommunikation zum win treiber auf der schicht eines
massdata storage devices aus, um diese richtig beantworten zu können.
ich habs übrigens geschafft, meinen usb stick mit dem cypress treiber
anzusprechen, und mit der cypress api auszulesen...
-pipes
-device infos usw..
das geht also.
gruß,
fm
Hi, ich habe mal meinen momentanen stand angehängt, jetzt lassen sich bereits daten übertragen, von der hardware zum Host. das ganze geschieht auf basis der usb klasse, also direkt über die endpoints. für die emulierung eines massdata storage devices muss ein sogenannter command block wrapper erzeugt/bedient werden - hat das schonmal jemand von euch gemacht, momentan frage ich mich auf welcher pipe diese kommunikation abläuft (endpoint 0!?) wenn ja, wie kann ich ihn bedienen? ich hänge hier nochmal die struktur eines usb sticks ein: Device Descriptor: bcdUSB: 0x0200 bDeviceClass: 0x00 bDeviceSubClass: 0x00 bDeviceProtocol: 0x00 bMaxPacketSize0: 0x40 (64) idVendor: 0x13FE idProduct: 0x1D00 bcdDevice: 0x0110 iManufacturer: 0x01 0x0409: "Sharkoon" iProduct: 0x02 0x0409: "Flexi-Drive EC " iSerialNumber: 0x03 0x0409: "90730100004A" bNumConfigurations: 0x01 ConnectionStatus: DeviceConnected Current Config Value: 0x01 Device Bus Speed: Full Device Address: 0x01 Open Pipes: 2 Endpoint Descriptor: bEndpointAddress: 0x81 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x02 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Configuration Descriptor: wTotalLength: 0x0020 bNumInterfaces: 0x01 bConfigurationValue: 0x01 iConfiguration: 0x00 bmAttributes: 0x80 (Bus Powered ) MaxPower: 0x64 (200 Ma) Interface Descriptor: bInterfaceNumber: 0x00 bAlternateSetting: 0x00 bNumEndpoints: 0x02 bInterfaceClass: 0x08 bInterfaceSubClass: 0x06 bInterfaceProtocol: 0x50 iInterface: 0x00 Endpoint Descriptor: bEndpointAddress: 0x81 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 Endpoint Descriptor: bEndpointAddress: 0x02 Transfer Type: Bulk wMaxPacketSize: 0x0200 (512) bInterval: 0x00 in endpoint 0 liegen ja, so wie ich das verstanden habe, die gesamten informationen über das device selbst in Form von descriptoren...(device, konfiguration, interface und letzendlich endpoints). mein ziel ist es das das flash in der hardware (siehe anhang) als physikalisches device von windows erkannt wird, da kein fs auf dem device vorhanden ist, dies ist auch vorerst nicht nötig. ich frage mich jetzt, wie windows über den command bock wrapper z.B. erfährt wie groß das physikalische medium ist, in der spec steht zwar der aufbau des cbw/csw und auch der kommunikationsablauf, aber nicht, wie die anfrage codiert werden... auf der windows seite ist der zugriff auf ein physikalisches device soweit erstmal vorhanden. das ganze läuft dort ja überall (also an jeder stelle ob nun auf fs ebene, auf raw ebene, oder sogar auf device ebene auf der basis von filezugriffen ab) die bereiche sind in der zeichnung rot markiert. hat das schonmal jemand von euch gemacht? des weiteren wäre es mal interessant zu erfahren ob man windows ein filesystem hinzufügen kann, und wenn ja, wo und wie man dort infos erhalten kann - ist aber nur rein interessenhalber.... am wichtigesten ist der umgang mit dem command block wrapper und wie die befehle dort eingebracht werden, zum beispeil anhand einer anfrage des systems über die größe des angeschlossenen speicher mediums... gruß, fm
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.