[INTERFACE]/EZ-USB2011. 5. 8. 09:39

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

[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 프로그램

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2011. 5. 8. 09:36

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

[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에서 처리하도록 해야 할것 같다.


Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2011. 5. 6. 22:00

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

[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로 하니 잘 동작한다.
Posted by nexp

댓글을 달아 주세요

[INTERFACE]/EZ-USB2011. 5. 6. 18:43

[FX2 EVM] CY7C68013 USB 벌크 전송 테스트

[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();
 }
}



 

Posted by nexp
TAG CY7C68013, FX2, USB

댓글을 달아 주세요

[INTERFACE]/EZ-USB2011. 5. 1. 20:00

[FX2 EVM] UART 테스트

[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;
   }
   
  }
 }
}

Posted by nexp

댓글을 달아 주세요