Slave Sync Fifo: unable to achive hi throughput with SDK v.1.1.1

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Anonymous
Not applicable

Slave Sync Fifo examples are differrent in SDK v.1.1 and v.1.1.1: unable to achive hi throughput with v.1.1.1.

With v.1.1.1 there is only ~200MB/s ( IN endpoint), but with v.1.1 throughput is about 330 MB/s!

I found that difference is in state machine programming.

What is wrong with new version?

0 Likes
8 Replies
Anonymous
Not applicable

Looks like v.1.1.1 use 16 bit bus even define CY_FX_SLFIFO_GPIF_16_32BIT_CONF_SELECT is set to 1.

   

Version 1.1.1 cyfxgpif_syncsf.h has a lot of differences, for example:

   

new version v.1.1.1:

   

uint32_t Sync_Slave_Fifo_2Bit_CyFxGpifRegValue[]  = {
    0x80000380,  /*  CY_U3P_PIB_GPIF_CONFIG */
    0x000010A7,  /*  CY_U3P_PIB_GPIF_BUS_CONFIG */
    0x01070002,  /*  CY_U3P_PIB_GPIF_BUS_CONFIG2 */
 

   

old version v.1.1:

   

uint32_t Sync_Slave_Fifo_2Bit_CyFxGpifRegValue[]  = {
    0x80000380,  /*  PIB_GPIF_CONFIG */
#if (CY_FX_SLFIFO_GPIF_16_32BIT_CONF_SELECT == 0)
    0x000010A7,  /*  PIB_GPIF_BUS_CONFIG */
#else
  0x000010AC,  /*  PIB_GPIF_BUS_CONFIG */
#endif
    0x01070002,  /*  PIB_GPIF_BUS_CONFIG2 */

   

 

   

If  I use this code (i.e.  0x000010AC instead of  0x000010A7) in the example from v.1.1.1 than IN transaction return Error 997.

   

How to fix v.1.1.1? How to run it in 32-bit mode?
 

0 Likes
Anonymous
Not applicable

Hi,

   

I am also seeing the similar issue and I checking with the internal software team. I will update you soon.

   

Regards,

   

sai krishna.

0 Likes
Anonymous
Not applicable

My sync fifo 32 Bit implementation also stopped working after updating to SDK v1.1.1. Interestingly, when downloading the image to RAM using the j-link debugger, it does work sometimes. Please advice what has been changed between SDK v1.1 and 1.1.1 so as to find the root cause for this.

   

 

   

In parallel I have an additional endpoint that is served by the CPU and there I have no problem at all.

   

 

   

-Sil

0 Likes
Anonymous
Not applicable

 hi sil , I have the same problem like yours .it work well in sdk v1.1.But after I updata to sdk V 1.1.1 ,download the *.img to ram it is not work well .the source code are the same .with sdk v 1.1.1 when burst read size more than 0x330 it is receive nothing .In app FinishDataXfer will return false 

0 Likes
Anonymous
Not applicable

Guys,

   

Can you please try your projects with the latest SDK that is released few days back. (SDKv1.2).

   

Please let me know the result.

   

Regards,

   

sai krishna.

0 Likes
Anonymous
Not applicable

The same result: SDK v.1.2 Slave Fifo example is 16-Bit. Still works  16 bit only. If I set second register in GpifRegValue[] array to 0x000018AC then I got error 997. So, nothing was changed since v.1.1.1 of sdk 😞

   

Note: SDK 1.2 has GPIF-II designe version 1.0.715.0 but SDK 1.2 example (at least slave sync fifo) uses GPIF-II version 1.0.836.1 !

0 Likes
Anonymous
Not applicable

Guys,

   

Please change the starting piece of code in the main function as shown below:

   

CyU3PIoMatrixConfig_t io_cfg;
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;
    CyU3PSysClockConfig_t clkCfg = {
            CyTrue,
            2, 2, 2,
            CyFalse,
            CY_U3P_SYS_CLK
    };

    /* Initialize the device */
    status = CyU3PDeviceInit (&clkCfg);
    if (status != CY_U3P_SUCCESS)
    {
        goto handle_fatal_error;
    }

    /* Initialize the caches. Enable instruction cache and keep data cache disabled.
     * The data cache is useful only when there is a large amount of CPU based memory
     * accesses. When used in simple cases, it can decrease performance due to large
     * number of cache flushes and cleans and also it adds to the complexity of the
     * code. */

   

Let me know the result after doing this modification.

   

Thanks,

   

sai kirshna.

0 Likes
Anonymous
Not applicable

Yes, it works!

   

Thank you!

0 Likes