[INTERFACE]/USB2017. 12. 1. 17:32

USB 복합장치 제작

USB HID 복합장치 제작 하려고 하고 있다.
15년전에 제작 했던 자료를 꺼내서 해 보려고 했더니 너무 옛날 보드라 관련 자료도 없고 개발환경도 너무나 달라져서 별로 도움이 되지 않는다.

예전에는 USB 시퀀스 잘 알고 있었는데... HID 키보드, 마우스, 조이스틱 (복합장치)등의 장치를 잘 다루었는데..
새로하려니 쉽지가 않다.

우선 기존에 잘 동작 하던 보드에 레포트 디스크립터만 수정하면 되지 않을까?
-> 잘안된다.



TI 자료가 잘 정리되어 있는것 같다.

디스크립터 툴도 제공한다. 우선 기존에 만들었던 TI MSP430F5510 EVM 보드로 테스트 해보자




수정된 디스크립터를 이용해서 컴파일 했는데...  Custom HID는 잡히는데 키보드는 인식을 하지 못한다.
이상하다.
키보드 디스크립터만 만들어서 테스트 해보자
여전히 안된다.

뭐가 문제 이지?
코드에 수정해야 할부분이 또 따로 있나?
되는 코드와 안되는 코드를 비교해보자.

PID 부분이 다르다. PID를 바꾸니 잘 동작한다.
#define USB_VID               0x2047    // Vendor ID (VID)
#define USB_PID               0x0315        // Product ID (PID)

PID가 바뀐다고 안될이유는 없는데...
기존 드라이버를 지워보자

장치관리자에서 드라이버를 삭제하고 새로인식하니 잘 동작한다.
처음에 디스크립터 바꾸면서 잘못된 드라이버가 로딩되면서 문제가 된것 같다.



장치관리자에서 키보드, 커스텀 HID 복합 장치가 등록 되는것을 확인 할 수 있다.







기존 키보드 예제로 테스트 하려고 했는데...
HID 수신이 안된다.

그래서 HID 예제로 테스트 했다.
USB_Cconfig 폴더 내용만 복사하면 된다.
G:\DOC\MCU\MSP430\MSP430USBDevelopersPackage_5_20_06_02\MSP430_USB_Software\MSP430_USB_API\examples\HH1_hidDemo2hidDemo

HID는 TI제공 프로그램을 이용했고 HID로 'a' 'b' 보내면 LED 온 오프하고 'c'보내면 1초뒤에 키 값을 전송하도록 했다.



기본틀은 구성 됬고 필요에 따라 수정만 하면 될것 같다. 

Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2012. 4. 10. 23:00

[MSP430F5510] 구매처

저전력에 저렴하 USB칩셋으로 MSP430F5510이 좋다.

디지키에 저렴하게 판매하고 있다. 100개만 되어도 2천원대 이다.

 

동작전압이 1.8~3.3V 이므로 밧데리 구동 가능하고, 무엇보다도 동작 온도가 -40 ~ 85도 이므로 온습도 로거 제작에 좋을것 같다.

 

 http://www.digikey.kr/product-detail/ko/MSP430F5510IPT/296-28189-5-ND/2522329

 

 

 

Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011. 11. 26. 17:30

[MSP430F5529 EVM] GPIO토글 속도 측정

[MSP430F5529 EVM]  GPIO토글 속도 측정



MSP430F55xx 시리즈는 클럭이 최대 32Mhz까지 입력 가능하므로 이전 MSP430보다는 많이 빨라 졌다. USB기능이 추가 되었기 때문에 속도도 중요한 요소가 되었기 때문이지 않을까...
아무튼 저렴하고 저전력의 MSP430코어가 속도도 빨라졌기 때문에 응용해 적용해 볼곳이 많이 있을것 같다.



MSP430F5529/MSP430F5510 GPIO토글 속도 테스트
[참고] MCU속도 측정 결과 

