[MSP430]/MSP430F5x2011.11.26 18:00

[MSP430F5529 EVM] W5200/W5100 TCP/IP loopback 전송 속도 테스트

[MSP430F5529 EVM] W5200/W5100 TCP/IP loopback 전송 속도 테스트



[MSP430F5529 EVM] 을 이용하여 TCP/IP loopbak 전송 속도를 테스트 해 보았다.
MSP430F5x 의 경우 클럭이 최대 32Mhz이고 SPI클럭 속도 설정을 자유롭게 설정 가능하기 때문에 SPI클럭 속도에서 유리한 점이 있다.

메인 클럭을 32Mhz로 설정하고 SPI클럭을 16Mhz로 설정하여 테스트한 결과 2.2Mbps 정도의 전송 속도가 나온다.
다른 MCU의 TCP/IP 전송 속도 테스트 결과 와비교 했을때 나쁘지 않다.

-----------------------------------------------------------
[8] iInChip Send: 2.2657 Mbps(3880723 bytes, 13.0676 sec)
iInChip Recv: 2.1496 Mbps(3880723 bytes, 13.7736 sec)
------------------------------------------------------------
[9] iInChip Send: 2.1323 Mbps(3880723 bytes, 13.8855 sec)
iInChip Recv: 2.2160 Mbps(3880723 bytes, 13.3608 sec)
-------------------------------------------------------




Posted by nexp

댓글을 달아 주세요

[MSP430]/MSP430F5x2011.11.26 17:30

[MSP430F5529 EVM] SPI테스트 - 3축 가속도 센서 출력

[MSP430F5529 EVM] SPI테스트 - 3축 가속도 센서 출력

[MSP430F5510 EVM] 및 [MSP430F5529 EVM] 의 SPI는 PORT4의 USB1에 할당 되어 있다.
핀맵을 보면 아래와 같다.

P4.3/PM_UCB1CLK/PM_UCA1STE
P4.2/PM_UCB1SOMI/PM_UCB1SCL
P4.1/PM_UCB1SIMO/PM_UCB1SDA
P4.0/PM_UCB1STE/PM_UCA1CLK




MSP430F5x의 SPI특징
SPI mode features include:
• 7-bit or 8-bit data length
• LSB-first or MSB-first data transmit and receive
• 3-pin and 4-pin SPI operation
• Master or slave modes
• Independent transmit and receive shift registers
• Separate transmit and receive buffer registers
• Continuous transmit and receive operation
• Selectable clock polarity and phase control
• Programmable clock frequency in master mode
• Independent interrupt capability for receive and transmit
• Slave operation in LPM4



MSP430F5x SPI블록도





MSP430F5x SPI 통신 초기화 함수
void SPI1_Init(void) // SPI 통신 초기화 함수
{
 // Select SPI functionality on DIO pins for MOSI, MISO, & CLK.
 P4SEL |= (BIT1|BIT2|BIT3);  
   
  UCB1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCB1CTL0 |= UCMST+UCSYNC+UCMSB+UCCKPH;    // 3-pin, 8-bit SPI master
  UCB1CTL1 |= UCSSEL_2;                     // SMCLK
  UCB1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
//  UCB1IE |= UCRXIE;     

   SPI1_SetSpeed(SPI_SPEED_1MHZ);
}



MSP430F5x SPI 전송 함수
#define SPI1_WRITE_BYTE(x)                 UCB1TXBUF = (x);
#define SPI1_READ_BYTE()     UCB1RXBUF
#define SPI1_WAIT_FOR_EN()     while (!(UCTXIFG&UCB1IFG));
#define SPI1_WAIT_FOR_SEND()              while (UCB1STAT & UCBUSY);
#define SPI1_WAIT_FOR_RX()     while (!(UCRXIFG&UCB1IFG))


unsigned char SPI1_WriteReadByte(unsigned char Data)
{
 SPI1_WAIT_FOR_EN();
 SPI1_WRITE_BYTE(Data);
 SPI1_WAIT_FOR_SEND();
 return SPI1_READ_BYTE();
}



MSP430F5510 SPI Accel 드라이버 함수
#define _SPI1_ENABLE    1

