USBD_START_ISO_TRANSFER_ASAP high latency

Discussion in 'Windows Vista Drivers' started by greg1x, Mar 17, 2006.

  1. greg1x

    greg1x Guest

    Hi!

    My USB 2.0 compliant full-speed device has an Isoch endpoint to receive data
    from the PC. Its firmware sets bInterval to 1ms (needs data every ms).
    I'm using the ISOUSB sample and everything works well, except that I'm
    getting 8-9ms latency which is way too high. (as I'm declaring 1ms for
    bInterval)
    ISOUSB shows two ways of submitting:

    1. Using the USBD_START_ISO_TRANSFER_ASAP flag and NOT declaring the
    StartFrame
    My completion routine gets called after about 9ms from submitting the
    request. (In the meanwhile, the pin cannot be used for starting new
    transfers.)

    -or-

    2. Declaring the StartFrame and NOT using the USBD_START_ISO_TRANSFER_ASAP
    flag
    If I set StartFrame to IsoUsb_GetCurrentFrame(DeviceObject, Irp) + 1, many
    of my packages will be lost and still, the completion routine gets called
    after about 5ms.
    5ms is the very highest value I can accept. (..but it drops lots of
    packages)

    It there any way to utilize the 1ms bInterval or at least getting latencies
    under 5ms without dropping packages?

    Thanks for your time!
    greg1x
     
    greg1x, Mar 17, 2006
    #1
    1. Advertisements

  2. greg1x

    Tim Roberts Guest

    Why? You can queue up a large number of transfers for one endpoint, and
    each of those may include a number of packets. In fact, you MUST do so to
    achieve reasonable results. Remember that the USB host controller driver
    will not send an IN token to your device unless there is an URB ready and
    waiting at the start of that frame. If you submit, wait for completion,
    process, and resubmit, you'll get approximately the results you are seeing.
     
    Tim Roberts, Mar 19, 2006
    #2
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.