USB superspeed peripherals Forum Discussions
I am trying to make use of the 1.3.5 library that is indicated to help with the DMA engine (KBA218830). I have the file, libcyfxapi.a, that has a possible fix. Where do I place it, and how do I get the SDK to use it for the Application?
Show LessHi,
we want to integrate UVC and CDC Driver into Android for receiving/ sending button inputs from/to OV5640 + Denabola board. If you have any source code available, please let us know...thanks...
Show LessI recently purchased the CYUSB3KIT-003 board and the MGSG-CIS-S6-FX3CON board.
I am trying to test using AN75779 (How to implement an image sensor interface using EZ-USB™ FX3 in a USB Video Class (UVC) framework)
By the way,
While looking at the CYUSB3KIT-003 SuperSpeed Explorer Kit User Guide, a problem occurred in 2.SOFTWARE INSTALLATION on page 11.
Could not download SDK. (EZ-USB™ FX3 Software Development Kit)
Show LessIn a customer design, our FX3 is configured to boot from I2C EEPROM, with USB fall-back.
We are looking into a way of updating the firmware remotely and have implemented a command to over USB be able to invalidate the EEPROM. After resetting (over USB) the device, it then boots into bootlaoder mode and we can flash a new firmware into the I2C EEPROM using the Control Center. But the last step is missing ... to get the new firmware started, the FX3 has to be hard reset (with the reset button) or power cycled. We have no possibilities to do that remotely.
Is there a way of resetting the device over USB, after writing the I2C EEPROM?
The "reset button " in the control center does not seem to do that ...
The Control Center documentation indicate some possibilies, but we have not really figured out what is ment:
"please reset your device or follow the device specification to boot from the I2C E2PROM"
Show Less
I've been trying to implement a SPI interface on FX3 in order to reprogram a flash IC driving an FPGA, similar to the implementation described in AN84868 . I've been able to read from and write to the flash chip when I load slightly modified* versions of the USBFlashProg and UsbSpiDmaMode examples into RAM, but if I build the same code as an I2C image and load it onto the FX3's I2C boot EEPROM, the FX3 crashes and returns nothing but code 997 as soon as I make a SPI request.
Things I've already tried:
1) All three available speeds, 64k and 128k I2C sizes in elf2img.exe's -i2cconf argument. Of the settings that could be successfully programmed to the I2C EEPROM, none of them had any discernible effect
2) Performing a SPI read operation while the SPI mux select pin* is pulled low; this doesn't cause a crash, but the data returned is all zeroes (for obvious reasons)
3) Changing the DMA timeout value from 0xFFFFFFFF to 0x00004000 -- no effect at all
4) Checking SPI busy status before performing a SPI read operation -- the check busy status command also crashed the FX3.
5) Using I2C in register mode instead of using DMA -- no effect
6) Commenting out all of the "if (status != CY_U3P_SUCCESS) {return status;}" statements -- no effect
7) disabling and reinitializing SPI and I2C before making any SPI requests -- no errors were returned during DeInit and Init calls for I2C and SPI, but the crash happened as soon as I made a SPI request
8 ) Commenting all I2C functions out and setting io_cfg.useI2C to CyFalse.
I'm out of ideas. I can't think of any reason that booting from I2C should have any impact on SPI operation in a way that wouldn't be solved by one of the things I tried. Has anyone else encountered anything like this?
* An external mux select needs to be pulled high to give the FX3 access to the SPI flash IC, but it's driven from a GPIO so I just use CyU3PSetSimpleConfig() with .outValue set to CyTrue.
EDIT: I was able to capture oscilloscope readings on the MOSI trace between the FX3 and the SPI flash. Here's a capture of a CY_FX_RQT_SPI_FLASH_ERASE_POLL when the image is loaded via RAM:
and here's the same command running the exact same image booting from I2C:
I've seen this happen on every command -- if the FX3 was booted from I2C, the MOSI line has a lower-voltage "echo" after each pulse. Additionally, there is no activity at all on the MISO line after booting from I2C no matter what commands are sent.
When a SPI read request is made after booting from I2C, the FX3 continually broadcasts the same pulse and echo until power is removed, suggesting that the crash is happening because the FX3 is stuck in a loop attempting to make contact with the SPI flash IC. However, setting a timeout in the SPI configuration settings does not fix this issue.
Show LessHi there
As subject,
I wanna know does/will CX3 support USB3 Vision?
Currently found FX3 does.
Thanks
There are a few old forum posts about spi writes not working with 1.3.4.
I've been using the recompiled libcyu3lpp.a file to work around the issue. My question is, is there a better solution? A way that we don't have to patch the sdk to fix the issue? Why hasn't this been fixed and a new sdk released?
Show LessDear Community,
I plan to design a custom HDMI 4K capture card based on EZ-USB™ SX3 HDMI 4K Capture Card Solution Demo Kit, but it seems that I cannot find where I could purchase IT6801FN. Do you have any suggestion for replacement, please ?
Best Regards,
Khang
Hi!
I'm trying to establish communication between an FPGA and the FX3 chip via I2C. I have weird problem with I2C in DMA mode - it doesn't work, but I2C bus signal captured with FPGA logic analyzer are completely ok.
For example, when I'm doing read, FX3 transmits the preamble, all the ACKs and NACK are in place as well as start/stop conditions. It can be seen from the screenshot of data, captured by the logic analyzer. The device has 7-bit address 0x7F, register address is 32-bit wide (it's 0x00000000) and data is also 32-bit wide (it's also 0x00000000).
The problem is that the data received doesn't get into the DMA buffer. Here is the code fragment which implements I2C read (I2C_usb.c) and where CyU3PDmaChannelWaitForCompletion() returns with "timed out" error at the end:
if (isRead)
{
/* Update the preamble information. */
preamble.length = 6;
preamble.buffer[0] = devAddr<<1;
preamble.buffer[1] = (uint8_t)(byteAddress >> 24);
preamble.buffer[2] = (uint8_t)(byteAddress >> 16);
preamble.buffer[3] = (uint8_t)(byteAddress >> 8);
preamble.buffer[4] = (uint8_t)(byteAddress & 0xFF);
preamble.buffer[5] = ((devAddr<<1) | 0x01);
preamble.ctrlMask = 1<<4;
buf_p.size = buffSize;
buf_p.count = byteCount;
I2CStatusDbugPrint();
status = CyU3PI2cSendCommand (&preamble, byteCount, CyTrue);
CyU3PDebugPrint (6, "CyU3PI2cSendCommand call%d\n\r");
I2CStatusDbugPrint();
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (6, "I2C read failed at CyU3PI2cSendCommand, status %d\n\r", status);
return status;
}
status = CyU3PDmaChannelSetupRecvBuffer (&glI2cRxHandle, &buf_p);
CyU3PDebugPrint (6, "CyU3PDmaChannelSetupRecvBuffer call\n\r");
I2CStatusDbugPrint();
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (6, "I2C read failed at CyU3PDmaChannelSetupRecvBuffer, status %d\n\r", status);
return status;
}
status = CyU3PDmaChannelWaitForCompletion(&glI2cRxHandle,
CY_FX_USB_I2C_TIMEOUT);
CyU3PDebugPrint (6, "CyU3PDmaChannelWaitForCompletion call\n\r");
I2CStatusDbugPrint();
if (status != CY_U3P_SUCCESS)
{
CyU3PDebugPrint (6, "I2C read failed at CyU3PDmaChannelWaitForCompletion, status %d\n\r", status);
return status;
}
Also, I printed out I2C registers content after every I2C related function call. Please find full output (debug_log.txt) in the attachment. Here is the final log fragment after call of the CyU3PDmaChannelWaitForCompletion() function:
▒▒'CyU3PDmaChannelWaitForCompletion call
▒▒I2C registers
▒▒Bytes transferred 0
▒▒Byte count 4
▒▒Clock low count 0
▒▒Socket 0x502
▒▒Power 0x80000001
▒▒Command 0x100000E6
▒▒Config 0x80000001
▒▒Status 0xCF000000
▒▒Preamble data0 0xFE
▒▒reamble data1 0xFF00
▒▒Preamble ctrl 0x10
▒▒DMA timeout 65535
▒▒Timeout -1
▒▒@I2C read failed at CyU3PDmaChannelWaitForCompletion, status 69
There are no errors, the preamble is valid, and It looks like I2C module didn't see any incoming data. Also, it looks suspicious for me that I2C_CLOCK_LOW_COUNT is 0 since it should indicate something because I2C_CLK had been toggling during preamble transmission at least.
Please find my project files attached. I2C related code is located in the I2C_usb.c file.
Show LessHello,
There have been a few mentions in the forum that the FX3 and CX3 sys_clks are at a set frequency of 403.2 Mhz.
I wanted to double-check this applied when using 19.2Mhz Reference and that the PLL_Clk != Sys_Clk. Also, are there settings to modify the Sys_clk (similar to PLL_Clk) - I want to check we haven't changed these.
Kind regards,
Det
Show Less