Thanks Jan for your helpful reply. I was looking through the USB transfer types and and it seems like achieving a certain latency is a lot easier than getting error free and accurate data. In my application, I look for a triggering point and I collect data for a certain time before and after that. Therefore, if data is not error free, I might miss the triggering point. Any suggestion on what transfer type might work better?
Bus errors are rare, but every transfer type except isochronous has built-in error checking and retries on error.
Use interrupt transfers if they have enough throughput for your application.
The other option is bulk, with no guaranteed timing but can work if you can control what is on the bus.