2009-02-05 7 views
8

SPI 인터페이스를 통해 마이크로 컨트롤러와 통신 할 임베디드 장치 용 장치 드라이버를 작성해야합니다. 결국 USB 인터페이스는 업데이트 된 코드를 외부에서 다운로드하고 확인 단계에서 사용됩니다.임베디드 장치 용 USB - 장치 드라이버/프로토콜 스택 설계

제 질문은 누구나 임베디드 시스템에서 USB 프로토콜 스택/장치 드라이버의 구현/디자인을 다루는 좋은 참조 디자인이나 설명서 또는 온라인 자습서를 알고 있습니까? 나는 650 페이지의 USB v2.0 스펙을 읽기 시작한 순간부터 다소 어려움을 겪고있다.

FYI와 마찬가지로, 사용중인 마이크로 컨트롤러는 프리 스케일 9S12입니다.

마크

나는 다음과 같은 정보를 추가하고 싶었 goldenmean의 (-AD) 의견에 근거 :

1) 임베디드 디바이스는 사용자 정의 임원을 사용하고 COTS 또는 RTOS 전혀 사용하지 않습니다를.

2) 장치는 데이터를 장치에서 검색 할 준비가되었음을 나타 내기 위해 인터럽트를 사용합니다.

3) Linux에 관한 몇 가지 문서를 읽었지만 Linux에 익숙하지 않았기 때문에 현재로서는별로 도움이되지 않습니다 (매우 빠르게 진행되기를 기대하지만).

4) 디자인 접근 방식은 적어도 USB 장치 용 장치 드라이버를 작성한 다음 장치 드라이버 상단에 USB 프로토콜 계층 (I/O)이 있어야 데이터를 해석 할 수 있습니다. 나는 이것이 틀릴 수도 있지만 이것이 최선의 방법이라고 생각합니다.

편집 - 그들은 내가 다시 USB 장치에서 작동하지 않을 경우 내 마음에서 사라져 전에 년 후

난 그냥 몇 가지 항목을 공유하고 싶었다. 코드를 개발할 때 몇 가지 어려움을 겪었습니다.

첫 번째 문제는 USB 장치가 호스트에 연결되었을 때 (Windows의 경우 Windows) 호스트가 재설정 요청을 발행했기 때문입니다. USB 장치는 인터럽트 활성화 플래그를 재설정하고 지 웁니다. 나는이 일이 일어났다는 것을 알기에 충분한 문학을 읽지 않았기 때문에 Set-Up Request Interrupt를 결코받지 못했다. 이것을 이해하는 데는 꽤 시간이 걸렸습니다.

두 번째 문제는 Set_Configuration에 대한 설정 요청을 올바르게 처리하지 못했기 때문입니다. 나는 그것을 처리하고 있었지만이 설정 요청이 들어 왔을 때 USB 장치가 ACK를 보내지 않았다는 점에서 요청을 올바르게 처리하지 못했습니다. 결국 하드웨어 USB 프로토콜 분석기를 사용하여 이것을 발견했습니다.

내가 겪었던 다른 문제가 있었지만, 이것들은 나에게 꽤 많은 시간이 걸렸습니다. 필자가 염두에 두어야 할 또 다른 문제는 빅 엔디안 및 리틀 엔디안 인 Freescale 9S12 대 USB 데이터 형식 (Intel)입니다.

나는 과거에했던 UART 장치 드라이버와 유사한 USB 장치 드라이버를 만들었습니다. 다음 URL에 코드를 게시했습니다.

http://lordhog.wordpress.com/2010/12/13/usb-drive

나는 그들이 (예 MAX3420_SETUP_DATA_AVAIL_INT_REQR은 0x20) # 정의를 사용하는 것만 큼 포털하지 않기 때문에 사람들이 그들처럼되지 않을 수도 있습니다, 구조를 많이 사용하는 경향이 있지만, 더 많은 코드를 만드는 것이므로 내가 그들을 좋아 나를 위해 읽을 수 있습니다.누군가 그것에 관한 질문이 있으시면 언제든지 이메일을 보내 주시면 그것에 대한 통찰력을 갖도록 노력하겠습니다. "USB Complete : The Developer 's Guide"라는 책은 집중해야 할 영역을 알고있는 한 도움이되었습니다. 이것은 간단한 응용 프로그램이었고 저속 USB 만 사용했습니다.

답변

3

나는 USB Complete by Jan Axelson의 이전 버전을 사용했습니다. 실제로 매우 완벽합니다.

지금의 제 4 판에, 범용 직렬 버스 (USB) 인터페이스이 개발자 가이드는 하드웨어 설계, 장치 펌웨어 및 호스트로 프로젝트 개발의 모든 측면을 커버 : 편집 리뷰에서

응용 소프트웨어.

+0

Marcelo, 감사합니다. 정보를 주시면 감사하겠습니다.하지만이 책이 나올 때까지 장치 드라이버와 프로토콜 계층을 개발해야합니다. 나는 같은 저자가 다른 책을 주문했다. – lordhog

+0

흠, 아직 보지 못했다. 미안해. 그러나 나는 그것이 당신에게 쓸모가 있다는 것이 행복합니다. =) 그녀의 책은 훌륭합니다. –

+0

USB 장치 프로토콜에 대해 물어봤을 때, 이것은 기술 담당자가 추천 한 책이었습니다. – Spike0xff

