본문 바로가기

[INTERFACE]/EZ-USB

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



 

반응형