cancel
Showing results for 
Search instead for 
Did you mean: 

USB Superspeed Peripherals

adki_3154446
New Contributor II

Hi,

according to this thread https://community.cypress.com/t5/USB-Superspeed-Peripherals/FX3-change-packet-size-in-ISOC-module-US...

i was able to change the CY_FX_ISO_MAXPKT parameter.

when Running OUT Traffic (from the EP_OUT) from the streamer GUI, i was able to see in USB3 Trace that the Data len that my host is sending is actually the one that i defined in CY_FX_ISO_MAXPKT parameter.

my problem here is when i want to test the other way, IN_EP from the streamer GUI.

when choosing the IN_EP from the Streamer GUI and press on start, im able to see that there is traffic but in the USB3 Trace i see that the Data Len that the FX3 sending is always 0 no matter what CY_FX_ISO_MAXPKT is configured.

only when CY_FX_ISO_MAXPKT = 1024 i able to see that the FX3 is success to send ISOC Data Packet with Len = 1024 (verified it in the USB3 Trace).

is there something else that i need to configure? or maybe i miss something here? 

more details (from the USBIsocSourceSink module) :

/* ISO Mult settings for SS and HS operation. */
#define CY_FX_ISO_PKTS (1)

/* Burst length in packets supported by the ISO endpoints, when operating in USB 3.0 mode. */
#define CY_FX_ISO_BURST (1)

/* Dma buffer size multiplier. As ISO endpoints will only transfer ISO_PKTS * ISO_BURST packets of data in*/
/* each interval, this can be set to 1 without any performance limitation. */
#define CY_FX_DMA_MULTIPLIER (1)

0 Likes
1 Solution
Hemanth
Moderator
Moderator

Hi,

Choosing CY_FX_ISO_MAXPKT as 240 with CY_FX_ISO_PKTS and CY_FX_ISO_BURST set to 1 is not a problem.

But on the host side, I hope you are testing with streamer application. If not please test with the same.

In streamer app, min allowed packets per xfer for ISOC endpoint is 8. But make sure you choose xfers to queue as more than 2 to avoid 0xC000000D error. -> this is because on the host side, it has to be taken care that ISOC transfer requests are made for every frame.

Regards,

Hemanth

View solution in original post

0 Likes
4 Replies
Hemanth
Moderator
Moderator

Hi,

Did you make sure to set CY_FX_ISO_MAXPKT as a multiple of 16 bytes when CY_FX_ISO_PKTS, CY_FX_ISO_BURST and CY_FX_DMA_MULTIPLIER are set to 1.

(This is because DMA buffer size can only be multiple of 16 bytes)

Note:

If dmaCfg.size = ((size + 0x0F) & ~0x0F); is retained in the code, then 16 byte multiple is taken care.

If this is already taken care, please share the usb trace.

Regards,

Hemanth
0 Likes
adki_3154446
New Contributor II

Hi and thanks for the fast respond.

Attached the USB Trace.

first, i verified that the follow line is exist in the code dmaCfg.size = ((size + 0x0F) & ~0x0F);

i saw something more weird, when configuring the CY_FX_ISO_MAXPKT  param to 242 the Data len is changed when doing IN traffic and not constant as when i do OUT traffic where there i able to see constant Data Len = CY_FX_ISO_MAXPKT .

 

also, another strange behavior is when running IN traffic, after few seconds, the IN Traffic stops on code:

NSTATUS = 

0xC000000D

STATUS_INVALID_PARAMETER

An invalid parameter was passed to a service or function.

 

can you please advice? 

 

thanks,

adam.

0 Likes
adki_3154446
New Contributor II

Hi,

someone can help?

0 Likes
Hemanth
Moderator
Moderator

Hi,

Choosing CY_FX_ISO_MAXPKT as 240 with CY_FX_ISO_PKTS and CY_FX_ISO_BURST set to 1 is not a problem.

But on the host side, I hope you are testing with streamer application. If not please test with the same.

In streamer app, min allowed packets per xfer for ISOC endpoint is 8. But make sure you choose xfers to queue as more than 2 to avoid 0xC000000D error. -> this is because on the host side, it has to be taken care that ISOC transfer requests are made for every frame.

Regards,

Hemanth

View solution in original post

0 Likes