[FX2 EVM] HighSpeed USB Bulk 전송 테스트 - USB를 이용한 이미지 출력

 

FX2는 USB2.0 Hispeed 를 지원하므로 TFT LCD에 이미지 출력하는 예제는 USB전송 속도 테스트 하기에 좋다.
USB Hispeed는 한번에 512Byte를 전송할 수 있으므로 확실히 속도차이를 볼 수 있다.
하지만 8051코어라 이미지 출력을 GPIO로 하다보니 전송속도는 빠르지만 TFT LCD출력이 느리다. 추후 GPIF나 BUS방식으로 LCD를 제어하면 좀더 빠른 속도를 볼수 있을것 같다.

USB로 이미지 전송 테스트 동영상




참고로 STM32를 이용하여 USB로 이미지 전송하는 예제와 비교하면 확실히 전송속도 차이를 확인할 수 있다.



Hispeed USB Bulk 이미지 전송 PC 프로그램

[FX2 EVM] Ez-USB CY7C68013 TFT LCD 테스트



[FX2 EVM] 보드는 M-Type의 핀맵으로 [EXP-LCD]보드에 연결하여 TFT-LCD 를 테스트 할 수 있다.

FX2 EVM 핀맵




EXP-LCD 핀맵



[FX2 EVM] TFT LCD 드라이버 코드
 원래 8051의 페리 속도가 느리고, 특히나 PORTE는 비트제어 명령이 지원되지 않기 때문에 Address로 접근해야 해서 속도가 더 느려지는것 같다.

//-----------------------------------------------------------------------------
// TFT LCD Driver
#define TFT_DRV_HD66791     0
#define TFT_DRV_COM44     1

#define LCD_LAT_BIT      BIT8
#define LCD_LAT_PORT     

#define LCD_LAT_ON()     
#define LCD_LAT_OFF()     
#define LCD_DATA_LATCH()    LCD_LAT_ON();LCD_LAT_OFF();

#define LCD_EN_BIT      BIT5
#define LCD_EN_PORT      
#define LCD_ENABLE()     Cbi(IOE, LCD_EN_BIT)
#define LCD_DISABLE()     Sbi(IOE, LCD_EN_BIT)

#define LCD_RST_BIT      BIT2
#define LCD_RST_PORT     
#define LCD_RST_ON()     PE2 = 1
#define LCD_RST_OFF()     PE2 = 0

#define LCD_RS_BIT      BIT3
#define LCD_RS_PORT      
#define LCD_RS_OFF()     Cbi(IOE, LCD_RS_BIT)
#define LCD_RS_ON()      Sbi(IOE, LCD_RS_BIT)

#define LCD_WR_BIT      BIT5
#define LCD_WR_PORT      
#define LCD_WR_OFF()     PA5 = 0
#define LCD_WR_ON()      PA5 = 1

#define LCD_RD_BIT      BIT4
#define LCD_RD_PORT      
#define LCD_RD_OFF()     PA4 = 0
#define LCD_RD_ON()      PA4 = 1

#define LCD_BL_BIT      BIT4
#define LCD_BL_PORT      
#define LCD_BL_OFF()     Cbi(IOE, LCD_BL_BIT)
#define LCD_BL_ON()      Sbi(IOE, LCD_BL_BIT)

#define _LCD_DAT_OUT(Data)    IOB=Data&0xFF;IOD=(Data>>8);
          
#define TFTGpioInit()     OEB=0xFF;OED=0xFF;\
          PORTECFG = 0;OEE=0xFF;PORTACFG = 0;OEA=0xFF;
//-----------------------------------------------------------------------------




[FX2 EVM] TFT LCD테스트 동영상
한프레임 출력하는데 220ms정도 걸린다.. 너무 느리다. GPIF모드나 BUS모드로 테스트 해 봐야 할것 같다. FPGA를 이용해 FX2는 USB데이터를 받아서 버퍼에 저장하고 LCD제어는 다른 MCU에서 처리하도록 해야 할것 같다.


[FX2 EVM] 8051에서 unsigned long사용시 주의

