USB superspeed peripherals Forum Discussions
I am trying to design a new board with CYUSB3014-BZXI and with type A usb3 interface.
From SuperSpeed Explorer Kit Schematic.dsn I notice the STDB_SSRX- Pin of TypeB USB3 interface is connected to net SS_RX_P and the STDB_SSRX+ Pin of TypeB USB3 interface is connected to net SS_RX_M, which is mismatched. then I realized this design that exchanges signal between differencial pair make the PCB layout efficient and improve the signal integrity.
My question is whether the SS_TX_P/M could be exchanged likewise, whether the D+/- could be exchanged likewise?
thank you very much!
Hi,
Does FX3 device go to suspend mode after 3ms of inactivity on the bus?
Is there any documents about it?
https://blogs.msdn.microsoft.com/usbcoreblog/2011/05/10/demystifying-usb-selective-suspend/
Show LessHi,
I have a test by USB3CV tool, and got a following report(fail);
TD 9.12 - Remote Wakeup Test (Configuration Index 0) - Enabled:
INFO Start time: Tue Jan 24 09:36:50 2017
INFO Suspended the parent port of the device
ERROR The timer for 15000 ms expired. Did not receive a wakeup event
FAIL (1.2.106) A device with remote wakeup enabled must be able to initiate a remote wakeup on it's suspended parent port.
INFO A failure to generate Remote Wake may be waived if the Device Under Test meets these requirements: * Device requires the client driver to be loaded to generate the wake event. * Device demonstrates remote wake from S3 during Interoperabilty testing.
INFO Stop time: Tue Jan 24 09:36:54 2017
INFO Duration: 4 seconds.
INFO Stopping Test [ TD 9.12 - Remote Wakeup Test (Configuration Index 0) - Enabled:: Number of: Fails (1); Aborts (0); Warnings (0) ]
The host send suspend command while the device has no response for a while.
If the host send a resume command, the device will wake-up. Therefore, we don't need the remote wake-up function.
But once we disable the remote wake-up attribute in the configuration descriptor, then the device never enter into suspend mode. How to fix the problem?
Thanks for your help.
Show LessHi.
I have to use MANUAL DMA mode. I referenced example source what "CyU3PDmaChannelDiscardBuffer " function in DMA callback function.
USB working is good. but performance is very low. I think "CyU3PDmaChannelDiscardBuffer" function consume resources too much.
I remove "CyU3PDmaChannelDiscardBuffer" function in DMA callback function. DMA callback function is worked just one time.
I want to reuse DMA buffer without "CyU3PDmaChannelDiscardBuffer" function.
Please Let me know how to do.
Regards.
Shin.
Show LessHi,
I am using the CyU3PGpioSimpleSetValue API in a DMA callback function to manually pull some control pins high or low. I have used CyU3PDeviceGpioOverride to claim the required pins back as simple GPIOs and this works as expected. The issue I'm having is that after setting the value of the control pins in DMA callback function, the pins get reset back to their initial value after a random time between 1-10ms. Is this due to the value only being set for the length of the callback, and if so is there any way to make the value set by CyU3PGpioSimpleSetValue persistent?
Thanks
Show LessHi,
I am using sdk CX3 SDK version 1.3.3
[1] I am encountering irregular things wrt to the CyU3PUsbSendEP0Data / CyU3PUsbGetEP0Data functions.
The first arguement of both of these is suppose to be a size in bytes according to the info in cyu3usb.h, yet I encounter several instances of CyU3PUsbGetEP0Data calls which seem incorrect in the example code (both in the Cypress SDK as in de Econ devkits democode). Most of the time it seems the first argument of the CyU3PUsbGetEP0Data is in bits but even then it sometimes does not make sense.
A nice example is eg in Cx3UvcOV5640\cycx3_uvc.c line 1034:
status = CyU3PUsbGetEP0Data(16, &glStillReq, &readCount);
(with "static uint8_t glStillReq = 0; " ).
Even if the argument is in bits which the 16 seems to suggest, this still looks like a memory corruption because glStillReq is only 8 bits.
[2] Is would like to have more details about CyU3PDebugPrint, is this function thread safe ? Can it be called from interrupt level ?
Als the documentation of this function is plain wrong: " This function can be used by the application code to log free form message strings, and causes the output message to be written to the UART immediately."
As become apparent by the other functions, it in fact does not immediately outputs the log message but it is placed in a buffer.
How big is this buffer ? Is is statically or dynamically allocated ?
(For some reason i get corrupted uart output from a certain point onwards after modifying the code for my own sensor)
[3] General question
Is it possible to obtain sources of parts of the SDK ? I understand the sensor and threadx code cannot be released, but it would help a lot if I could dig into the rest to find out the answer to these questions on my own and to debug stuff that is going on. Which threads are running in the system with what parameters ? How is the thread safety of all these functions ? Etc etc.
[4] Last remark about the code, in cyfxtx.c:
void *CyU3PMemAlloc ( uint32_t size)
...
/* Cannot wait in interrupt context */
if (CyU3PThreadIdentify ())
{
status = CyU3PByteAlloc (&glMemBytePool, (void **)&ret_p, size, CY_U3P_MEM_ALLOC_TIMEOUT);
}
else
{
status = CyU3PByteAlloc (&glMemBytePool, (void **)&ret_p, size, CYU3P_NO_WAIT);
}
...
threadx memory allocation functions can not be called from interrupt context (and most malloc functions cannot), that is not not what the last argument of tx_byte_allocate is for. So another thing i wanted to check in the sources is that this is never done.
Regards,
Bram
Show LessApplication note "AN73609 - EZ-USB® FX2LP FX3 Developing Bulk-Loop Example on Linux"
is marked with "This is an Obsolete Application Note"
Are there any other recent bulk transfer examples available for Linux which I can expect to work on the FX3?
Show Less
HI
As I know basically USB3 is using the 1024 bytes one packet to transceiver the data between host application and CYUSB3KIT-003.
So currently I have no problem to receive 1024 times data transfer,
For example,
if (USBDevice->BulkInEndPt)
USBDevice->BulkInEndPt->XferData(_Orgin_Pixel_, 2048);
or
if (USBDevice->BulkInEndPt)
USBDevice->BulkInEndPt->XferData(_Orgin_Pixel_, 4096);
or
if (USBDevice->BulkInEndPt)
USBDevice->BulkInEndPt->XferData(_Orgin_Pixel_, (1024*9));
above these transfer is working good.
But, in my case, that the transfer of data is not 1024 times.
Actually my case is
if (USBDevice->BulkInEndPt)
USBDevice->BulkInEndPt->XferData(_Orgin_Pixel_, (2592));
or
if (USBDevice->BulkInEndPt)
USBDevice->BulkInEndPt->XferData(_Orgin_Pixel_, (2592*1944));
as you can see, I need that slavefifo firmware with non 1024 multiple packet.
Would you let me know how do I implement the non 1024 multiple transfer slavefifo firmware?
Please let me know what am I suppose to do what I want to implement the slavefifo firmware can handle the length of 5038848 (2592*1944).