[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. 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

댓글을 달아 주세요

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

[EZ-USB FX3] CYUSB3014 개발환경 설정

[EZ-USB FX3] CYUSB3014 개발환경 설정

FX2는 8051코어이기 때문에 Cypress에서 Keil 컴파일러를 지원했지만 FX3는 ARM9으로 변경되면서 개발환경도 자체 지원하고 있다.

 

FX3를 위한 컴파일러, IDE, API등은  Cypress 홈페이지에서 다운 가능하다.

Cypress EZ-USB FX3 Software Development Kit

 

 

FX3SDKSetup.exe 를 설치하면 한번에 설정 가능하다.

 

 

 

 

 

FX3를 위해 필요한 툴을 선택해서 설정 가능하다. 처음이라면 그냥 전체를 설치 하면 된다.

 

 

 

 

IDE를 실행해 보자.그냥 Eclipse에다 arm gcc를 이용한다.

 

 

 

 

Cypress에서 제공하는 예제를 테스트 해 보기 위해 프로젝트를 Import한다.

 

 

설치된 SDK 폴더를 선택한다. 기본적으로 C:에 설치 되는데 관리를 위해서 D:로 복사했다.

 

 

 

기본 환경 설정이 끝나고 간단히 GPIO예제를 컴파일 해 보자.

컴파일은 잘되는데 중간에 워닝 에러가 발생한다.

컴파일된 이미지를 FX3가 USB로 다운로드할 수 있는 구조로 변경하는 elf2img 파일을 찾을 수 없다고 나온다.

 

옵션을 보면 " "안에 설정되어 있는데 ""를 제거 해 주니 문제없이 동작한다.

"${FX3_INSTALL_PATH}\util\elf2img\elf2img.exe" -i ${ProjName}.elf -o ${ProjName}.img

 

-> ${FX3_INSTALL_PATH}\util\elf2img\elf2img.exe -i ${ProjName}.elf -o ${ProjName}.img

 

 

 

 

 

이제 컴파일 하면 정상적으로 컴파일되는것을 확인할 수 있다.

 

 

 

 

Posted by nexp

댓글을 달아 주세요