FX3 Bulk Transfer gaps on fast Windows 10 laptops

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
JuCr_1120011
Level 1
Level 1

We've been shipping a product for several years that uses bulk transfers at variable rates (up to about 200 MB/s) to stream data. It's been working well on a wide variety of computers, but recently we've noticed new laptops (i7-8750H processor) don't service the bulk data (IN) transfers in a timely manner. It looks like as soon as they catch up with the pending data, they wait maybe a millisecond or more before retrieving more data, causing occasional gaps in the stream (we only have about a millisecond of buffer on the FX3). Oddly enough, increasing the CPU load seems to eliminate the problem.

Has anyone else seen this? Is there a better workaround (other than switching to isochronous transfers)? Thanks in advance.

0 Likes
1 Solution

Hello,

- Can you please upload the USB traces captured on the bus using a protocol analyzer such as TotalPhase or LeCroy?

- Also, if possible, try to disable the low power settings in the BIOS and check if the issue still persists. With latest generation processors, more deep sleep states are introduced, which drive the core into low power states irrespective of USB transfers.

- As an alternate idea, you can implement a dummy thread in your application to keep the CPU busy and prevent it from entering the low power states.

Please test and let me know the results.

Best regards,

Srinath S

View solution in original post

0 Likes
7 Replies
SrinathS_16
Moderator
Moderator
Moderator
1000 replies posted 750 replies posted 500 replies posted

Hello,

- Please upgrade the driver to CYUSB3 driver version 1.2.3.20.

- Also, mention the host controller model on which the issue is seen.

Best regards,

Srinath S

0 Likes

Upgrading the driver was one of the first things we tried. We observed the problem on the XPS 15, with an i7-8750H, which appears to use the ASMedia USB Extended Host Controller Driver.

We ended up just adding a dummy isochronous endpoint, requesting 1kB of bandwidth every other micro-frame. This seemed to do the trick, preventing the host from dropping into whatever power-saving mode it was doing. It's a cheesy solution so we're still open to other suggestions.

0 Likes

I'd be curious if you've tried this on an 8th generation i7 running Windows 10. We never had a problem before 8th gen processors on Windows 10. We have thousands of systems deployed using ~200 MB/s bulk transfers, and now 2 customers in one week reporting a problem we can readily duplicate. But as more customers get these 8th gen processors and Windows 10, I am concerned it could quickly become a major problem.

0 Likes

Indeed. 8th gen: sadly not to hand. Latest round of test kit is 7th.

Sorry not to be of more help.

0 Likes
JEv_295166
Level 3
Level 3
First like received

Comments imply Cypress driver+API?

For reference we have a system that streams data from 4x5MP cameras via an FPGA/FX3 to Windows hosts. That's currently ~200MB/s. Uses the MSFT bulk driver and WinUSB. Extremely reliable.

It might be worth a look, as relevant code can be mashed up pretty quickly. Look out for the 'Zadig' tooling to handle driver installation for the device VID+PID.

Good luck and do post if you try this.

0 Likes

"Comments imply Cypress driver+API?"
Ah, tricky question. We actually tested both ways, but different hardware platforms. Our new product has a similar problem, and I did upgrade to the latest SDK and rebuild (we were at 1.3.3). It made no difference. Our older product I still maintain on an older version of the Cypress tools (probably change a couple of lines of code about once a year). I didn't bother upgrading when the latest SDK had no effect on our new product.
They both responded favorably to adding the dummy isochronous endpoint, which seemed like a slightly better solution than adding a couple of threads with busy loops (our customer's workaround while we found a better solution), and both survived a 16 hour gap-free streaming test.

0 Likes

Hello,

- Can you please upload the USB traces captured on the bus using a protocol analyzer such as TotalPhase or LeCroy?

- Also, if possible, try to disable the low power settings in the BIOS and check if the issue still persists. With latest generation processors, more deep sleep states are introduced, which drive the core into low power states irrespective of USB transfers.

- As an alternate idea, you can implement a dummy thread in your application to keep the CPU busy and prevent it from entering the low power states.

Please test and let me know the results.

Best regards,

Srinath S

0 Likes