2010-06-14 8 views
2

나는 이것이 아마도 쉬운 일은 아니라는 것을 알고 있지만 USB를 사용하여 마이크로 컨트롤러와 PC를 연결하려고합니다. 나는 마이크로 컨트롤러의 내부 USART 또는 RS232 변환 USB를 사용하고 싶지 않다.이 프로젝트는 다양한 원리를 이해할 수 있도록 내재되어있다.Windows에서 USB 제어하기

마이크로 컨트롤러 측면에서 의사 소통을하는 것은 케이크입니다. 즉, 내가 프로토콜을 알고있을 때 정확한 타이밍으로 직접 제어 할 수 있기 때문에 마이크로 상에 구현하기가 쉽습니다.

그러나 이것은 PC의 경우가 아닙니다. 나는 연결된 장치를 다루는 Windows 개념에 익숙하지 않다. 이전 질문 중 하나에서 Windows가 드라이버를 통해 장치와 어떻게 작동하는지 묻습니다. 나는 Windows의 내부 사용을 위해 드라이버가 OS에 사용할 수있는 몇 가지 기본 기능 집합을 가져야한다는 것을 이해했습니다. 내 말은, OS가 HDD에 액세스하려고 할 때, HDD 드라이버 (OS에서 내부 일 가능성이 있음)를 특정 "질문"과 함께 호출하기 때문에 HDD 드라이버가 Windows와 협력하여 적절한 기능을 작성해야한다는 의미입니다. OS에 의해 호출 될 장소. 비슷한 점은 GPU, DirectX조차도 DirectX가 드라이버의 특정 기능을 호출해야한다는 것입니다. 따라서 드라이버는 DX로 작업해야합니다. 나도 알아, WinAPI에서 많은 기능은 독자적으로 작동하지만, "단순한"윈도우도 프레임 버퍼에 쓰여져 있어야하며, 드라이버가 지정한 주소로 MMIO를 사용해야합니다. 내가 맞습니까?

그래서 Windows에는 내부적으로 사용되는 기능이 있으며 WinAPI의 일부는 일반적으로 사용되는 것들과 함께 작동하도록 설계되었습니다. 제조업체가 설계 한 드라이버에 문의하십시오. 그러나 Windows가 Paralel 포트를 통해 통신 할 수있는 방법이 없기 때문에 이것은 완전히 사실이 아닌 것처럼 보입니다. WinAPI에는 직렬 포트로 작업 할 기능이 없지만 HDD, GPU 등에서 사용할 수있는 기능이 있습니다.

그러나 이제는 내가 잃어버린 부분이 있습니다. 따라서 Windows에는 USB 플래시 메모리를 처리하는 등 USB를 통해 통신 할 수있는 기본 제공 기능이 있어야한다고 생각합니다. 그래서, 그 기능을 통해 USB를 작동하도록 설계된 WinAPI 함수가 있습니까? 아니면 직접 USB를 사용하고 싶을 때, 원하는 USB 드라이버 기능을 직접 호출해야합니까? 당신이 USB 컨트롤러에 보낼 필요가있는 것은 모두 디바이스 주소와 정보입니다. 내 말은, 나는 새로운 드라이버를 써야하지 않는다는 뜻이다. 이 경우 WinAPI 기능을 호출하거나 원래의 USB 드라이버를 직접 호출하십시오. 이 중 어떤 것이 의미가 있습니까?

답변

1

평생 동안 자신의 드라이버를 쓰지 않으려면 USB 상단에 HID (휴먼 인터페이스 장치) API를 사용해보십시오. "휴먼 인터페이스 (Human Interface)"라고하는데 실제로 인간이 제어하는 ​​장치 일 필요는 없습니다. 장점은 최신 OSes에는 HID 드라이버가 이미 포함되어 있으며 시작하려면 here을 찾을 수있는 것과 같은 샘플 코드를 사용할 수 있다는 것입니다. 많은 마이크로 컨트롤러 제조업체는 프로토콜 임베디드에 적합한 코드를 제공합니다.

OSes는 이미 HID를 이해하고 있기 때문에 HID 인터페이스를 사용하여 장치를 만들면 어떤 OS에서나 읽을 수있을뿐 아니라 많은 응용 프로그램이 해당 장치와 대화 할 수 있다는 것을 알게 될 것입니다. 통신은 HID의 작은 하위 집합으로 제한됩니다. 예를 들어, 뮤직 앱용 입력 장치를 만들었지 만 놀랍게도 직장에서 사용하고 다른 OS에서 실행되는 3D 애니메이션 응용 프로그램에 그대로 꽂을 수 있다는 것을 알았습니다. 추가 코드 라인!)

+0

안녕하세요, 한 가지 더 질문 할 수 있습니까? 제대로 이해한다면 HID는 실제로 USB 드라이버와 통신하기위한 WinAPI 부분이지만 여전히 USB 드라이버는 데이터를 장치로 보내거나 거꾸로 보낼 수 있어야합니다. 그러면 USB 드라이버를 직접 인식 할 수 있습니까? 나는 실제로 C standart 라이브러리, WinAPI 또는 .net 클래스 외부의 무언가와 함께 일한 적이 없다. –

+0

모든 작업을 수행하는 HID 드라이버가 이미 설치되어 있어야합니다. (제 경험은 불행히도 Windows에서는 안됩니다.) 제 13 장 [here] (http://proyectosfie.com/html/usb/libro/)은 Windows에서 HID에 관한 것입니다.) 나는 당신이 필요하다고 생각하지 않습니다. 운전자에 대해 아는 것이 있습니다. 단 하나는 존재합니다. – sigfpe

+0

감사합니다. 빨리 질문 할 수 있을까요? 내가 USB 웹캠을 가지고 있고 그것이 웹캠과 함께 작동하도록 설계된 WinAPI 기능으로 작동하기를 원합니다. (심지어 아무 것도 없다, 그냥 이론) 그럼, WinPAI와 일부 일반 USB 드라이버 (그냥 USB 드라이버에서 몇 가지 send() 함수를 호출) 사이에 일부 번역기를 쓸 것인가, 내 드라이버 내에서 전체 USB 통신을 작성해야할까요? ? USB 컨트롤러와의 모든 통신을 의미합니까? –

0

USB에는 USB 플래시 드라이브 (USB 대용량 저장 장치)를 지원하는 것과 같은 많은 재고 기능이 포함되어 있습니다. 마이크로 컨트롤러 인터페이스를위한 가장 흥미로운 두 가지는 HID와 CDC입니다. CDC는 구식 직렬 포트를 직접 에뮬레이트하므로 가장 쉽게 사용할 수 있습니다.

마이크로 컨트롤러가 CDC 장치로 작동하도록 구성하면 Windows에서이를 직렬 포트로 열거하고 모든 이전 직렬 API가 작동합니다.

관련 문제