[ST_MICRO]/STM322009. 11. 14. 00:29

STM32-MP3 모듈 보드 제작

STM32-MP3 모듈 보드 제작



MP3모듈을 테스트 할 수 있는 [STM32 MP3 Module]를 제작했다. 굴러다니는 STM32F101 이 많아서 소형으로 테스트 모듈로 제작했는데 급하게 제작하다 보니 아쉬운 점이 많네... 그냥 저렴하고 간단한 MP3만들기에 좋지 않을까... 되려 AVR보다 저렴하고 성능도 좋다. 물론 동일한 핀맵의 STM32F103을 이용하면 USB기능도 추가할 수 있다.





VS1053 MP3 + SD Card Module + STM32



Posted by nexp

댓글을 달아 주세요

  1. 박원정

    관리자의 승인을 기다리고 있는 댓글입니다

    2011.07.18 15:35 [ ADDR : EDIT/ DEL : REPLY ]

[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

댓글을 달아 주세요

[ST_MICRO]/STM322009. 10. 17. 01:30

USB2CAN 보드 제작

USB2CAN 보드 제작



Main features
● Supports CAN protocol version 2.0 A, B Active
● Bit rates up to 1 Mbit/s
● Supports the Time Triggered Communication option
Transmission
● Three transmit mailboxes
● Configurable transmit priority
● Time Stamp on SOF transmission
Reception
● Two receive FIFOs with three stages
● 14 scalable filter banks/CAN cell - shared between CAN cells
● Identifier list feature
● Configurable FIFO overrun
● Time Stamp on SOF reception
Time Triggered Communication Option
● Disable automatic retransmission mode
● 16-bit free running timer
● Configurable timer resolution
● Time Stamp sent in last two data bytes
Management
● Maskable interrupts
● Software-efficient mailbox mapping at a unique address space
 
 
 
 
STM32 CAN 통신 모듈 블록도
3개의 Mailbox로 구성된 2개의 FIFO가 있어 총 6개의 Mailbox가 있다.



STM32 CAN인터럽트
인터럽트 소스는 여러가지 있지만 가장 많이 사용하게 될 소스는 CAN_RF0R, CAN_RF1R 이다. CAN 데이터가 Mailbox에 정상적으로 저장되면 이벤트를 발생하게 된다. 인터럽트 발생 하면 CAN FIFO에서 데이터를 꺼내오면 된다. 아래 코드를 보면 아주 간단하다는 것을 알 수 있다.




인터럽트 Handler 부분 
[stm32f10x_it.c]
void USB_LP_CAN_RX0_IRQHandler(void)
{
   wIstr = USB_Istr();
  
  if(CAN_GetITStatus(CAN_IT_FMP0) == SET)
  {
    CAN_Receive(CAN_FIFO0, &gRxMessage);
  
   gFlagCanInt = 1;  
  }
}
인터럽트 발생하면CAN_Receive() 함수를 이용해 데이터를 가져오면 된다.



USB와 CAN은 동일한 인터럽트 핸들러를 공유 하므로 고려할 부분이 있는데... 일단 USB, CAN을 동시에 사용하면 문제가 있는것 같다.

메뉴얼을 살펴보니 USB와 CAN은 512-SRAM을 사용하고 있는데... 이를 동시에 사용할 수 없다고 되어 있다. 버퍼를 잘 관리해서 쓰면 불가능 하지는 않겠지만 USB드라이버 쪽을 다시 제작해야 하는 아주 큰 문제가 발생할것 같다...
The USB and CAN share a dedicated 512-byte SRAM memory for data transmission and reception, and so they cannot be used concurrently (the shared SRAM is accessed through CAN and USB exclusively). The USB and CAN can be used in the same application but not at the same time.

물론 CAN포트가 2개 있는 칩으로 하면 문제 없지만 그러면 가격이 상승된다. 저렴한 CAN to USB 장치를 만드는 것이 목적 이었기 때문에 결국 이 문제를 해결하기 위해 다른칩(LM3S5x)으로 해결해야 했다.

USB2CAN 보드(http://nexp.tistory.com/966) 참고
Posted by nexp
TAG Can, STM32

댓글을 달아 주세요

  1. 비밀댓글입니다

    2010.10.17 20:12 [ ADDR : EDIT/ DEL : REPLY ]

[ST_MICRO]/STM322009. 9. 22. 18:25

IAR EWARM 5.4 컴파일러 테스트 - STM32 예제

IAR EWARM 5.4 컴파일러 테스트 - STM32 예제
IAR에서 새로릴리즈 된 EWARM 5.4 32k 무료 버전을 다운로드해서 테스트 해 보았다.
 
왜 이넘들은 업데이트 하면서 호환이 되지 않도록 한것인지... 다음을 위해 정리해 본다.

왜 이넘들은 업데이트 하면서 호환이 되지 않도록 한것인지... 다음을 위해 정리해 본다.
 
EW ARM 5x 버전으로 STM32 예제 컴파일 하기
ST에서 제공하는 STM32 예제 소스 um0427 기준으로 테스트 프로젝트 생성 방법을 정리하려한다.
um4027 압축을 풀면  examples, library, project가 있고 project폴더를 복사해서 프로젝트를 생성하면 된다.
 
기존 예제와 호환을 위해 나는 아래와 같이 폴더를 재 구성했다.(상황에 따라서 폴더 배치는 편하게 정하면 되지만 한번 설정하면 바꾸지 않는것이 좋은것 같다.)
um0427\examples -> ST제공 예제
um0427\FWLib\library -> ST제공 Lib파일
um0427\project -> 프로젝트 파일(이 폴더를 복사해서 원하는 형태로 변경한다. 예. prj1_gpio)
um0427\prj1_gpio -> 수정할 프로젝트 파일. examples에 있는 예제중 테스트하기 위한 파일을 복사해 사용하면 된다.
 
수정된 STM32 프로젝트 파일 및 예제

예) 테스트할 예제가 GPIO일경우
임의로 prj1_gpio 폴더를 생성하고 project를 복사하고 GPIO 폴더에 있는 예제 파일을 prj1_gpio에 덮어 쉬운다.



EW-ARM을 실행하고 프로젝트를 연다.
프로젝트 옵션 수정
기본적인 옵션은 그냥 사용하면 되고 패스를 수정한 폴더 형태로 잡아주면 된다.
예)
$PROJ_DIR$\..\
$PROJ_DIR$\..\..\
$PROJ_DIR$\..\..\FWLib\library\inc


 
출력포멧 설정 -> bin파일로 설정 (STM32 다운로더 사용하기 위해)



