cancel
Showing results for 
Search instead for 
Did you mean: 

USB Superspeed Peripherals

NCH_4488531
New Contributor

We use EP3_IN and EP3_Out to communicate with PC, and only transfer short packages(less than 512B);

FPGA read/write FX3's slave FIFO;

Pipe EP3_IN's timeout set to 0xFFFFFFFF;

Now we got a problem:

PC send data to EP3_Out works OK;

The problem is: PC cannot get data from EP3_IN; and only USB3.0 has this problem, 2.0 works OK;

We did a test:

FPGA send 5 packages per second, the first package can be written to FX3 successfully, but after the second write, FX3's FLAGA keeps LOW, as the attached chart shows;

We use FLAGA as *_wr_full signal, only write FX3 FIFO when it's HIGH;

Even if the first package write OK, PC cannot get it, and we see nothing from bus hound;

When this happens, IF we send a package to EP3_OUT, then pc can get the first package from EP3_IN;

We also tried:

Set EP3_IN's timeout policy to 1s, then PC can get a package per second, while FPGA trying to send one every 200ms;

We tried Win_USB driver and Cypress diver, got the same result;

Setting EP3_IN to bulk mode or interrupt mode from FX3 firmware, no change;

Forbid FX3 to enter low power mode, no change;

We can think of nothing to try now, any help will be appreciated!

0 Likes
1 Solution
KandlaguntaR_36
Moderator
Moderator

Hello,

Can you please load the attached firmware and do in transfer on 0x83 BULK Endpoint?

You are supposed to received AA AA AA 15 times.

This firmware does not need any external processor.

I am using the CPU Manual channel as a source for the socket assciated with 0x83 endpoint.

Meanwhile, I will go through your code and check.


Regards,

Sridhar

View solution in original post

3 Replies
KandlaguntaR_36
Moderator
Moderator

Hello,

Can you please check whether you have received the producer event for the first short packet in the dma event callback and it is committed successfully?

You can also find the buffer size you have received in the dmacallback.

Please confirm whether you are using SDK 1.3.4.

If possible, please share the .c file that includes the endpoint configuration, dma channel creation, buffer sizes, count.

Regards,

Sridhar

0 Likes
NCH_4488531
New Contributor

First, thanks for your help, and sorry for the delay!

I confirmed that we are using SDK 1.3.4.

According to our engineer, we are using auto-dma mode, so the dma event callback seems not called.

The attached two .cpp files show the dma configuration and descriptors' settings;

When we do the test, we found another strange thing, that when we use an PCIe-to-usb3.0 card, usb3 works ok(for some time, then some other problem will happen), but if we use pc's usb3.0 port, the problem as descriped earlier will happen instantly.

Test steps:

1. Send a package to FPGA through EP3_Out, to start FPGA's auto-send-package process (one package per second);

2. When we use PCIeToUSB3.0, we can see from bus hound that EP3_In did receive a package every second;

     bus hound log: PCIeToUSB3.0.txt;

3. When we use pc's usb3.0 port, we can only see one package from bus hound without other interference;

    if we do nothing, we can never receive the second package;

    but if we send a package to EP0_Out, we got the expected data from EP0_In, and the EP3_In packages;

    bus hound log: USB3.0.txt;

Please HELP!

0 Likes
KandlaguntaR_36
Moderator
Moderator

Hello,

Can you please load the attached firmware and do in transfer on 0x83 BULK Endpoint?

You are supposed to received AA AA AA 15 times.

This firmware does not need any external processor.

I am using the CPU Manual channel as a source for the socket assciated with 0x83 endpoint.

Meanwhile, I will go through your code and check.


Regards,

Sridhar

View solution in original post