USB superspeed peripherals Forum Discussions
Hello Cypress!
This is a continuation of an issue from: FX3 emmc unreachable after format in manual
The FX3 does not allow the drive to be formatted when set to manual, this is a big issue since we want to encrypt data as it is passed through. The drive becomes unrecognizable after this process, after trying it once, failing, then trying again, the drive does appear as "raw" in device manager, but it is still not format-able. Is there an additional call back that must be added? Please note when firmware is written and the drive is formatted under auto, then reset back to manual, files can be written and read like normal, it is just when trying to format the drive in manual that this fails.
I apologize I can't seem to post a reply to the previous thread so creating a new one. I have tested this on a different FX3 with a different flash chip and the issue persists. Please see the attached project file which is a very slightly modified version of the MSC example and these videos, to find the places where changes were made in the zip, search for the define "Manual_MSC". It is used in 3 places.
Video of failure to format to FAT with explorer, succeeding when switched back to auto mode, then failing again when trying to format in NTFS, and explorer crashed at the end too...
https://drive.google.com/file/d/10jToAssyamGRbILLY7TkheYB-1YNGdFD/view?usp=sharing
Video of formatting drive with device manager, FX3 just stopped working at the end, it was still connected.
https://drive.google.com/file/d/1dZg9Mp7ySYX7QscVTuNORb6bXTlYEx4C/view?usp=sharing
I have also tried other formatting tools and this still fails.
Is there a call back that is missing in: CyFxMscApplnDmaCb? Or is there a response that is meant to be added to CyFxMscApplnUSBSetupCB?
Regards!
Fujimi
Show LessI have a USB peripheral device that utilizes the FX3's GPIF, USB, I2C, SPI, GPIO, and UART. The FX3 needs to always have USB, I2C, and GPIO's functional. In 32-bit DQ GPIF, the UART is enabled, but the SPI is disabled. On the other hand, in 16-bit DQ GPIF, the UART is disabled, but SPI is enabled.
I need to be able to switch back and forth between 16 and 32-bit GPIF during runtime. What are the steps I need to accomplish this runtime reconfiguration? I have read that I, at least, need to do GpifDisable(...) and then GpifLoad(...) with the proper GPIF settings. By doing this, would the other modules (USB, I2C, GPIO, UART, etc.) be affected, and need to be reinitialized during the GPIF reconfiguration?
Show Less
Hi,
I used FX3 to implement three compound devices, namely UVC, UAC, CDC, UVC in bulk or ISO mode, and UAC in ISO mode. Both UVC and UAC application threads send data to host, with the following two problems:
(1)FX3 uvc device sends two different frames of 1080P 30fps data, and windows10 camera shows a long time to switch between two frames of uvc data;
(2) When FX3 UVC sends data, the audio of UAC cannot be enrolled through Windows10 recorder;
Show LessHi,
Let me know how to re-program after the first programming F/W to SPI-Flash without re-configuration of PMODE[2:0] pin.
The FX3 boot option is set SPI boot(PMODE[2:0]=0F1), In prototype model, these pins are removed from the PCB board.
I suppose it would be solved, if FX3 can boot forcing USB boot mode in any conditions.
programing application is “cypress control center”.
Regards,
Nagata
Show LessHello,
CYUSB2014 is a high speed device in the FX3 family. I am trying to use UVC_AN75779 example code. However I am not sure, what libraries to use or to change since the code is for superspeed device but CYUSB2014 is high speed. This is my first experience with FX3 family, so any guidance will be much appreciated.
Show LessI have designed a camera board usb cyusb3014,it can download and work correctly under usb2.0,but can not work under usb3.0,or it can not connect to the host computer。I have looked up some same cases via the internet but there is not a solution,i think it is not a hardware problem。expect your reply!!!
Show Less
Hi everybody,
I created an interrupt endpoint IN and its DMA channel OUT to send a small buffer of data. The problem is that when I try to transfer some data with the Control Centre the error "INTERRUPT IN transfer failed with Error Code:997" appears.
I checked and the buffer gets filled, the problem is apparently during the transfer. Does anybody know how to help me?
Thanks,
Linda
Hello,
According to the Application Note AN70707, it is recommanded to use 22Ω series terminaison resistor on GPIF lines.
1) Does this only apply to DQs? Or does this apply to DQs and CTLs?
2) In the context of the miniaturization of the PCB, I was wondering if it would be possible to remove these resistors. Especially if we use a "low" frequency (between 1MHz and 10MHz) instead of the maximum allowed frequency (100MHz). Can we dispense with these resistors at low frequencies? Or are they strongly recommended whatever the frequency used?
Thank you.
Jean.
Show LessI have been testing out various configurations of the FX3 and CyUSB driver to optimize throughput, and I've found something I don't fully understand.
First I installed the modified driver here to enable 32MB buffer sizes on Windows 10: https://community.cypress.com/t5/USB-Superspeed-Peripherals/Maximum-transfer-size-for-BeginDataXfer-FinishDataXfer-with-bulk/m-p/138780
Then I set up a GPIF firmware that grabs 32 bit samples at 80 MHz continually using an external function generator as clock. DMA transfers were configured with 2 threads, each having 2 buffers holding 13 1024 byte USB packets. I then stream data across the USB bus to a Windows 10 host using different buffer sizes and the async API in CyUSB. To make sure my software doesn't influence throughput, all buffers are posted to the driver before the transfer starts and the software immediately discards buffers to minimize CPU load. After the transfer I check how many times the overflow flag was asserted and how much data was actually transferred.
I expected that smaller buffers should have more overhead and that larger would be slightly better. When I tested it however, I found that larger buffers seem to have lower throughput. For example:
832 MB using 64 individual 13MB buffers:
Configuring FX3 acquisition with parameters:
Samples per trigger: 6656 (26624 bytes)
Number of triggers: 32768
Total acquisition size: 872415232 bytes (832 MB)
CYUSB bufferSize: 13631488 (40.625001 percent of max), 13312.000000 USB packets (32 total buffers)
Total CYUSB buffers per acquisition: 64 (512.000000 triggers per buffer)
0: Got 13631488 bytes (512.000000 triggers) with buffer 0 (0.000000)!
...
63: Got 13631488 bytes (512.000000 triggers) with buffer 32256 (63.000000)!
Overflows: 0
Total FX3 DMA transfers Produced: 16384
acquisition succeeded!
After 10 repetitions, not a single overflow and all data is accounted for.
832 MB using 32 individual 26MB buffers:
Configuring FX3 acquisition with parameters:
Samples per trigger: 6656 (26624 bytes)
Number of triggers: 32768
Total acquisition size: 872415232 bytes (832 MB)
CYUSB bufferSize: 27262976 (81.250002 percent of max), 26624.000000 USB packets (32 total buffers)
Total CYUSB buffers per acquisition: 32 (1024.000000 triggers per buffer)
Beginning Transfer...
0: Got 27262976 bytes (1024.000000 triggers) with buffer 0 (0.000000)!
...
30: Got 27262976 bytes (1024.000000 triggers) with buffer 30720 (30.000000)!
WaitForXfer failed!
Overflows: 198
Total FX3 DMA transfers Produced: 16336
ERROR: requested 872415232 bytes but got 845152256 bytes!
acquisition failed!
After 10 repetitions, not a single one was able to do the whole transfer without 160-200 overflows.
Since the data rate is identical in both cases, and all host-side buffers are preallocated, I am surprised that there is such a large difference in throughput. I did some more testing, and it seems that buffers above about 16 MB begin to have overflows, and the number of overflows per second increases as the buffer size increases. What is the functional difference between a 10 or 15 MB buffer and a 20 or 30MB buffer? I had thought that 1024 byte USB packets are simply being written sequentially into the buffer, but maybe I am missing something about how the driver works?
Show LessHello,
I am trying to integrate some custom vendor requests and I am looking for a method to respond to these requests, but on a separate endpoint from EP0. I know that CyU3PUsbSendEP0Data() exists for responding on the EP0 endpoint, but I am looking for the ability to send a response to a different endpoint in addition. For instance, sending data to an interrupt endpoint I have defined, or potentially even over GPIF?
Is there anything put in place for this already, or is there a recommended approach for doing this?
Thanks in advance.
Show Less