none
How do I make a usb 3.0 driver for windows 7? RRS feed

  • Question

  • I asked a question yesterday about why my device said that it wasn't capable of SuperSpeed. After doing some research it looks like the reason might be that I am developing on a Windows 7 machine. Emanual Shalev pointed out here that windows 7 does not have a USB 3.0 stack, only windows 8.

    I have noticed people mentioning that you can use 3rd party stacks to make get superspeed transfers but I have no idea what that means. 

    From definitions online it looks like a usb stack is a bunch of layers of drivers that would go between my driver and the actual usb 3.0 device. So it seem like when I use KMDF the calls I am making to the device are being sent through this stack of different drivers that is made available by default in windows, but in windows 7 doesn't support superspeed.

    What I would like to know though is how I can use a 3rd party stack. I'm having a hard time understanding how to make my driver use one and where I would even get started. I'm hoping someone can shed some light on where I could start doing some research on what might be necessary to get superspeed transfers for the device driver I am making.

    P.S. I'm not sure I fully understand yet but if I use a different stack then does that mean I could/would not be using KMDF anymore?

    Friday, August 15, 2014 6:27 PM

Answers

  • you don't have to ditch KMDF, that is right path no matter what.  all of the win7 USB 3.0 stacks should look programmatically similar but because each is its own unique flower not managed by Microsoft, yes, you have to deal with each in its own way and test on each. there is no way around that since there is no Microsoft provided class driver

    d -- This posting is provided "AS IS" with no warranties, and confers no rights.

    Friday, August 15, 2014 10:29 PM
  • That is the challenge, you don't know what you have to send to the 3rd party stack, or even if there is a command.  Some of these stacks special case the device identifier, and then use USB 2.0 for anything else.  This is the reason you need to check with the vendor.


    Don Burn Windows Filesystem and Driver Consulting Website: http://www.windrvr.com

    • Marked as answer by TopGunMSDN Friday, August 15, 2014 11:38 PM
    Friday, August 15, 2014 11:35 PM
  • You will have to contact the manufacturer, this is the problem with 3rd party stacks, every one is different.


    Don Burn Windows Filesystem and Driver Consulting Website: http://www.windrvr.com

    Friday, August 15, 2014 7:09 PM

All replies

  • If your USB 3.0 controller has its own driver, then there will be a 3rd party stack.  Unfortunately, the quality of 3rd party stacks varies significantly so whether your driver will work correctly and use SuperSpeed on such a stack is not something than can be determined without testing.

    Step one should be use a tool such as OSR's DeviceTree http://www.osronline.com/article.cfm?article=97 to see what driver you have and if your device is connected to it.


    Don Burn Windows Filesystem and Driver Consulting Website: http://www.windrvr.com

    Friday, August 15, 2014 6:43 PM
  • Ok so I used the OSR device tree and got the following about the hub my device is connected to:

        ========================= USB Root Hub =========================
    
            +++++++++++++++++ Device Information ++++++++++++++++++
    Device Description       : Renesas Electronics USB 3.0 Root Hub
    Device ID                : RENESAS_USB3\ROOT_HUB30\7&3490DE1E&4
    Driver KeyName           : {36fc9e60-c465-11cf-8056-444553540000}\0059 (GUID_DEVCLASS_USB)
    Driver                   : C:\Windows\system32\DRIVERS\rusb3hub.sys (Version: 3.0.23.0  Date: 2012-08-21)
    Driver Inf               : C:\Windows\INF\oem38.inf
    Legacy BusType           : PNPBus
    Class                    : USB
    Service                  : rusb3hub
    Enumerator               : RENESAS_USB3

    The device is connected to the hub correctly and I have tested it with its proprietary driver to make sure that it works as expected. Now that I know the driver what should I do next to find out how to leverage the stack?

    Friday, August 15, 2014 7:04 PM
  • You will have to contact the manufacturer, this is the problem with 3rd party stacks, every one is different.


    Don Burn Windows Filesystem and Driver Consulting Website: http://www.windrvr.com

    Friday, August 15, 2014 7:09 PM
  • So when people make usb 3.0 drivers for windows 7 they have to write different code for the stacks that they might encounter? Also does this mean that I was on a wild goose hunt trying to use KMDF? Or will I end up having to work something into my KMDF code that makes it all happy? :\
    Thanks for shedding some light on this situation so far!
    Friday, August 15, 2014 7:20 PM
  • you don't have to ditch KMDF, that is right path no matter what.  all of the win7 USB 3.0 stacks should look programmatically similar but because each is its own unique flower not managed by Microsoft, yes, you have to deal with each in its own way and test on each. there is no way around that since there is no Microsoft provided class driver

    d -- This posting is provided "AS IS" with no warranties, and confers no rights.

    Friday, August 15, 2014 10:29 PM
  • you don't have to ditch KMDF, that is right path no matter what.  all of the win7 USB 3.0 stacks should look programmatically similar but because each is its own unique flower not managed by Microsoft, yes, you have to deal with each in its own way and test on each. there is no way around that since there is no Microsoft provided class driver

    d -- This posting is provided "AS IS" with no warranties, and confers no rights.

    Oh phew!!! what a relief. I was starting to get scared for a second there.

    I guess there is one thing that just sticks out in my head though. How does this foreign stack tie into the driver I'm writing? Above you mentioned that I have to "deal with each in its own way." What exactly does that entail on my part? Special Wdf calls? Making specific calls to that stack using 3rd party specific function calls? Just blind luck? (could I take the driver i've written and have it work using one host driver and not another? or something like that?)

    I've been looking around the internet looking for sources on something that might describe using these stacks, but haven't come up with anything. It seems like it is some very obscure process that not many people talk about.

    Again, I can't begin to express how thankful I am for the help!

    Friday, August 15, 2014 11:31 PM
  • That is the challenge, you don't know what you have to send to the 3rd party stack, or even if there is a command.  Some of these stacks special case the device identifier, and then use USB 2.0 for anything else.  This is the reason you need to check with the vendor.


    Don Burn Windows Filesystem and Driver Consulting Website: http://www.windrvr.com

    • Marked as answer by TopGunMSDN Friday, August 15, 2014 11:38 PM
    Friday, August 15, 2014 11:35 PM
  • Wow intense! I'll make sure send out some correspondence over the weekend so I can get cracking on getting some support for my driver next week! 

    Friday, August 15, 2014 11:42 PM