cancel
Showing results for 
Search instead for 
Did you mean: 

USB Superspeed Peripherals

JaRo_4664191
New Contributor II

Hi,

I'm working with an FX3 and I would like to combine BULK and ISOCHRONOUS endpoints (a pair of bulk endpoints and a pair of Isochronous endpoints). I've tried to modify the descriptor but I don't get the USB recognised. Also added code for a proper initialisation. If I use only the BULK interface it works just fine and I can see the device normally listed and its descriptors.

My question is: Can I mix in the same interface BULK and ISOCHRONOUS endpoints?

Kind regards

0 Likes
1 Solution
YatheeshD_36
Moderator
Moderator

Hello,

I tried with 3,16. It did work on my side.

pastedImage_0.png

The problem may be due to the bandwidth allocation from the host for isochronous endpoints.

Please refer to section 4.4.8.2 from the USB 3.2/USB 3.1 spec.

Try increasing the servicing interval in the isochronous end point descriptors and check for enumeration of iso endpoints.

Thanks,

Yatheesh

View solution in original post

0 Likes
5 Replies
YatheeshD_36
Moderator
Moderator

Hello,

Yes, you can add both bulk and isochronous endpoints in your firmware. Make sure that the total length field in the configuration descriptors is updated properly.

Please attach your descriptor file for review,

Thanks,

Yatheesh

0 Likes
JaRo_4664191
New Contributor II

Hi Yatheesh,

Please find attached the descriptor file. In the main file I initialise the DMA channels, as per example, but the device does not get recognised by the OS.

CY_FX_EP_PRODUCER_1/CY_FX_EP_CONSUMER_1 are mapped at 0x01 and 0x81

CY_FX_EP_PRODUCER_2/CY_FX_EP_CONSUMER_2 are mapped at 0x02 and 0x82

Please let me know if you find anything fundamentally wrong.

0 Likes
YatheeshD_36
Moderator
Moderator

Hello,

Please try the attached descriptors file, i have modified it a bit. It works fine.

The wMaxPacketSize field in the Endpoint descriptors for isochronous endpoint should be set to 1024 if the bMaxBurst in the endpoint companion descriptors is set to a non zero value.

Thanks,

Yatheesh

0 Likes
JaRo_4664191
New Contributor II

Hi Yatheesh,

Your file works indeed. Thanks. The only difference I can find is the value for CY_FX_ISO_PKTS and CY_FX_ISO_BURST. In my original code, I set those values to 3 and 8 respectively (taken directly from the ISOC example). With those in place it doesn't work. What can be the issue?

Screenshot 2020-09-01 at 13.06.52.png

(The image shows my system with a max burst length of 8, instead of 16)

Thanks again

0 Likes
YatheeshD_36
Moderator
Moderator

Hello,

I tried with 3,16. It did work on my side.

pastedImage_0.png

The problem may be due to the bandwidth allocation from the host for isochronous endpoints.

Please refer to section 4.4.8.2 from the USB 3.2/USB 3.1 spec.

Try increasing the servicing interval in the isochronous end point descriptors and check for enumeration of iso endpoints.

Thanks,

Yatheesh

View solution in original post

0 Likes