//-----------------------------------------------------------------------------
// myAccel3LV02 HAL
#define MY_ACCEL3LV02_SPI_MODE   1
#define MY_ACCEL3LV02_I2C_MODE   0

//AccelCS A8-P3.7
#define ACCEL_CS_BIT     BIT6
#define ACCEL_CS_PORT     PORT4

#define ACCEL_CS_INIT()     Sbi(P4DIR, ACCEL_CS_BIT);

#define ACCEL_CS_ASSERT()    Cbi(ACCEL_CS_PORT, ACCEL_CS_BIT)
#define ACCEL_CS_DEASSERT()    Sbi(ACCEL_CS_PORT, ACCEL_CS_BIT)
#define ACCEL_SPI_INIT()    SPI1_Init()
#define ACCEL_Read      SPI1_WriteReadByte
#define ACCEL_Write      SPI1_WriteReadByte
//-----------------------------------------------------------------------------



MSP430F5529 3축 가속도 센서 출력 테스트 예제 소스코드
#include "system.h"
#include "serial.h"
#include "spi.h"
#include "myAccel.h"

void main(void)
{
   short data = 0;
    SystemInit();

    Led1Init();
    Led1On();
   
 DebugInit(BAUD_115200);
 DebugPrint("MSP430F5529 EVM SPI Accel Test\r\n");

 myAccel3lvInit();
    myAccel3lvWrite(CTRL_REG1, 0xC7);  //1000.0111 Power on, enable all axis, self test off
   
    while(1)
    {
        Led1Toggle();
       GetAccelValue(AXIS_X, &data);
       DebugPrint("%d\r\n", data); 
 
        Delay(100);
    }
}


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.08.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]/MSP430F5x2010.05.28 23:46

[MSP430F55x EVM] 보드 관련자료 - MSP430F5529 USB Interface

[MSP430F55x EVM] 보드 관련자료 - MSP430F5529 USB Interface


 
USB기능이 있는 MSP430F55xx EVM 보드를 [M-Type EVM] 형태로 제작 했다. 저전력에 USB를 요구하는 어플리케이션이라면 상당히 매리트 있는 MCU이다. USB를 연결할 수 있고 모든 핀을 확장할수 있으며 표준화된 핀맵으로 제작해 보았다. 만들고 보니 상당히 소형으로 가능하다.


MSP430 IAR 5.10 데모버젼 : 링크
최신의 MSP430시리즈(MSP430F55xx, MSP430F54xxA , MSP430F461x1, MSP430F461x, CC430F513x , CC430F612x, CC430F613x device, MSP430FG2xx, MSP430Fx63x)를 지원한다. 물론 무료버전이라 8Kbyte 제한이 있다.


Code Composer Studio v4 : 링크
TI에서 제공하는 MSP430 컴파일러. IAR보드 제한사항이 적고 잘쓰면 거의 무료로 사용가능하다.

 
예제 소스코드 
MSP430F5529 USB (HID, Mouse, Keyboard, CDC...) 예제 코드
TI에서 USB관련 예제 소스코드를 제공하고 있다. 물론 IAR데모 버전에서도 돌아가는 예제이다. 



[MSP430F55x EVM] USB 커넥터
MSP430F55xx는 하드웨어 적으로 USB기능이 있어 USB가 필요한 곳에서 많이 사용될것 같다.



MSP430F5529 이용하여 보드 조립
128k Flash/8k Ram, 80핀 LQFP의 MSP430F5529를 이용하여 보드를 제작했다. 이정도면 테스트용으로 넉넉하지 않을까...



USB2UART를 이용하여 디버깅 가능
[M-Type EVM]은 기본적으로 USB2UART, Bluetooth, RF(Zigbee) 인터페이스가 가능하여 디버깅이 용이하다.



MSP430F55xx EVM 확장 테스트 보드
표준 핀맵으로 제작해 여러 확장 보드에 연결하여 테스트 가능하도록 했다.



센서 인터페이스 보드


TFT LCD, VS1003 MP3 모듈, W5100 이더넷 모듈 테스트 보드





[MSP430F5529 EVM] 테스트 동영상

Posted by nexp

댓글을 달아 주세요

  1. 김교범

    이 보드 구매는 어디서 하나요?

    2010.06.07 15:27 [ ADDR : EDIT/ DEL : REPLY ]