컴파일 해 보면 에러가 발생한다. 예제마다 사용하는 LIB파일이 달라서 발생하는 에러이다.
stm32f10x_conf.h 파일에서 LIB 정의를 수정하거나 필요없는 파일을 프로젝트에서 제거하면 된다.
쉬운 방법으로 *마크로 에러가 발생한 FWlib 그룹의 파일을 선택해서 프로젝트에서 제거해 주면 된다.


필요한 Lib 파일만 이용해서 컴파일 한 결과 오류없이 잘 컴파일 된것을 확인 할 수 있다.

Posted by nexp
TAG iar, STM32

댓글을 달아 주세요

[INTERFACE]/ZIGBEE2009. 9. 20. 22:16

Zigbee 이용 3축 자이로, 가속도 센서 데이터 전송


Zigbee 이용 3축 자이로, 가속도 센서 데이터 전송



보드의 MCU는 Cortex-M3 STM32를 사용하였고 3축 가속도, 3축 자이로 센서를 포함하여 Zigbee무선 네트웍을 이용하여 ADC 6채널, PWM 6채널을 무선 제어 가능하다.

Zigbee를 이용한 무선으로 센서 데이터 전송 테스트 동영상



외부 ADC입력으로 VR값 무선 전송 테스트 동영상



멀티모듈 제어 테스트 동영상
Zigbee를 이용하여 다수 보드의 LED를 무선으로 제어하는 테스트.

Posted by nexp

댓글을 달아 주세요