2013-08-05 6 views
2

Keil USB HID 예제를 사용하면 마침내 Windows에서 LPC2148을 사용하여 내 장치를 성공적으로 열거 할 수있었습니다. USB HID 예제는 약간의 조정이 필요했습니다. 인터럽트 전송 방법을 사용하고 있습니다. USBlyzer를 사용하여 USB 데이터 전송을 감지합니다.LPC2148 USB 보내기/받기 데이터

Windows 측에서 현재 C# USB 라이브러리 (http://www.codeproject.com/Articles/18099/A-USB-HID-Component-for-C)를 사용하여 장치에 연결합니다.

데이터 전송을 테스트하려는 나의 목표는 수학 연산이 올바르게 수행되었는지와 데이터가 올바르게 수행되었는지 확인할 수 있도록 새로운 값을 다시 전송하는 등의 간단한 수학 연산을 수행하여 바이트를 장치로 보내는 것입니다 보내고 받았다.

지금은 열거되었지만 LPC2148을 보내거나받는 데 문제가 있습니다. 호스트에 데이터를 보내는 방법을 설명한이 기사 (http://www.keil.com/forum/19713/)를 발견했습니다.

usbuser.c

#if USB_CONFIGURE_EVENT 
void USB_Configure_Event (void) { 
    if (USB_Configuration) {     /* Check if USB is configured */ 
     GetInReport(); 
     USB_WriteEP(0x81, &InReport, sizeof(InReport)); 
    } 
} 
#endif 

void USB_EndPoint1 (DWORD event) { 

    switch (event) { 
     case USB_EVT_IN: 
     GetInReport(); 
     USB_WriteEP(0x81, &InReport, sizeof(InReport)); 
    break; 
    } 
} 

나는 몇 가지 문제가이 기술을 사용하지만, 발견 :

그것은 다음과 같은 코드를 가지고 1. 나는 단지 그것을 데이터를 전송하려는 반면, 그것은 지속적으로 매우 빠른 전송 데이터 바이트를받은 후 한 번만 보내고 싶습니다. 2. GetInReport가 아무것도하지 않고있는 것처럼 보일 것입니다. 왜냐하면이 메서드를 사용하면 InReport를 1로 점증하는 변수로 업데이트했기 때문입니다. 그러나받은 데이터에는 항상 기본값이 그대로 유지되고 변경되지 않았습니다. 3.이 코드에는 컴퓨터에서 데이터를받을 곳이 없습니다. 다음과 같이

답변

1

봅니다 "usbdesc.c"일괄 모드로 인터럽트에서받을 엔드 포인트를 변경하려면 :

/* Endpoint, HID Interrupt In */ 
USB_ENDPOINT_DESC_SIZE,   /* bLength */ 
USB_ENDPOINT_DESCRIPTOR_TYPE,  /* bDescriptorType */ 
USB_ENDPOINT_IN(1),    /* bEndpointAddress */ 
//USB_ENDPOINT_TYPE_INTERRUPT,  /* bmAttributes */ 
USB_ENDPOINT_TYPE_BULK, //--Here 
WBVAL(0x0004),      /* wMaxPacketSize */ 
........... 
+0

나는 인터럽트는 최고의 전송 방법입니다 내 요구에 대한 인상이었다. 나는 탈출구를 끝내는 방법에 대한 또 다른 몇 개의 링크를 발견했다고 생각한다. 내 가장 큰 문제는 지금은 때로는 내 USB 만 연결하고 제대로 작동하지 않습니다. –