I have a basic setup working great with the FX3 when operating in synchronous master mode with internal clock settings. But, my data source always has the clock running from the start, so PCLK is always receiving a clock and data.
GPIF Settings:
(Master/Slave) Either causes crash
(Synchronous)
(External Clock)
The moment the GPIF bus is loaded, the processor freezes. Sometimes it gets as far as calling a `CYU3P_PIB_INTR_DLL_UPDATE` before freezing. It's always after load. I've tried springboarding into a loop of DATA_IN that doesn't actually write the data but nothing I do seems to prevent the device from freezing except discontinuing the clock.
Is there a way to suppress the PCLK pin until everything else is setup and ready to roll, like the state machine is started? Or anything else I can do to prevent the chip from seizing up when unsolicited data is flowing in?
BTW - as soon as I switch around to internal clock writing out, everything works 100% as expected.
Show LessHello,
We are working on a MFi (Made For iPhone) product that is embedding during the development phase a Cypress CYUSB3KIT-003 EZ-USB® FX3™ SuperSpeed Explorer Kit (https://www.cypress.com/documentation/development-kitsboards/cyusb3kit-003-ez-usb-fx3-superspeed-exp...). Our final product will use the FX3 chip. We are interested in discussing about your product CY8CKIT-033A PSoC® 3 MFi (Made for iPod® | iPhone® | iPad®) Digital Audio Development Kit for Lightning™ (https://www.cypress.com/documentation/development-kitsboards/cy8ckit-033a-psoc-3-mfi-made-ipod-iphone-ipad-digital-audio) and how you are handling IAP2 protocol on this board.
Thank you for your answer and have a nice day.
Best regards,
François Delaplace
Hi,
When my system reboots , it can't find FX3 in linux(I don't have this problem in windows).
I get "No device found", when I run cyusb_linux . (J4 is on). In linux, Fx3 needs to replug after reboot and then I can use it.
I attached the result of lsusb -t before repluging
Thanks
Show Less
Hello,
I would like to put the XRST pin in high with the following function: CyU3PMipicsiSetSensorControl (CY_U3P_CSI_IO_XRES, CyTrue); but when I call any function that contains Mipi I get the following error:
Does anyone have any idea why? thank you
Show Less
hello all.
I'm a newbie so my question might sound trivial.
I'm trying to get my ARM-USB-TINY-H to debug through jtag a cypress FX3 on a custom board.
I've succeeded to flash out an example to the FX3 using the USB3 connection, but it doesn't have debug capabilities.
can anyone point me to the right direction on how to get it to work?
Show LessHello, I want to read the deserializer register but it is not working, can someone to help me? Thank you. With I2C_SLAVE_ADDRESS (0xA0u) is working fine but with deserializer adres (0xA4u)it is not.
/*
## Cypress FX3 Boot Firmware Example Source file (main.c)
## ===========================
##
## Copyright Cypress Semiconductor Corporation, 2011-2012,
## All Rights Reserved
## UNPUBLISHED, LICENSED SOFTWARE.
##
## CONFIDENTIAL AND PROPRIETARY INFORMATION
## WHICH IS THE PROPERTY OF CYPRESS.
##
## Use of this file is governed
## by the license agreement included in the file
##
## <install>/license/license.txt
##
## where <install> is the Cypress software
## installation root directory path.
##
## ===========================
*/
#include "cyfx3device.h"
#include "cyfx3utils.h"
#include "cyfx3gpio.h"
#include "defines.h"
#include "cyfx3i2c.h"
/* Code to read and boot FX3 firmware from I2C EEPROM. */
#define I2C_BUS_TIMEOUT_VALUE (0xFFFFFFFFu)
#define I2C_DMA_TIMEOUT_VALUE (0xFFFFu)
#define I2C_FREQUENCY (400000u)
#define I2C_SLAVE_ADDRESS (0xA0u)
#define I2C_SLAVE_ADDRESS_MAXIM_DES (0xA4u)
#define I2C_SLAVE_ADDRESS_TI_DES (0x60u)
//#define I2C_SLAVE_ADDRESS (0x50)
#define I2C_CMD_WRITE (0)
#define I2C_CMD_READ (1)
#define I2C_START_BYTE2 (0x0004)
#define I2C_RETRY_CNT (2)
#define FW_HEADER_SIZE (4)
#define SECTION_HEADER_SIZE (8)
#define I2C_SLAVE_SPACE (0x10000)
#define GET_BYTE0(addr) ((uint8_t)((addr) & 0xFF))
#define GET_BYTE1(addr) ((uint8_t)(((addr) >> 😎 & 0xFF))
static uint8_t gI2cSlaveAddr = 0;
static uint32_t gI2cByteAddr = 0;
static uint32_t gReadBuf[4]= {0xFF, 0xFF, 0xFF, 0xFF};
static uint8_t gWriteBuf[4] = {1, 2, 3, 4};
/****************************************************************************
* main:
****************************************************************************/
CyBool_t I2c_Write (void)
{
CyFx3BootErrorCode_t status;
CyFx3BootI2cConfig_t i2cConfig;
CyFx3BootI2cPreamble_t preamble;
uint8_t *wd_buf = (uint8_t *)gWriteBuf;
status = CyFx3BootI2cInit ();
if (status != CY_FX3_BOOT_SUCCESS)
return CyFalse;
i2cConfig.busTimeout = I2C_BUS_TIMEOUT_VALUE;
i2cConfig.dmaTimeout = I2C_DMA_TIMEOUT_VALUE;
i2cConfig.isDma = CyFalse;
i2cConfig.bitRate = I2C_FREQUENCY;
status = CyFx3BootI2cSetConfig (&i2cConfig);
if (status != CY_FX3_BOOT_SUCCESS)
return CyFalse;
preamble.buffer[0] = I2C_SLAVE_ADDRESS | I2C_CMD_WRITE;
preamble.buffer[1] = 0x10;
preamble.buffer[2] = 0x00;
preamble.length = 3;
preamble.ctrlMask = 0;
status = CyFx3BootI2cTransmitBytes(&preamble, wd_buf, FW_HEADER_SIZE, I2C_RETRY_CNT);
if (status == CY_FX3_BOOT_SUCCESS)
{
return CyTrue;
}
return CyFalse;
}
CyBool_t I2c_Read (void)
{
CyFx3BootErrorCode_t status;
CyFx3BootI2cConfig_t i2cConfig;
CyFx3BootI2cPreamble_t preamble;
uint8_t *rd_buf = (uint8_t *)gReadBuf;
status = CyFx3BootI2cInit ();
if (status != CY_FX3_BOOT_SUCCESS)
return CyFalse;
status = CyU3PI2cInit ();
if (status != CY_FX3_BOOT_SUCCESS)
{
return status;
}
CyU3PMemSet ((uint8_t *)&i2cConfig, 0, sizeof(i2cConfig));
i2cConfig.busTimeout = I2C_BUS_TIMEOUT_VALUE;
i2cConfig.dmaTimeout = I2C_DMA_TIMEOUT_VALUE;
i2cConfig.isDma = CyFalse;
i2cConfig.bitRate = I2C_FREQUENCY;
status = CyFx3BootI2cSetConfig (&i2cConfig);
if (status != CY_FX3_BOOT_SUCCESS)
return CyFalse;
preamble.buffer[3] = I2C_SLAVE_ADDRESS_MAXIM_DES | I2C_CMD_READ;;
preamble.buffer[0] = I2C_SLAVE_ADDRESS_MAXIM_DES | I2C_CMD_WRITE;;
preamble.length = 4;
preamble.ctrlMask = 0x0004;
// Have to wait for approx. 5 ms to ensure that the slave has completed
// writing the data.
CyFx3BootBusyWait (3500);
status = CyFx3BootI2cSendCommand (&preamble, 16, CyTrue);
if (status != CY_FX3_BOOT_SUCCESS)
{
return status;
}
status = CyFx3BootI2cReceiveBytes (&preamble, rd_buf, FW_HEADER_SIZE, I2C_RETRY_CNT);
if (status == CY_FX3_BOOT_SUCCESS)
{
return CyTrue;
}
else
{
return CyFalse;
}
}
int main (void)
{
CyFx3BootErrorCode_t status;
CyFx3BootIoMatrixConfig_t ioCfg;
CyFx3BootGpioSimpleConfig_t gpioConf;
CyBool_t value;
/* HW and SW initialization code */
CyFx3BootDeviceInit (CyTrue);
/* Enable the GPIOs for the LED and the switch. */
ioCfg.isDQ32Bit = CyFalse;
ioCfg.useUart = CyFalse;
ioCfg.useI2C = CyFalse;
ioCfg.useI2S = CyFalse;
ioCfg.useSpi = CyFalse;
ioCfg.gpioSimpleEn[0] = 0;
ioCfg.gpioSimpleEn[1] = (1 << (APP_LED_GPIO1 - 32)) | (1 << (APP_SWITCH_GPIO - 32) | (1 << (APP_LED_GPIO2 - 32)) | (1 << (APP_LED_GPIO3 - 32)) | (1 << (APP_LED_GPIO4 - 32)));
status = CyFx3BootDeviceConfigureIOMatrix (&ioCfg);
if (status != CY_FX3_BOOT_SUCCESS)
{
return status;
}
/* Initialize the GPIO module. */
CyFx3BootGpioInit ();
/* Configure the GPIO for reading the switch input. */
gpioConf.inputEn = CyTrue;
gpioConf.driveLowEn = CyFalse;
gpioConf.driveHighEn = CyFalse;
gpioConf.outValue = CyFalse;
gpioConf.intrMode = CY_FX3_BOOT_GPIO_NO_INTR;
status = CyFx3BootGpioSetSimpleConfig (APP_SWITCH_GPIO, &gpioConf);
if (status != CY_FX3_BOOT_SUCCESS)
return status;
/* Configure the GPIO for driving the LED. */
gpioConf.inputEn = CyFalse;
gpioConf.driveLowEn = CyTrue;
gpioConf.driveHighEn = CyTrue;
gpioConf.outValue = CyFalse;
gpioConf.intrMode = CY_FX3_BOOT_GPIO_NO_INTR;
status = CyFx3BootGpioSetSimpleConfig (APP_LED_GPIO1, &gpioConf);
if (status != CY_FX3_BOOT_SUCCESS)
return status;
status = CyFx3BootGpioSetSimpleConfig (APP_LED_GPIO2, &gpioConf);
if (status != CY_FX3_BOOT_SUCCESS)
return status;
status = CyFx3BootGpioSetSimpleConfig (APP_LED_GPIO3, &gpioConf);
if (status != CY_FX3_BOOT_SUCCESS)
return status;
status = CyFx3BootGpioSetSimpleConfig (APP_LED_GPIO4, &gpioConf);
if (status != CY_FX3_BOOT_SUCCESS)
return status;
/* We keep looping around and copying the state of the SWITCH GPIO onto the LED GPIO. */
// I2c_Write();
// value = I2c_Write();
// value= I2c_Read();
value= I2c_Read();
if (value == CyTrue)
{
CyFx3BootGpioSetValue(APP_LED_GPIO1, CyTrue); // 0 1 1 0
CyFx3BootGpioSetValue(APP_LED_GPIO2, CyFalse);
CyFx3BootGpioSetValue(APP_LED_GPIO3, CyFalse);
CyFx3BootGpioSetValue(APP_LED_GPIO4, CyTrue);
} else
{
CyFx3BootGpioSetValue(APP_LED_GPIO1, CyFalse); // 1 0 0 1
CyFx3BootGpioSetValue(APP_LED_GPIO2, CyTrue);
CyFx3BootGpioSetValue(APP_LED_GPIO3, CyTrue);
CyFx3BootGpioSetValue(APP_LED_GPIO4, CyFalse);
}
return 0;
}
/*[]*/
Show Less
Hello,
For my project, I'm currently using the FX3 (CYUSB3014) and looked into the SPI GPIO bit banging example as reference for the bit banging approach and given my timing requirements, it seems that we would need a delay less than a microsecond in between bits. From the looks of it, the smallest delay that can be used is with the CyU3PBusyWait (1uS). Is it possible to sample the logic levels of the GPIO pin/s with smaller delays and perform bit banging at a faster rate?
Thanks
Show Less
Hi,
I am trying to change the descriptor of usbuart example to access to data in cdc and vendor at the same time.
I mean when I am sending data through uart to /from usb , I have access to data by control center as well. So I added vendor descriptor to that example with the same DMA channels, but nothing comes up in CC. Should I change anything else?
In device manger I can see that as a com port, but nothing appears in CC.
I attached the modified descriptor file.
Thanks
Hello,
I am interested in using the Cypress FX3 as a mechanism to communicate with our FPGA. I basically need a method for two communication platforms:
1. FPGA will stream data out to an ARM processor connected via USB (through the Cypress FX3)
2. ARM processor needs to be able to read some registers (BRAM) on the FPGA through the same USB link and be able to set some registers (BRAM) to dictate what the FPGA will stream out.
I am following the information in the document AN65974 - Designing with the EZ-USB® FX3™ Slave FIFO Interface (cypress.com) and I can see that there is a pathway for me to do #1. The "FX3 Slave interface" described in an example like below seems to be a way of me to transfer data out of the FPGA using the "EP1_IN" interface.
However, what I am wondering is how to implement #2 - it is certainly possible to do it via some sort of opcode based protocol using EP1_OUT but what I risk doing in that respect is now data in EP1_IN is containing different streams of input data sources that need to be multiplexed in the USB Host (the ARM Core).
Is there perhaps a more elegant solution to do what I am describing? I saw that there is capability for an I2C and SPI interface on the FX3, but I am not too sure what this refers to. Does this appear like a SPI or I2C interface to the FPGA? Something like that could work - so the I2C/SPI interface is used as my #2 requirement.
Thanks for the help!
Prateek
Show LessEmployee
Employee
Employee