[INTERFACE]/EZ-USB2012. 10. 24. 01:19

[EZ-USB FX3] USB3.0 영상전송 테스트

 [EZ-USB FX3] USB3.0 영상전송 테스트

 

 

 

EZ-USB FX3를 이용하여 USB3.0으로 영상전송 실험을 했다.

 

 

1차 프로토 케이스 

 

 

최종 케이스 및 영상 전송 결과 

 

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2012. 10. 22. 19:08

[EZ-USB FX3] USB3.0 전송율 테스트

 

FX3는 USB3.0인터페이스로 5Gbps전송율을 가지고 있다. FX2에서는 24Mhz 8051코어를 사용 했는데 FX3에서는 200Mhz ARM9코어를 사용하고 있다.

 

- ARM926EJ core with 200-MHz operation

- 512-KB or 256-KB embedded SRAM
- USB 3.0 and USB 2.0 peripherals compliant
- 5-Gbps USB 3.0 PHY compliant with PIPE 3.0
- Programmable 100-MHz GPIF II
- 8-, 16-, and 32-bit data bus

 

 

 

 

BULK모드로 전송시 OUTPUT-> 318MB/s,  INPUT -> 350MB/s 의 전송율을 보여주고 있다. 

 

 

 

 

[EZ-USB FX3] CPU점유율

USB3.0을 이용하여 벌크모드로 동영상 전송하는데 CPU점유율이 한자리수로 유지되는것을 확인할 수 있다.

 

 

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2012. 10. 19. 21:30

[EZ-USB FX3] UART 테스트

[EZ-USB FX3] UART 테스트

 

CYUSB3014 에 UART는 아쉽게도 32bit GPIF를 사용할경우 SPI핀과 UART를 동시에 사용할수 없다.

그래서 선택적으로 사용할 수 있도록 점퍼를 설정했다.

 

 

 

 