24Mhz 클럭 이용시 -> GPIO 토글 속도 1.7Mhz
33Mhz 클럭 이용시 -> GPIO 토글 속도 2.35Mhz
     39              while(1)
     40              {
     41                  Led1Toggle();
   \                     ??main_1:
   \   00005C   D2E36302     XOR.B   #0x1, &0x263
   \   000060   FD3F         JMP     ??main_1
   \   000062   0343         NOP



단순 On/Off 하는데 걸리는 시간 90 ns 대략 3Mhz
33Mhz 클럭 이용시 -> GPIO On/Off속도 4.1Mhz

     39              while(1)
     40              {
     41                  //Led1Toggle();
     42                  PORT8 = 1;
   \                     ??main_1:
   \   00005C   D2436302     MOV.B   #0x1, &0x263
     43                  PORT8 = 0;
   \   000060   C2436302     MOV.B   #0x0, &0x263
   \   000064   FB3F         JMP     ??main_1
   \   000066   0343         NOP



참고로 외부 클럭을 32Mhz로 사용하기 위해  TI에서 제공하는 코드(HAL_UCS)를 system.c 에 추가 하였다.
#if (__SYS_CLK__ == SYS_CLK_32MHZ_XTAL) 
    // Startup HF XT2 crystal
    P5SEL |= BIT2+BIT3;                       // Port select XT2 
    do{
        status = XT2_Start_Timeout(XT2DRIVE_0, 50000);
    }while(status == UCS_STATUS_ERROR); 

    SELECT_SMCLK(SELS__XT2CLK);               // Select XT2 as SMCLK source
    SELECT_MCLK(SELS__XT2CLK);
#endif

Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011. 8. 11. 12:03

[MSP430F5510 EVM] USB HID 테스트

[MSP430F5510 EVM] USB HID 테스트



MSP430F5510 을 이용하여 HID테스트를 했다. HID를 이용하면 USB디바이스 드라이버 제작할 필요없이 고속의 USB통신을 할수 있다. 간단히 HID인식해서 데이터 송수신 하는 예제를 작성해 보았다.
저렴하고 소형의 MCU임에도 불구하고 USB데이터 처리는 빠르고 쉽게 처리되었고 상용 제품에 적용하기에 좋은것 같다.

HID테스트용 PC프로그램 제작



MSP430F5510 HID USB데이터 송수신 테스트 소스코드

VOID main(VOID)
{
    //시스템 초기화
 SystemInit();
   
 //init USB
 USB_init();

 Led1Init();
 Led1Off();
 
 Led2Init();
 Led2Off(); 
   
    // Enable various USB event handling routines
    USB_setEnabledEvents(kUSB_VbusOnEvent+kUSB_VbusOffEvent+kUSB_receiveCompletedEvent
                          +kUSB_dataReceivedEvent+kUSB_UsbSuspendEvent+kUSB_UsbResumeEvent+kUSB_UsbResetEvent);
   
    // See if we're already attached physically to USB, and if so, connect to it
    // Normally applications don't invoke the event handlers, but this is an exception. 
    if (USB_connectionInfo() & kUSB_vbusPresent)
      USB_handleVbusOnEvent();

    while(1)
    {
        BYTE i;
        // Check the USB state and directly main loop accordingly
        switch(USB_connectionState())
        {
           case ST_USB_DISCONNECTED:
    // Enter LPM3 w/ interrupts enabled
                 __bis_SR_register(LPM3_bits + GIE);              
                _NOP();                                             
                break;
               
           case ST_USB_CONNECTED_NO_ENUM:
                break;
               
           case ST_ENUM_ACTIVE:
    // Enter LPM0 (can't do LPM3 when active)
                __bis_SR_register(LPM0_bits + GIE);              
                _NOP();

     //------------------------------------------------------------------------------
    //USB데이터 송수신
                // Exit LPM on USB receive and perform a receive operation
                if(bHIDDataReceived_event)                             
                {
      // Holds the new addition to the string                 
      char pieceOfString[MAX_STR_LENGTH] = "";          
                 
                  // Add bytes in USB buffer to theCommand
      // Get the next piece of the string
                  hidReceiveDataInBuffer((BYTE*)pieceOfString,MAX_STR_LENGTH,0);                
                  strcat(wholeString,pieceOfString);    
                  // Add it to the whole
                  hidSendDataInBackground((BYTE*)pieceOfString,strlen(pieceOfString),0,0);     
                 
      
     if(wholeString[0] == CMD_LED2_ON)
     {
       Led2On();
     }
     else if(wholeString[0] == CMD_LED2_OFF)
     {
       Led2Off();
     }     
       else if(wholeString[0] == CMD_LED1_ON)
                    {
                      Led1On();
                    }
     else if(wholeString[0] == CMD_LED1_OFF)
                    {
      Led1Off();
                    }
                    else if(wholeString[0] == CMD_READ_DATA)
                    {                     
                      //USB데이터 전송
       hidSendDataInBackground((BYTE*)outBuffer,63),0,0);
                    }
                  bHIDDataReceived_event = FALSE;
                }
                break;
   //----------------------------------------------------------------------------------
   
           case ST_ENUM_SUSPENDED:
                __bis_SR_register(LPM3_bits + GIE);          // Enter LPM3 w/ interrupts
                break;
               
           case ST_ENUM_IN_PROGRESS:
                break;
               
           case ST_NOENUM_SUSPENDED:
                __bis_SR_register(LPM3_bits + GIE);               
                break;               
               
           case ST_ERROR:
                _NOP();
                break;
               
           default:;
        }
   
    }  // while(1)
} //main()



MSP430F5510 HID테스트 동영상

Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011. 8. 11. 11:25

[MSP430F5510 EVM] 보드 제작

[MSP430F5510 EVM] 보드 제작


MSP430F5510은 TI사의 저전력 MSP430코어와 USB기능을 가지고 있어 저전력의 USB기능이 필요 할때 유용하게 사용할 수 있다. 48핀 LQFP패키지라 소형이고 저렴한 가격으로 적용할 때가 많을것 같아 테스트 보드로 제작해 보았다.




48핀 LQFP 타입의 MSP430F5510



[SM-Type EVM]   타입으로 제작해 핀맵이 호환되며 USB2UART, ZIGBEE2UART등의 모듈을 연결 할 수 있다.



확장 테스트 보드




MSP430F5510 EVM 보드 회로도






Posted by nexp

댓글을 달아 주세요