5

인터페이스 (USB, 병렬 포트 등)에 대한 장치 드라이버를 작성하는 동안 개발해야하는 코드는 운영 체제 (OS)가 있는지, 해당 프로세서/마이크로 컨트롤러에서 실행중인 RTOS . 예 : 그것이 실행될 것이라면 WinCE가 말합니다 - 그것은 자체 Driver Development Kit를 가지며 장치 드라이버 개발에 따라야 할 단계입니다. 리눅스, 심비안 같은 다른 OS와 동일합니다.

프로세서/마이크로 컨트롤러를 제어 할 일반 펌웨어 코드 (OS 없음)가 될 경우, 그것은 전혀 다른 상황입니다.

1) 프로세서/마이크로 컨트롤러 개발 보드의 하드웨어 사양 - - 등 파일, 포트, 메모리 레이아웃을 등록 이 그래서 u는에 위의 상황 중 하나를 기반으로, 하나는 & 이해 읽을 필요

2. USB 사양

3.) 포인터 몇 개를 빠르게 찾았습니다. Google은 친구 야, 친구 야! 는 http://www.lrr.in.tum.de/Par/arch/usb/usbdoc/ - 리눅스 USB 장치 드라이버는

http://www.microsoft.com/technet/archive/wce/support/usbce.mspx

-AD

0

난 당신이 사용할 계획하지만이 유연 가정중인 하드웨어 모른다는 ST 마이크로는 USB/SPI와 마이크로 컨트롤러의 라인을 제공합니다 지원 및 해당 부품과 함께 사용할 수있는 C 코드 라이브러리를 제공합니다. - 저는 ARM7 시리즈 마이크로를 오랫동안 사용해 왔으며 큰 성공을 거두었습니다.

1

내가 왜 궁금한데, 왜 9S12를 골랐습니까? 나는 이전 직장에서 그것을 사용하고 기쁘지 않았다.

  • 그것은 우리가 C에 대해 좋아하고, 그러나 수시로 발생하는 버그가 C++
  • 이진 프로젝트 파일이있는 형편 IDE 있었다 수있는 메트로 웍스
    • 사용 형편 gcc가 지원을했다!
  • 9s12도 느리고 많은 명령이 5 사이클로 실행되었습니다.
  • 전력 효율성은 그다지 좋지 않습니다.
  • 배럴 시프터가없고 임베디드 코드에서 일반적인 동작이 느립니다.
  • 저렴하지 않습니다.

내가 더 싫어하는 점은 8051입니다.저는 현재 직장에서 ARM CortexM3을 사용하고 있으며, 모든면에서 9S12보다 우수합니다 (더 빨라진 시계, 더 많은 작업이 클럭 당, 적은 전력 소비, 저렴하고 좋은 gcc 지원, 32 비트 vs. 16 비트).

+0

프로젝트 파일을 바이너리에서 텍스트 기반 (XML)으로 전환 할 수 있지만 전반적인 Codewarrior는 여전히 매우 형편 없습니다. 그들은 현재 Eclipsed 기반 IDE에서 작업하고 있습니다. – cschol

0

텍사스 대학교 (University of Texas)의 조나단 발 바노 (Jonathan Valvano) 교수가 유지 관리하는 우수한 사이트입니다. 그는저기서 4 개의 과목을 가르치고 (3 명의 학부생, 1 명의 졸업생), 모두 9S12 마이크로 컨트롤러 사용에 관한 것입니다. 그의 사이트에는 모든 강의 노트, 실험실 매뉴얼, 더 중요한 것은 모든 수업에 사용되는 초보자 파일이 포함되어 있습니다.

웹 사이트는 90 년대의 것으로 보이지만 조금만 둘러보고 필요한 모든 것을 찾아야합니다. 이 LUFAV-USB 라이브러리 훌륭의 때문에

users.ece.utexas.edu/~valvano/

+0

이 사이트를 확인하고 코드를 살펴 보았지만 RS-232에서 USB 인터페이스로 데이터를 이동하는 것이 더 많았습니다. 그래서 대부분의 코드는 USB보다 UART와 인터페이싱했다. – lordhog

0

당신의 다음 MCU 프로젝트에 대한 AVR을 고려하십시오.

+0

하지만 일반적으로 플랫폼 선택을 결정하는 것은 하드웨어 및 시스템 엔지니어링 그룹입니다. 나는 일반적으로 Green Hills라는 컴파일러 도구를 선택한다. 나는이 문제에 대해 어떤 의견을 말하고 있으나 제한적이다. – lordhog

0

저는 Atmel V71을 사용하는 프로젝트를 진행하고 있습니다. 이 프로세서는 매우 강력하며 칩 상에 제공되는 많은 하이 엔드 커넥티비티 중 480Mhz 또는 48Mhz (USB 3.0 아님)를위한 장치 또는 호스트 모드를 수행하는 USB 엔진이 있습니다. 이 도구는 무료이며 모든 USB 스택 코드가있는 수많은 호스트 및 장치 USB 예제 프로젝트가 제공됩니다. 10 종점을 지원하며 모든 전송은 DMA를 통해 이루어 지므로 대부분의 프로세서 마력을 다른 작업에 사용할 수 있습니다. Atmel USB 스택은 RTOS 없이도 작동합니다.