CYUSB3014 UART초기화 함수

 CyU3PReturnStatus_t CyFxDebugInit (void)
{
    CyU3PUartConfig_t uartConfig;
    CyU3PReturnStatus_t status = CY_U3P_SUCCESS;

    /* Initialize and configure the UART for logging. */
    status = CyU3PUartInit ();
    if (status != CY_U3P_SUCCESS)
    {
        return status;
    }

    CyU3PMemSet ((uint8_t *)&uartConfig, 0, sizeof (uartConfig));
    uartConfig.baudRate = CY_U3P_UART_BAUDRATE_115200;
    uartConfig.stopBit  = CY_U3P_UART_ONE_STOP_BIT;
    uartConfig.parity   = CY_U3P_UART_NO_PARITY;
    uartConfig.txEnable = CyTrue;
    uartConfig.rxEnable = CyFalse;
    uartConfig.flowCtrl = CyFalse;
    uartConfig.isDma    = CyTrue;
    status = CyU3PUartSetConfig (&uartConfig, NULL);
    if (status != CY_U3P_SUCCESS)
    {
        return status;
    }

    /* Set the dma for an inifinity transfer */
    status = CyU3PUartTxSetBlockXfer (0xFFFFFFFF);
    if (status != CY_U3P_SUCCESS)
    {
        return status;
    }

    /* Start the debug module for printing log messages. */
    status = CyU3PDebugInit (CY_U3P_LPP_SOCKET_UART_CONS, 8);

    return status;

 

 

 

 

EZ-USB FX3 Debug메세지 출력 함수

extern CyU3PReturnStatus_t
CyU3PDebugPrint (
        uint8_t priority,       /* Priority level for this message. */
        char   *message,        /* Format specifier string. */
        ...                     /* Variable argument list. */
        );

 

 

 

 

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2012. 10. 19. 21:00

[EZ-USB FX3] GPIO 테스트

[EZ-USB FX3] GPIO 테스트

 

[EX-USB FX3] 의 확장 테스트 보드에는 GPIO 25, 26에 LED가 연결되어 있다.

 

 

 

 

 

GPIO 초기화 함수

void CyFxGpioInit (void)
{
    CyU3PGpioClock_t gpioClock;
    CyU3PGpioSimpleConfig_t gpioConfig;
    CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;

    /* Init the GPIO module */
    gpioClock.fastClkDiv = 2;
    gpioClock.slowClkDiv = 0;
    gpioClock.simpleDiv = CY_U3P_GPIO_SIMPLE_DIV_BY_2;
    gpioClock.clkSrc = CY_U3P_SYS_CLK;
    gpioClock.halfDiv = 0;

    apiRetStatus = CyU3PGpioInit(&gpioClock, CyFxGpioIntrCb);
    if (apiRetStatus != 0)
    {
        /* Error Handling */
        CyU3PDebugPrint (4, "CyU3PGpioInit failed, error code = %d\n", apiRetStatus);
        CyFxAppErrorHandler(apiRetStatus);
    }


    /* Override GPIO 25 as this pin is associated with GPIF Control signal.
     * The IO cannot be selected as GPIO by CyU3PDeviceConfigureIOMatrix call
     * as it is part of the GPIF IOs. Override API call must be made with
     * caution as this will change the functionality of the pin. If the IO
     * line is used as part of GPIF and is connected to some external device,
     * then the line will no longer behave as a GPIF IO.. Here CTL4 line is
     * not used and so it is safe to override.  */
    apiRetStatus = CyU3PDeviceGpioOverride (25, CyTrue);
    if (apiRetStatus != 0)
    {
        /* Error Handling */
        CyU3PDebugPrint (4, "CyU3PDeviceGpioOverride failed, error code = %d\n",
                apiRetStatus);
        CyFxAppErrorHandler(apiRetStatus);
    }

    /* Configure GPIO 25 as output */
    gpioConfig.outValue = CyFalse;
    gpioConfig.driveLowEn = CyTrue;
    gpioConfig.driveHighEn = CyTrue;
    gpioConfig.inputEn = CyFalse;
    gpioConfig.intrMode = CY_U3P_GPIO_NO_INTR;
    apiRetStatus = CyU3PGpioSetSimpleConfig(25, &gpioConfig);
    if (apiRetStatus != CY_U3P_SUCCESS)
    {
        /* Error handling */
        CyU3PDebugPrint (4, "CyU3PGpioSetSimpleConfig failed, error code = %d\n", apiRetStatus);
        CyFxAppErrorHandler(apiRetStatus);
    }
}

 

 

 

FX3의 펌웨어는 RTOS로 구동이되고 main함수에서 실행될 Thread를 정의해 주고     CyU3PKernelEntry ()함수로 커널 실행하면 설정한 Thread가 구동 되도록 구성되어 있다.

아래 코드는 EZ-USB FX3의 GPIO를 이용하여 LED On/Off 하는 Task의 실행 예제이다.

/* Entry function for the gpioOutputThread */
void GpioOutputThread_Entry (uint32_t input)
{
    CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;

    /* Initialize Debug module */
    apiRetStatus = CyFxDebugInit();
    if (apiRetStatus != CY_U3P_SUCCESS)
    {
        /* Error handling */
        CyU3PDebugPrint (4, "Debug module initialization failed, error code = %d\n",    apiRetStatus);
        CyFxAppErrorHandler(apiRetStatus);
    }

    // Initialize GPIO module.
    CyFxGpioInit ();

   

//LED 구동 테스트

for (;;)
    {
        //LED Off
        apiRetStatus = CyU3PGpioSetValue (25, CyTrue);
  Delay(500);

        //LED On
        apiRetStatus = CyU3PGpioSetValue (25, CyFalse);
  Delay(500);
    }
}

 

 

 

 

테스트 보드의 GPIO23, 27에는 스위치가 연결되어 있다. 

 

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2012. 10. 18. 23:30

[EZ-USB FX3] CYUSB3014 개발환경 설정 - 펌웨어 다운로드

 [EZ-USB FX3] CYUSB3014 개발환경 설정 - 펌웨어 다운로드

 

 

 

 

 

 

EZ-USB FX3 는 PMODE핀 설정에 의해 USB, I2C, SPI등등 다양한 형태로 부팅 가능하다.

 

 

가장 간단히 USB를 이용하는 방법인데 USB연결하면 기본 부트로더가 실행되고 USB Control Center로 펌웨어를 다운로드 할 수 있다.

 

 

CyUSB3014 RAM다운로드

 

 

 

 

 

Posted by nexp

댓글을 달아 주세요