테스트 하는중에 코드량이 좀 늘어니 이상한 동작을 하는경우가 발생한다. 코드가 멈추거나 리셋 되는 현상이 있다.
Delay 함수를 쓰고나면 이상한 동작을 한다.

system.c 에 있는 Delay() 함수는 아래와 같고 지금까지 잘 사용 했었는데...
void Delay(unsigned long Time)
{
 volatile unsigned int delay = 0;

 for(; Time != 0; Time--)
 {
  for(delay=0;delay<800;delay++);
 };
}

FX2의 코어는 8비트 8051이므로 혹시나 long 타입이 문제가 아닐까 싶어 unsigned int로 변경해 보았는데.. 잘 동작한다.
옵티마이즈 수정을 좀 하긴했는데.. 컴파일러의 문제 인지..?
 -> 옵티마이즈 문제는 아닌것 같다.

아무튼 long을 사용하지 않고 unsigned int로 하니 잘 동작한다.
[FX2 EVM] CY7C68013 USB 벌크 전송 테스트



FX2 Ez-USB를 이용하여 USB Bulk전송 테스트를 해 보았다.

먼저 CY7C68013쪽 펌웨어 에서 TD_Pool() 함수를 수정하여 USB로 데이터를 수신하거나 전송할 수 있다.
아래 코드는 USB로 PC에서 받은 데이터를 처리하는 부분이다. 주석을 보면 쉽게 이해할 수 있다.
void TD_Poll(void)
{
 WORD i;
 WORD count;

 //EndPoint로 데이터가 들어오면
 if(!(EP2468STAT & bmEP2EMPTY))
 {
  //받은 데이터가 들어 있는 포인터의 주소를 Auto Buffer1로 할당한다.
  APTR1H = MSB( &EP2FIFOBUF );
  APTR1L = LSB( &EP2FIFOBUF );

  //내가 사용할 메모리의 주소를 Auto Buffer2에 할당
  AUTOPTRH2 = MSB( &Receive_Buffer );  
  AUTOPTRL2 = LSB( &Receive_Buffer ); 

  //전송된 데이터 수 저장
  count = (EP2BCH << 8) + EP2BCL;
  DebugPrint("EP2 read: Size=%d.\r\n", count);

  //내가 설정한 메모리로 저장
  for(i=0; i<count; i++)
  {
     EXTAUTODAT2 = EXTAUTODAT1; 
  }

  //데이터 처리
  PorcessUsbEP2(Receive_Buffer, count)

  SYNCDELAY;                   
  EP2BCL = 0x80;          // re(arm) EP2OUT
 }

:

//데이터 전송 처리




FX2 Ez-USB BULK테스트 PC프로그램



Cypress API를 이용하면 쉽게 PC프로그램을 작성할 수 있다.

API를 사용하려면 DDK가 필요하다.




FX2 USB BULK 테스트 프로그램 소스코드
void main(void)
{
 SystemInit();

 Led1Init();
 Led1Off();
 Led2Init();
 Led2Off();
 Led3Init();
 Led3Off();

 DebugInit(BAUD_38400);
 DebugPrint("FX2 EVM CY7C68013 USB BULK Test.\r\n");
 
 // Initialize user device
 TD_Init();

 EZ-USB_Init();

 while(TRUE)
 {
  // Poll User Device
  TD_Poll();
  EZ_USB_CtrlProcess();
 }
}



 

TAG CY7C68013, FX2, USB

[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] GPIO 속도 측정

[INTERFACE]/EZ-USB | 2011.05.01 19:30
Posted by nexp
[FX2 EVM] GPIO 속도 측정

24Mhz로 구동시 650ns 750kHZ가 출력된다. 상당히 느리군..

void main(void)
{
 Led1Init();
 Led1On();

 while(1)
 {
  //Led1Toggle();
  PC7 ^= 1;
 }
}


000C         ?C0001:
                                           ; SOURCE LINE # 12
                                           ; SOURCE LINE # 13
                                           ; SOURCE LINE # 14
000C A2A7              MOV     C,PC7
000E B3                CPL     C
000F 92A7              MOV     PC7,C
                                           ; SOURCE LINE # 15
0011 80F9              SJMP    ?C0001
             ; FUNCTION main (END)


[참고] MCU속도 측정 결과 
[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)