[INTERFACE]/USB2009. 10. 22. 19:30

[STM32] USB 전송속도 테스트

USB 전송 속도 테스트

2009-10-23 19:44:20 금요일
HID방식 데이터 전송 속도 테스트
STM32 USB를 이용하여 HID 데이터 전송 속도 테스트 진행하였다.
64byte 벌크 전송으로 1000개의 버퍼를 보내도록 하고 시작 시간과 종료시간을 측정한 결과 2초가 걸렸다.
초당 전송속도 = (64 x 1000)/2 = 32KByte/s


USB 스펙상 11Mbps =  1.375Mbyte/s 인데...
물론 실제로 USB Bulk 데이터 전송을 위해 3번의 트랜젝션이 필요하므로 하므로 실제 458Kbye/s가 최대 속도가 될테고 PC단 드라이버에서 처리 때문에 반정도 줄어 들어 250Kbyte이상 힘들긴하다. 그래도 7배 이상 차이가 난다.

PC에서 보낼때 for문 돌면서 다른 프로그램에 의해 우선순위가 낮아져 전송 명령 자체가 지연되지 않을까... 그래서 Thread로 전송해 보면 어떨까?
테스트 해보니 Thread를 사용해도 똑같다.
원래 HID속도가 이정도 인가?

1번의 트랜젝션이 이뤄지는데 걸리는 시간을 측정해 보니 2ms걸린다.





STM32에서 HID로 USB전송 속도 테스트를 했다.

64바이트 보내는는데 걸리는 시간을 알아보기 위해 USB엔드포인트 실행 함수 EP1_OUT_Callback() 의 수행 시간을 측정해 보니 6.8us가 걸린다.

혹시나 해서 인터럽트 처리시간을 측정해 보았다.
인터럽트 걸릴때 CTR_LP()함수가 수행 되므로 시간을 측정해 보니 9usw정도가 걸린다.

하지만 연속 전송을 해 보니 아주 느려진다.
두번의 트랜잭션을 일으킬때 2ms시간이 걸린다.

결국 64바이트 전송하는데 걸리는 시간은 2ms로 보면 된다. 1초에 32Kbyte정도 전송할 수 있다고 보면 될것 같다.

USB스펙상 1ms로 보내려면 벌크전송 방식을 써야 하는건가? 너무 느린데...


192kByte이미지를 보내는데 약 3.9초가 걸린다. 초당 50kByte정도 보낸다는 소리인데...
실제로 코드상에서 한번에 54Byte씩 데이터를 실어서 보낸다


->코드 옵티마이즈 하고 스크립트 수정하니 1번 트랜젝션에 1ms 걸린다.
STM32의 USB 관련 코드를 좀더 옵티마이즈 해서 TFT LCD 출력 속도를 높혀 보았다.



Posted by nexp

댓글을 달아 주세요

[INTERFACE]/USB2009. 9. 10. 22:21

PIC18F14K50 USB HID 테스트 - USB 동작시 주의사항

PIC18F14K50 USB HID 테스트 - USB 동작시 주의사항



17번 핀은 3.3V USB모듈에 연결되는 전원 레귤레이터 이므로 콘덴서만 연결하면 된다. 5V공급하면 USB구동이 안된다.



PIC18F14K50 HID 테스트 동영상

Posted by nexp

댓글을 달아 주세요

[INTERFACE]/USB2009. 6. 3. 12:38

[USB HID] 디바이스 드라이버 초기화 않되는 문제 발생


[myUSB-Sensor]
어떤 PC(HP)에서 디바이스 드라이버 초기화 않되는 문제 발생
HID_FindTheHID()함수에서 Create()함수 옵션 설정수정(GENERIC_WRITE만으로 설정) 하니 정상 동작한다.
 
   //Open a handle to the device.
   m_DeviceHandle=CreateFile  (m_detailData->DevicePath,
    GENERIC_WRITE, //GENERIC_READ
    FILE_SHARE_READ|FILE_SHARE_WRITE,
    NULL,
    OPEN_EXISTING,
    0,
    NULL);
Posted by nexp

댓글을 달아 주세요

[INTERFACE]/USB2009. 5. 9. 11:34

[TUSB3210 EVM] USB 전송 테스트

[TUSB3210 EVM] USB 전송 테스트



USB테스트 할 일이 있어 [TUSB3210 EVM] 보드를 꺼내서 예전해 테스트했던 USB전송 테스트 프로그램을 정리했다.
USB기능이 있는 소형 [ PIC18F2450 EVM ]보다는 상당히 구식이지만... MCU자체 USB로 다운로드 가능하므로 개발환경이 상당히 간단해 빨리 테스트 하기에는 상당히 편리하다.



테스트 동영상
Posted by nexp
TAG TUSB3210, USB

댓글을 달아 주세요

  1. 비밀댓글입니다

    2009.05.15 19:24 [ ADDR : EDIT/ DEL : REPLY ]

[INTERFACE]/USB2008. 10. 5. 21:22

[ATmega8-s EVM] USB HID Keyboard 예제 작성

[ATmega8-s EVM] USB HID Keyboard 예제 작성

사용자 삽입 이미지



[AVR-USB 소프트웨어 스텍] 을 이용하여 USB키보드를 제작해 보았다.
ATmega8 보드에 USB를 연결하면 장치관리자에 "HID 키보드 장치"로 인식되는 것을 확인할 수 있다.




Keyboard 처리
KEY_DATA_REPORT m_KeyBuffer[NUM_KEYS + 1] =
{
 {0, 0},                     // no key pressed
 {MOD_SHIFT_LEFT, KEY_1},
    {MOD_SHIFT_LEFT, KEY_2},
};

void ProcessKeyboard(void)
{
  if(!(ReadKey() & SW1_VALUE))
 {
  if(!m_SwFlag[0])
  {
   //Key Press
   m_SwFlag[0] = 1;
   
   Led1On();
   SendUsbReport(&m_KeyBuffer[1], sizeof(KEY_DATA_REPORT));
  }
 }
 else
 {
  if(m_SwFlag[0])
  {
   Led1Off();
   SendUsbReport(&m_KeyBuffer[0], sizeof(KEY_DATA_REPORT));  
   m_SwFlag[0] = 0;
  }
 }

:

}


Atmeg8 USB Keyboard 예제 소스코드
//-----------------------------------------------------------------------------
int main(void)
{
 Led1Init();Led2Init();
 Led1Off();Led2On(); 

 InitKeyboard(); 
 
 usbInitFunction();
 enable();

 for(;;)
 {
  usbPoll();
  
  ProcessKeyboard();
 }
 return 0;
}
//-----------------------------------------------------------------------------


사용자 삽입 이미지
Posted by nexp

댓글을 달아 주세요