[MSP430]/MSP430F20132009. 3. 18. 21:34

MSP430 I2C 전송 속도 테스트

MSP430 I2C 전송 속도 테스트




MSP430F2013 보드는 UART가 없어 I2C로 데이터를 수집테스트 정리

구성도
MSP430F2013 (I2C Slave) ->AVR (I2C Master) -> USB2Serial -> PC Host



AVR - > 8Mhz 구동
MSP430F2013 -> 16Mhz구동

2Byte 데이터 수집 속도 측정


H/W 구동시

100Khz
구동시 450us 소요된다.

150Khz 까지 구동 가능하고 이때는 300us 소요된다. (200Khz 이상부터 깨지기 시작한다.)

->메인클럭을 16Mhz까지 올리니 400khz도 문제 없이 잘 동작한다.
 

S/W I2C 구현시
AVR 8Mhz클럭에서  600us 소요된다.

 


H/W I2C
구현 예제

unsigned char ReadByte8( unsigned char add)

{

           unsigned char data_in = 0;

          

           i2c_start_wait(add);

           data_in = i2c_readAck(); 

           i2c_stop();

 

           return (data_in);

}

 

S/W I2C 구현 예제

unsigned char ReadByte8( unsigned char add)

{

           unsigned char data_in = 0;

          

           I2C_Start();

           #if _USE_I2C_DELAY

           Delay_us(I2C_DELAY);

           #endif

 

           I2C_PutByte(add);

           #if _USE_I2C_DELAY

           Delay_us(I2C_DELAY+10);

           #endif  

           I2C_Nack();

 

           #if _USE_I2C_DELAY       

           Delay_us(I2C_DELAY);

           #endif

 

           data_in = I2C_GetByte();

           #if _USE_I2C_DELAY

           Delay_us(I2C_DELAY);

           #endif

           I2C_Nack();

 

           //Delay_us(100);

           I2C_Stop();

 

           return (data_in);

}

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/WIZNET_EVM2008. 10. 31. 15:45

[W5100 EVB] Simple UDP Test - 4 channel loop back source code

[W5100 EVB] Simple UDP Test - 4 channel loop back source code

간단한 UDP 루프백 테스트 프로그램 작성. 4개의 소켓을 생성해 UDP로 받은 데이터를 다시 송신하는 예제이다.




4개의 클라이언트 프로그램으로 UDP로 접속해 loopback 테스트를 할 수 있다.




//-----------------------------------------------------------------------------

/**

 * UDP loopback program.

 */

void     loopback_udp(SOCKET s, uint16 port)

{

             unsigned int len;

             unsigned char buf[MAX_BUF_SIZE];

             unsigned char destip[4];

             unsigned int destport;

 

             switch(getSn_SR(s))

             {

                                                                                                                                                                                           // -------------------------------

               case SOCK_UDP:                                     //

                            if((len=getSn_RX_RSR(s)) > 0)                   // check the size of received data

                            {

                                        len = recvfrom(s,buf,len,destip,&destport);  // receive data from a destination

                                       

                                        if(len !=sendto(s,buf,len,destip,destport))  // send the data to the destination

                                        {

                                           printf("%d : Sendto Fail.len=%ld,",s,len);

                                           printf("%d.%d.%d.%d(%d)\r\n",destip[0],destip[1],destip[2],destip[3],destport);

                                        }

                            }

                            break;

                                                                                                                                                                                           // -----------------

               case SOCK_CLOSED:                                  // CLOSED

                            close(s);                                       // close the SOCKET

                            socket(s,Sn_MR_UDP,port,0);                  // open the SOCKET with UDP mode

                            break;

               default:

                            break;

             }

}

 

 

//-----------------------------------------------------------------------------

// Main function

//-----------------------------------------------------------------------------

void main(void)

{

             InitMCU();

             initUART();

             InitNET();

 

             printf("W5100 Simple UDP Loopback Test Program.\r\n");

             DisplayConfig();

            

             while(1)

             {

                           loopback_udp(0, 5000);

                           loopback_udp(1, 5001);                    

                           loopback_udp(2, 5002);

                           loopback_udp(3, 5003);                    

             }

}

//-----------------------------------------------------------------------------

Posted by nexp

댓글을 달아 주세요

[AVR]/Mega1282008. 10. 28. 22:35

[myAVR] M-Type AVR보드 제작

[myAVR] M-Type AVR보드 제작


Atmega128 보드를 새로운 형태로 제작했다. [M-Type EVM] 형태로 제작 했고, 50 I/O이상은 앞으로 이 표준으로 제작 할 예정이다. UART, SPI, PWM, I2C, Data8, Ctrl8, GPIO, CAN등의 표준을 지킬 생각이다.

LED, Switch, Buzzer, VR, SD Card, Data Flash 기본 테스트 페리가를 가지고 있다.



자이로, 가속도 등의 센서를 연결할 수 있도록 하고 USB, Ethernet(Enc28J60), Bluetooth등의 인터페이스도 표준으로 연결 가능하도록 했다.





Posted by nexp

댓글을 달아 주세요

[INTERFACE]/Ethernet2008. 9. 15. 09:50

초소형 W5300 Web Server Module 보드 제작

사용자 삽입 이미지
 

 AVR128, 64k SRAM Memory, 512k Flash Memory, W5300을 이용하여 초소형 웹서버 모듈을 만들었다.




Posted by nexp

댓글을 달아 주세요

[INTERFACE]/AVR_W5100_EVM2008. 6. 3. 22:50

[Mega128 EVM] TCP Server Loopback Test - Network 전송속도 측정

[Mega128 EVM] TCP Server Loopback Test - Network 전송속도 측정

사용자 삽입 이미지


소스코드



Atmega128 16AU와 W5100을 이용하여 네트웍 속도 측정을 위해 TCP Loopback 프로그램을 작성해 테스트 해보았다.
PC쪽 프로그램은 Wiznet에서 제공하는 AX Loopback Test Program을 이용하였다.





먼저 Mega128 EVM에 loopbak프로그램을 다운로드 하여 서버모드로 Lesten한다.
AX프로그램을 설치 하고 실행하여 서버( [Mega128 EVM]보드 )에 접속(Connection)을 한다.


IP주소와 포트 번호 입력



접속이 되면 TCP전송을 클릭하면 전송할 파일을 선택할수 있고, 여기서는 간단히 이미지 파일을 이용해서 테스트 했다.
물론 다른 파일도 가능하다.



연속으로 테스트 결과 송신 5.288Mbps, 수신 5.2783Mbps가 나온다. 물론 단반향이므로 실제 속도는 두배로 생각하면 된다. 따라서  다이렉트 모드로(BUS Access) W5100을 이용하여 AVR atMega128에서 10Mbps이상의 전송속도가 나온다.



인다이렉트 모드의 경우 3.6146Mbps로 측정된다.




SPI모드로 측정하면 600KBps정도 측정이 된다.

Posted by nexp

댓글을 달아 주세요