Hello all,
I am doing high speed isochronous streaming, 1 URB per frame=millisec on XP sp2. The USB endpoint descriptor has a bInterval of 1, so it polls every microframe = 1/8 millisec. The problem I’m having is that some microframes I attempt to read, return with a status of:
USBD_STATUS_ISO_NOT_ACCESSED_BY_HW – “The host controller did not access the transfer descriptor (TD) that is associated with this packet. The USB stack reports this error in the packet status field of an isochronous transfer packet.” (MSDN)
… and thus these microframes fail to read, even when the overall URB reports success. I know that isochronous transfer does not guarantee delivery, but I do hope to learn whether there are any general, preventable causes of this error.
I can reproduce the problem by performing disk access concurrently with streaming. This is on an older desktop machine – 1 GHz single core Athlon, 256 MB RAM.
What’s odd to me is that some of the microframes in the URB succeed – and furthermore, the good and bad microframes are intermingled. For example, within one frame I had microframe indexes 0, 2, 5, and 7 that failed with the above error, while indexes 1, 3, 4, and 6 were successfully read. That intuitively suggests to me that it’s not a scheduling failure in terms of my submitting the request too late, or else I would expect contiguous microframes at the beginning to fail.
What has been your experience with this error? What causes the host controller to “not access the TD” for these random(?), individual microframes?
Regards,
Andrew