USB superspeed peripherals Forum Discussions
Dear Cypress Community,
I am using the FX3 SuperSpeed ExplorerKit but I cannot find which are the minimum PC requirements for best data transmission performances.
I am interested in knowing:
- Oldest compatible Windows Operative system version
- 32 or 64 bit operative system
- Processor
- RAM
- Type of USB Port to use on PC
Thank you in advance,
Alessandro
Show LessHi all,
We have an issue with CX3 GPIF operation, and in the process of troubleshooting that I get CyU3PGpifGetSMState() printouts of current state = 131, before recovering to expected values.
I can not find the source for cyu3gpif.c to delve into details, and also can not trace any reference in documentation.
What exactly does state 131 indicate? Where can I find some info on what is causing this and how to get around it?
Show LessHello,
I try to connect to Denebola CX3 board with JTAG Segger J-Link, but I get this message:
Error while launching command: gdb --version
CreateProcess error=2, The system cannot find the file specified
How can I solve this problem.
Avinoam
Show Less
Hello,
I want to use two endpoints now.
One is a custom command (vendor) transfer using the control transport endpoint and the other is a bulk transport endpoint.
How do I set up the configuration descriptor? Please give me some advice.
Thank you!
Show LessHi everyone,
I'm running into an odd issue between Windows 7 and Windows 10 bulk transfers on a EZ-USB FX3 evaluation board. On a Windows 10 machine, the bulk endpoint (set up as a manual DMA channel) properly receives data, sends data out to the SPI bus on the FX3, and buffers the response to subsequently be read back to the PC. In Windows 7, the USB driver hangs when reading data from the PC into the FX3 and renders anything connected to the USB hub the FX3 is connected to inoperable until the PC is rebooted. In both cases, same firmware, software, driver version, etc. is used. The following is the function call in the FX3 firmware that causes the issue.
CyU3PReturnStatus_t BulkByteTransfer(uint16_t numBytes, uint16_t bytesPerCapture)
{
CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
uint16_t loopCounter = 0;
uint8_t buffValue;
uint8_t *bufPntr;
uint8_t TxBuffer[2];
uint32_t transferStatus = 0;
PinWaitType waitType = LowToHigh;
//Transfer in data via ChannelFromPC
ManualDMABuffer.buffer = BulkBuffer;
ManualDMABuffer.size = 12288;
ManualDMABuffer.count = numBytes;
//ManualDMABuffer.status = 0;
status = CyU3PDmaChannelSetupRecvBuffer(&ChannelFromPC, &ManualDMABuffer);
//Wait for the DMA channel to finish (20ms timeout)
while(transferStatus != CY_U3P_DMA_CB_RECV_CPLT && loopCounter < 4)
{
CyU3PEventGet(&(ChannelFromPC.flags), CY_U3P_DMA_CB_RECV_CPLT, CYU3P_EVENT_OR, &transferStatus, 5);
loopCounter++;
}
//Reset the DMA channel
CyU3PDmaChannelReset(&ChannelFromPC);
//Set the bytesPerCapture depending on DrActive
if(!DrActive)
{
bytesPerCapture = numBytes;
}
else
{
//Set the transition type depending on the DrPolarity
if(DrPolarity)
{
waitType = LowToHigh;
}
else
{
waitType = HighToLow;
}
}
//Loop through rest of the transfers
bufPntr = BulkBuffer;
loopCounter = 0;
while(loopCounter < numBytes)
{
//Wait for data ready if needed and run through one set of registers
if(DrActive)
{
WaitForPin(dataReadyPin, waitType);
}
//For first transfer don't read back
if(BulkBuffer[loopCounter] & 0x80)
{
//Case of a SPI write
TxBuffer[0] = BulkBuffer[loopCounter];
TxBuffer[1] = BulkBuffer[loopCounter + 1];
CyU3PSpiTransmitWords(TxBuffer, 2);
BulkBuffer[loopCounter] = 0;
BulkBuffer[loopCounter + 1] = 0;
}
else
{
//Case of a SPI read
TxBuffer[0] = BulkBuffer[loopCounter];
TxBuffer[1] = 0;
CyU3PSpiTransmitWords(TxBuffer, 2);
}
loopCounter+=2;
WaitForTimerTicks(stallTime);
//Loop through rest of the reads
while(loopCounter < bytesPerCapture)
{
//Get the value out of the bulk buffer
buffValue = BulkBuffer[loopCounter];
if(buffValue & 0x80)
{
//If its a write command, perform write
//perform SPI write
TxBuffer[0] = buffValue;
TxBuffer[1] = BulkBuffer[loopCounter + 1];
CyU3PSpiTransmitWords(TxBuffer, 2);
//Store 0 in the Bulk Buffer
BulkBuffer[loopCounter] = 0;
BulkBuffer[loopCounter + 1] = 0;
}
else
{
//If it's a read command, perform SPI read and write and store value in bulk buffer
TxBuffer[0] = buffValue;
TxBuffer[1] = 0;
CyU3PSpiTransferWords(TxBuffer, 2, bufPntr, 2);
}
bufPntr += 2;
loopCounter += 2;
WaitForTimerTicks(stallTime);
}
//Receive the last two bytes
if(buffValue & 0x80)
{
BulkBuffer[loopCounter] = 0;
BulkBuffer[loopCounter + 1] = 0;
}
else
{
CyU3PSpiReceiveWords(bufPntr, 2);
}
//Increment loop counter
loopCounter += 2;
}
//Send the data back over ChannelToPC
status = CyU3PDmaChannelSetupSendBuffer(&ChannelToPC, &ManualDMABuffer);
return status;
}
I've attempted to disable USB SS mode since the Windows 7 PC's we've used for testing all don't have 3.0 capability, but haven't noticed a difference. Has anyone run into an issue like this? We're also noticing that on certain machines, even though they're running Windows 7, if they have a USB 3.0 controller present in Device Manager the code shown above will work correctly.
Thanks!
Show LessHello,
could i use FX3 @ 2.8 V instead of 3.3 V?
i would to use as0260 image sensor without transceivers.
This is a problem?
Best regards,
france
Show LessI installed FX3 ez-usb today (1.3.4) and began using it. I was able to open a project (e-con's CX3 evaluation module) and compile it without any problems.
I then created a new empty project and copied their CX3 source code to it. Upon trying to compile it, I get this error:
13:01:45 **** Incremental Build of configuration Debug for project aj-13-00283 Dual Pi-Spy Camera for aj-02-00279 ****
make all
Cannot run program "make" (in directory "D:\Optel\Dual-Camera Firmware\Debug"): CreateProcess error=216, This version of %1 is not compatible with the version of Windows you're running. Check your computer's system information and then contact the software publisher
13:01:45 Build Finished (took 12ms)
I have since done a "repair", an uninstall and reinstall. Still getting the same error.
Any thoughts?
Thanks,
Scott
Show LessHi all,
I'm evaluating the connection between some image sensor and CX3.
And I'd like to know how CX3 treats MIPI embedded data.
But I couldn't find the any description about it on CX3 API guide.
Is the data ignored or received as usual image data line ?
Thanks,
Koji
Show LessI'm using FX3 to transfer data from FPGA to USB host via GPIF and encounter some problems with data transfer.
Hope someone could tell me what to do to identify the cause or give me any advice to prevent the situation.
I use a two-socket DMA channel with AUTO_MANY_TO_ONE type and every address has 6 16-KB buffer.
Input are address 0 and 1 of GPIF and output is usb port.
GPIF is configured for 32-bit data buses and input clock is 99MHz.
After data transferring for a while, data packets received by PC and hardware USB analyzer would be wrong .
The length of the time before it happens is random.
Once the data is wrong, the situation would last.
The following are 2 situations of wrong data.
1.Input data at address 0 of GPIF :55 33 56 4C 00 00 34 00 22 E8 00 00……
but data that hardware USB analyzer and USB host receive become
75 75 76 76 77 77 78 78 00 00 70 68 55 33 56 4C 00 00 34 00 22 E8 00 00 …
There are some unknown data appearing in the front of the data I input.
I have checked every byte of dma buffer memory continuously to see if unique header "55 33 56 4C" is written at wrong memory address.
But the header data are always written at the head of every dma buffer without offset and unexpected data.
2.The order of data I sent to GPIF was
address 0 data A
address 1 data B
address 0 data C
but the order of data received by USB analyzer is NOT data A ->B ->C
Configuration of Dma channel and GPIF
muldmaCfg.size = (16 * 1024); muldmaCfg.count = 6; muldmaCfg.validSckCount = 2; muldmaCfg.prodSckId[0] = (CyU3PDmaSocketId_t)CY_U3P_PIB_SOCKET_0; muldmaCfg.prodSckId[1] = (CyU3PDmaSocketId_t)CY_U3P_PIB_SOCKET_1; muldmaCfg.consSckId[0] = (CyU3PDmaSocketId_t)(CY_U3P_UIB_SOCKET_CONS_3); muldmaCfg.dmaMode = CY_U3P_DMA_MODE_BYTE; muldmaCfg.notification = 0; muldmaCfg.cb = 0; muldmaCfg.prodHeader = 0; muldmaCfg.prodFooter = 0; muldmaCfg.consHeader = 0; muldmaCfg.prodAvailCount = 0; CyU3PDmaMultiChannelCreate(&G_DmaChHandle, CY_U3P_DMA_TYPE_AUTO_MANY_TO_ONE, &muldmaCfg); CyU3PDmaMultiChannelSetXfer(&G_DmaChHandle, 0, 0); pibClock.clkDiv = 2; pibClock.clkSrc = CY_U3P_SYS_CLK; pibClock.isHalfDiv = CyFalse; pibClock.isDllEnable= CyFalse; CyU3PPibInit(CyTrue, &pibClock); CyU3PGpifLoad(&CyFxGpifConfig); CyU3PGpifSocketConfigure(0, CY_U3P_PIB_SOCKET_0, 6, CyFalse, 1); CyU3PGpifSocketConfigure(1, CY_U3P_PIB_SOCKET_1, 6, CyFalse, 1); CyU3PGpifSMStart(RESET, ALPHA_RESET); |
GPIF state machine:
Show Less