본문 바로가기

[INTERFACE]/USB_FTDI

[FT2232 EVM]PC프로그램 작성

[FT2232 EVM]PC프로그램 작성

사용자 삽입 이미지

FT2232 드라이버로딩은 되었으니 하드웨어는 문제 없을듯 하고.. 다른 테스트 하기 위해 먼저 PC프로그램 부터 작성해 보자. C++언어이고 인터페이스가 손쉬운 VC++2000을 이용하여 만들 것이며  FTD사에서 제공하는 PC 예제파일(http://www.ftdichip.com/Projects/CodeExamples.htm) 을 다운 받았다.
 
전체 구성은 아래와 같고 프로젝트가 VC++2005와는 호환이 안되 자동 업데이트 했다.
 
<- VC++2005로 업데이트한 파일




구조는 아래 그림과 같다. DLL의 API이용해서 드라이버 파일(FTD2XX.sys) 접근하면 된다.



FT_OpenEx(), FT_Write(), FT_Read()함수만 알면 별 문제 없을듯...
드라이버 NAME만 던져주면 문제 없겠군..
FT_OpenEx()함수 부터 보자
 private: System::Void OpenPort()
    {
    FT_STATUS ftStatus = FT_OK;
    if(dwOpenFlags == FT_LIST_NUMBER_ONLY) {
     int iSelIndex = comboBox1->SelectedIndex;
     if(iSelIndex >= 0)
      ftStatus = FT_Open(iSelIndex, &handle);
    }
    else {
     String * str;
     char cBuf[64];
     str = comboBox1->GetItemText(comboBox1->SelectedItem);
     for(int i = 0; i < str->Length; i++) {
      cBuf[i] = str->Chars[i];
     }
     ftStatus = FT_OpenEx(cBuf, dwOpenFlags, &handle);
    }
    }
 
 
Write() 부분
어라... 예제는 가상 시리얼 포트 예제 인것 같은데... 그냥 BaudRate 설정 없이 Write만 하면 될듯한데...
 FT_STATUS ftStatus = FT_OK;
 DWORD ret;
 char cBuf[100];
 // This assumes you have a loopback connector on the USB cable you are using.
 listBox1->Items->Clear();
 for(int i = 0; i < 100 ; i++) {
  cBuf[i] = (char)i;
 }
 if(handle == NULL) {
  OpenPort();
 }
 if(handle) {
  StartThread();
  ftStatus = FT_SetEventNotification(handle, FT_EVENT_RXCHAR, hEvent);
  ftStatus = FT_SetBaudRate(handle, 9600);
  ftStatus = FT_Write(handle, cBuf, 100, &ret);
 }
 else {
  MessageBox::Show("Open Failed");
  return;
 }
 
 
아무래도 이 예제보다는 Bit Bang mode로 접근해야 할듯 하다
반응형