USB superspeed peripherals Forum Discussions
I am using FX3 implement a test, The transfer like below:
PC(HOST) ←→ FX3 ← Async SRAM interface(80Mhz) → MCU(STM32)
Here are what I did. Refer AN76405 9.1.8 to write and read to FX3.
1. Use the example from SDK 1.3. slavefifo_examples/slfifoasync
2. Set async SRAM interface from GPIFII Designer. Every set is default then build it. rename to gpif2sram.h
3. Modify some content in cyfxslfifoasync.c to replace cyfxgpif_asyncsf.h. Also can check my the attach.
4. And build the example finally. I only got one warning message warning: sh_link not set for section `.ARM.exidx' without any error.
5. I use CyControl.exe to send bulk to my MCU. It work fine with short data. under 1KB. When I start send 16KB, it will fail at large data transfer (over 16KB).
I also found something. My MCU check PP_DMA_XFER in the time(DMA_READY not polling right) which value is always 0x0253. According to reference manual, DMA_BUSY is always set?
I also check UART_TX, the message's change like below:
Data tracker: buffers received: 0, buffers sent: 0.
↓transfer 2KB data
Data tracker: buffers received: 2, buffers sent: 0.
↓transfer 2KB data
Data tracker: buffers received: 4, buffers sent: 0.
↓transfer 16KB data
Data tracker: buffers received: 10, buffers sent: 0.//CyControl.exe shoe error code 997
If function is work. it would have to show 20 not 10.
Could anyone can help to give some clue for me?
Show LessI2C EEPROM (AT24CM01) for boot is connected to Cyusb3014, PMODE is changed, and USB boot and I2C boot are used depending on the situation.I want to change the I2C Boot EEPROM Address from 0xA0 to 0xA8 or 0xA4. Can you tell me if this is possible and if so, how to do it?
Show Less
I'm currently working on a project that sets up a UVC video stream using the FX3. When the device is plugged into a host directly, it works absolutely wonderfully, but when it is connected through a USB hub with other devices it will stall and stop streaming video.
When trying to inspect the transfer through wireshark or ffmpeg, it seems as if the device just stops sending UVC packets to the host despite the host still asking for them.
The DMA is set up as a multi channel auto many to one.
Thank you!
Show LessHi,
I have developed an own PCB design based on Denebola development kit. Whit the following differences:
- the SPI FLASH, which is used to store the firmware image, is supplied by 1.8V. Because I have replaced the 3.3V domain by 1.8 V.
- The boot mode is fixed to start always as SPI mode. But I can also start in USB boot mode in order to update the firmware embedded in SPI FLASH memory.
My own design works correctly if I supply the firmware through USB boot mode, I mean, in this case, I program the CX3 through RAM using the USB Control Center, embedded in the Cypress EZ USB Suite.
But I have detected an issue, also in my own design, When I try to supply the firmware from the SPI FLASH. Because I can store the firmware in the SPI Flash and the USB Control Center does not show me any warning.
The error appear when the CX3 has to get the firmware from the SPI FLASH, since he can't do it.
For this reason I have compared, in both Denebola and own design, the writing and reading of the firmware image between the CX3 and SPI FLASH. To do this, I have used an oscilloscope and a logic analyzer in order to be sure of the results.
I have attached the results, and as you can see. The writing process of the firmware image is exactly the same in both denebola and own design. I mean, I have registered the same writing values in the SPI FLASH.
But in the reading process from the SPI FLASH, my own design does not send the same values. Because I detect some corrupt values in dataframe.
So my question is the next:
It is possible that the memory problem is preceded by the high reflow temperature in the soldering process?.
The memory Cypress model S25FS064S, so, could you tell me please the maximum solder temperature of the device, because it is not appear in the datasheet?.
Thanks.
Show LessHi,
I need to use spritf with the demo cyfxusbdebug, but it doest compile::
tanureal@archtower $ make
make[1]: Entering directory '/media/workspace/usb_lessons/src'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): in function `_sbrk_r':
sbrkr.c:(.text._sbrk_r+0x18): undefined reference to `_sbrk'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-abort.o): in function `abort':
abort.c:(.text.abort+0x10): undefined reference to `_exit'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-signalr.o): in function `_kill_r':
signalr.c:(.text._kill_r+0x20): undefined reference to `_kill'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-signalr.o): in function `_getpid_r':
signalr.c:(.text._getpid_r+0x4): undefined reference to `_getpid'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-writer.o): in function `_write_r':
writer.c:(.text._write_r+0x28): undefined reference to `_write'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-closer.o): in function `_close_r':
closer.c:(.text._close_r+0x18): undefined reference to `_close'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-fstatr.o): in function `_fstat_r':
fstatr.c:(.text._fstat_r+0x20): undefined reference to `_fstat'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-isattyr.o): in function `_isatty_r':
isattyr.c:(.text._isatty_r+0x18): undefined reference to `_isatty'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-lseekr.o): in function `_lseek_r':
lseekr.c:(.text._lseek_r+0x28): undefined reference to `_lseek'
arm-none-eabi-ld: /opt/gcc-arm-none-eabi-9-2020-q2-update/arm-none-eabi/lib/libc.a(lib_a-readr.o): in function `_read_r':
readr.c:(.text._read_r+0x28): undefined reference to `_read'
make[1]: *** [makefile:48: main.elf] Error 1
make[1]: Leaving directory '/media/workspace/usb_lessons/src'
make: *** [makefile:2: all] Error 2
I can see the answer Using sprint() Function in EZ-USB® FX3™ - KBA90264 , but it only works for CPP applications, not plain C.
Only the GNU Linker for C++ applications has __heap_start and __heap_end definitions.
How Can I enable the use of libc functions into my plain C firmware?
Show LessI would like confirmation of the behavior of a standalone DMA_RDY_TH* event within the transition equation of a GPIF II state machine. What I mean is that when the from and to states of the DMA_RDY_TH* event does not have any actions, what is the behavior of this event? I ask because after looking through the documentations, especially "7.11 GPIF II State Machine to Read Data into a Socket" in the FX3 technical reference manual where it gives the clearest example of this event, I cannot find anything relating to using this event without any corresponding IN_DATA or DR_DATA action.
For reference, below is the GPIF II state machine and associated DMA channel configuration.
From my own testing, the DMA_RDY_TH0 and DMA_RDY_TH1 are LOW when both DMA buffers of the corresponding producer socket are filled, wrapped up, and committed to the USB consumer. They are HIGH when at least one buffer of the corresponding producer socket is empty and ready to read in data from the PPort data bus. Is my understanding correct? Or is the usage of these events invalid here even though the GPIF II Designer gave no errors or warnings?
CyU3PMemSet((uint8_t *)&dmaMultiConfig, 0, sizeof(dmaMultiConfig));
dmaMultiConfig.size = DMA_BUFFER_SIZE;
dmaMultiConfig.count = DMA_BUFFER_COUNT;
dmaMultiConfig.validSckCount = 2;
dmaMultiConfig.prodSckId[0] = (CyU3PDmaSocketId_t)PING_PRODUCER_SOCKET; // CY_U3P_PIB_SOCKET_0
dmaMultiConfig.prodSckId[1] = (CyU3PDmaSocketId_t)PONG_PRODUCER_SOCKET; // CY_U3P_PIB_SOCKET_1
dmaMultiConfig.consSckId[0] = (CyU3PDmaSocketId_t)CY_FX_EP_CONSUMER_SOCKET; // CY_U3P_UIB_SOCKET_CONS_1
dmaMultiConfig.prodAvailCount = 0;
dmaMultiConfig.prodHeader = 0;
dmaMultiConfig.prodFooter = 0;
dmaMultiConfig.consHeader = 0;
dmaMultiConfig.dmaMode = CY_U3P_DMA_MODE_BYTE;
Status = CyU3PDmaMultiChannelCreate(&glDualGPIF2USB_Handle, CY_U3P_DMA_TYPE_AUTO_MANY_TO_ONE, &dmaMultiConfig);
Thank you
Show LessHello,
According to the CX3 datasheet, the device can load boot images from varios sources. And it is necessary to adjust the configuration of the PMODE pins in order to select each option. In reference to this, in the datasheet there are four boot options (you can see it in the attached figure).
So I have the following question:
What happens if I configure the PMODE pins whit a different configuration, which is not declarated in the datasheet, such as for example: 111, or 011? How will start the device?
Show LessHello,
I am carrying out an own design based on Denebola board. I know that is possible to store the boot image in both : into an SPI Flash memory or into an I2C EEPROM memory.
Denebola board has a single SPI FLASH memory model : M25P40-VMN6TPB. And two I2C EEPROMs models : AT24C1024B-TH-B. [both models are obsolete, by the way].
I am thinking of embedding an I2C EEPROM memory in my own design, in order to store the boot image. And for this reason I have the following questions:
- I assume that the Denebola board has two I2C EEPROMs, because each one has only 1Mb capacity (which is smaller than the firmware image). So for this reason it is necessary to place two of them. But, are there more compatible I2C that can work with CX3? plesase send me the device model
- I have seen the CX 3 bootloader store the boot image in both I2C memories, so what happens if i put a single bigger I2C memory, the bootloader will be able to store the firmware in a single I2C memory, or it is necessary to put two?
Thanks!
Show LessHi support team
I need EZ-USB GX3 Linux driver.
I downloaded it from the following URL, but it was only the source code.
The build fails and the following error occurs.
https://www.cypress.com/documentation/software-and-drivers/ez-usb-gx3-software-and-drivers#res-other
・environment
OS
Tinker Board Debian OS V2.1.11
Linux kernel 4.4.132
・Error
make[1]: *** /lib/modules/4.4.132/build: No such file or directory. Stop.
Please tell me how to avoid the error.
Or can you provide a pre-built driver?
JUNYA
Show LessI have the CYUSB3KIT-003 EZ-USB FX3 SuperSpeed Explorer Kit, and have difficulty merging the different C project solution examples you provide in the SDK ZIP-folder.
I simply want to use the "BootLedBlink" project solution together with the "UsbSpiDmaMode" project solution. I've included the additional paths in Eclipse (compiler + assembler), such that I can use
#include "cyfx3gpio.h"
in my cyfxusbspidmamode.c script file.
When I try to use a function from the header file, ex. "CyFx3BootGpioInit ();", I get an "undefined reference to "CyFx3BootGpioInit" error:
I am completely new to all this setup, but I have had no luck trying to find a solution. Several Google results discuss the makefile, and incorrect referencing.
Below You can see I've used both path references:
Hope its an easy fix!
-Soren
Show Less