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

 

 

 

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

 

 

1차 프로토 케이스 

 

 

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

 

 

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점유율이 한자리수로 유지되는것을 확인할 수 있다.

 

 

[EZ-USB FX3] UART 테스트

[INTERFACE]/EZ-USB | 2012.10.19 21:30
Posted by nexp
[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. */
        );

 

 

 

 

[EZ-USB FX3] GPIO 테스트

[INTERFACE]/EZ-USB | 2012.10.19 21:00
Posted by nexp

[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에는 스위치가 연결되어 있다. 

 

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

 

 

 

 

 

 

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

 

 

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

 

 

CyUSB3014 RAM다운로드

 

 

 

 

 

[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

 

 

 

 

 

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

 

 

 

 

[FX2 EVM] UART 테스트

[INTERFACE]/EZ-USB | 2011.05.01 20:00
Posted by nexp
[FX2 EVM] UART 테스트


FX2에는 2개의 UART가 있다. 그냥 8051용 UART이므로 별 다른건 없는것 같다.
[serial.c] 에 Rx, Tx 드라이버 함수만 수정하면 기존 코드를 그대로 사용할 수 있다.
unsigned char U0_GetByte(void)
{
 while (!RI);
 RI = 0;          
 return SBUF0;
}

void U0_PutByte(unsigned char Data)
{
 while (TI == 0) ;
 TI = 0 ;
 SBUF0 = Data ;
}


USB2UART에 연결하면 쉽게 디버깅 가능하다.





FX2 Ez-USB Serial 테스트 프로그램 소스코드
void main(void)
{
 int cnt = 0;
 
 SystemInit();

 Led1Init();
 Led1On();
 Led2Init();
 Led2Off();

 DebugInit(BAUD_38400);
 DebugPrint("FX2 EVM CY7C68013 Serial Test.\r\n");
  
 DebugPrint("printf: %d\r\n", cnt++);
 
 while(1)
 {
  if(U0_IsGetByte())
  {
   switch(U0_GetByte())
   {
    case '0':
     DebugPrint("Led1 Off\r\n");
     Led1Off();
     break;

    case '1':
     DebugPrint("Led1 On\r\n");     
     Led1On();
     break;
   }
   
  }
 }
}

[FX2 EVM] Ez-USB FX2(CY7C68013) 개발환경 설정


Cypress Ez-USB FX2(CY7C68013)는 기본적으로 USB로 펌웨어 다운로드 하는 기능이 있기 때문에 개발할때 편리하다. USB캐이블 연결하면 기본 드라이버를 검색한다. 디바이스 드라이버는 아래 드라이버를 사용하면 된다.

CyMonfx1_fx2lp.zip




정상적으로 설치되면 장치관리자에서 확인할 수 있다.




펌웨어 다운로드는 CyConsole.exe 프로그램을 사용하면 된다.
CyConsole.zip
"Download" 버튼을 클릭하여 펌웨어 hex파일을 다운로드 할 수 있다.
새로운 프로그램을 다운로드 하려면 리셋을 누르지 않고 그냥 Re-Load버튼으로 다운로드 할 수 있다.


테스트 예제: 

fx2_evm.hex






Keil을 용한 프로그램 작성
FX2는 8051코어 이므로 8051컴파일러인 Keil C51을 이용하여 프로그램 할 수 있다.

새로운 프로젝트를 생성하여 Cypress 제품을 선택하면 된다.



옵션으로는 특별한 것은 없지만 hex파일 생성할 때 FX2 메모리 영역에 맞도록 변환 해 줄 필요가 있는데 위에서 받는 CyConsole.zip에 있는 Hex2bix.exe를 이용하면 쉽게 변환 가능하다. USER 프로그램으로 등록해 두면 된다.




c:\cypress\usb\bin\hex2bix -i -c 0x00 -f 0xC2 -o fx2_evm.iic fx2_evm.hex



Ez-USB FX2 테스트 동영상
LED제어 펌웨어 다운로드 하여 FX2 EVM 동작 테스트

[FX2 EVM] Ez-USB CY7C68013 보드 제작


USB 2.0-USB-IF high speed 를 지원하는 Cypress사의 Ez-USB FX2 CY7C68013A 테스트 보드를 제작했다.

[M-Type EVM]   표준 핀맵으로 제작해 여러 테스트 보드에서 테스트 가능하도록 했다.




TFT LCD 확장 테스트 보드





[FX2 EVM] 회로도












Ez-USB FX2 테스트 동영상
LED제어 펌웨어 다운로드 하여 FX2 EVM 동작 테스트




[FX2 EVM] Hispeed USB Bulk 테스트


블로그 이미지

nexp

카테고리

분류 전체보기 (1560)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (129)
[FreeScale] (31)
[MSP430] (140)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (213)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (129)
[SENSOR] (41)
[DATA] (21)
[FPGA] (32)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)