2009-07-24 3 views
10

이것은 직접 프로그래밍과 관련된 것으로 간주되지 않을 수 있지만 다른 곳에서 물어볼 부분이 없습니다. 나는 다양한 웹 사이트를 보려고했지만 지금까지 Google은 내 친구가 아니 었습니다.CDC 장치 용으로 자체 호스트 측 USB 드라이버를 작성해야합니까?

내가 개발중인 장치가 연결될 수있는 다양한 Windows/Linux/Mac 플랫폼 용 자체 장치 드라이버를 작성해야하는지, 기능이 표준 드라이버에서 제공되는지 여부를 알아내는 데 어려움이 있습니다.

내 장치는 COM : 포트로 나타나는 USB CDC (통신 장치)입니다. 또한 장치를 열거하면 USB 커넥터에서 끌어 올 수있는 전체 5 단위로드 (500mA) 공급 전류를 필요로하는 배터리 충전기가 포함됩니다. 내 문제는 호스트의 USB 드라이버가 전체 전원 전류를 전달할 수 없다고 결정하면 장치를 열거하지 못한다는 것입니다.

표준 구성 드라이버가이 구성을 사용하여 장치를 열거 할 것이므로 폴백으로 장치에서 인터페이스 장치 커넥터로부터 1 단위로드만을 끌어낼 수있는 두 번째 구성 집합을 제공하는 경우,

+0

이러한 것들이 허용되는지 확인하려면 먼저 USB 사양을 조사해야한다고 생각합니다. 사양에서 허용하는 경우 표준 브라우저가 지원할 것입니다. – kgiannakakis

+0

USB 2.0 사양에서 장치 설명자는 여러 구성을 허용하며 각 구성은 인터페이스에서 일정량의 전력이 필요하다는 것을 지정할 수 있습니다. 그런 다음 나는이 다양한 구성 중에서 선택하는 것이 드라이버에게 달려 있다고 생각합니다. –

답변

6

시스템 VID 및 PID를 시스템 usbser.sys와 연결하는 Windows 용 .inf 파일을 작성해야합니다. 이 (당신의 VID와 진수의 PID()에 넣어 필요 yourcompany와 (있는 경우)를 교체하고, 당신이 원하는 날짜와 버전으로 빠른 DriverVer 라인 변경)처럼 내 보이는 :

; ----------------------------------------------------------------------------- 
; XP/2000 USB Comms Port Setup 
; ----------------------------------------------------------------------------- 

[Version] 
DriverVer=12/03/2008,1.0.0000.0000 
Signature="$Windows NT$" 
Class=Ports 
ClassGUID={4d36e978-e325-11ce-bfc1-08002be10318} 
Provider=%YourCompany% 

[DestinationDirs] 
DefaultDestDir=10,system32\drivers 
DriverCopyFiles=12 

[ControlFlags] 
ExcludeFromSelect = * 

[Manufacturer] 
%YourCOmpany%=YourCompanySerialPort 

[YourCompanySerialPort] 
%YourCompanyUSBSerialPort%=YOURCOMPANYUSB,USB\VID_1234&PID_ABCD 

; 
; Win 2000/XP 
; 
[YOURCOMPANYUSB] 
Include=mdmcpq.inf 
CopyFiles=FakeModemCopyFileSection 

[YOURCOMPANYUSB.HW] 
AddReg=YOURCOMPANYUSBAddReg.HW 

[YOURCOMPANYUSBAddReg.HW] 
HKR,,DevLoader,0,*ntkern 
HKR,,NTMPDriver,,"usbser.sys" 

[YOURCOMPANYUSB.Services] 
AddService=usbser, 0x00000002, FuncDrv_Service_Inst 

[FuncDrv_Service_Inst] 
DisplayName=%USBFilterString% 
ServiceType= 1 
StartType = 3 
ErrorControl = 0 
ServiceBinary = %12%\usbser.sys 

[Strings] 
YourCompany="YourCompany" 
YourCompanySerialPort="Your Company USB Serial Port" 
USBFilterString = "USB Serial Service" 

참고이 32 비트 OS에서 작동 만 . 파일 헤더가 그렇게 말하지는 않지만 Vista에서도 작동합니다!

usbser.sys의 일부 버전에는 정확한 64 바이트 배수의 패킷을 전송할 때와 같이 bluescreening을 포함하여 심각한 문제가 있음에 유의하십시오. XP SP2 또는 이전 버전을 사용하는 경우 핫픽스 KB943198을 설치하십시오. XP SP3과 Vista는 괜찮습니다.

Mac의 경우 장치 클래스를 올바르게보고하면 드라이버 스캔이 올바른 드라이버를 선택하기 만하면됩니다. (Windows는 .inf 파일을 제공해야하는 이유 인 장치 클래스를 무시합니다).

편집 : 죄송합니다. 분명히해야합니다. 전체로드를 이끌어 낼 수 없다면 열거하지 않아도됩니다. 가능한지 확실하지 않습니다.

+1

장치 관리자로 가야하는 사용자가 아닌이 드라이버를 자동으로 설치하려고합니다 (작동하지만). 나는 마우스 오른쪽 버튼으로 클릭하여 설치하고 http://stackoverflow.com/questions/677686/how-do-i-deploy-a-inf-based-driver에 설명 된 방법을 사용해 보았습니다. 두 경우 모두 장치를 연결하면 새 하드웨어 마법사가 나타나며 장치 관리자의 포트 아래에 나타나지만 연결된 드라이버가 없습니다. 몇 가지 세부 정보 : –

+0

... Windows XP 및 Cypress 칩을 사용하려고합니다. Cypress는 상당히 다른이 .inf 파일 (http://www.cypress.com/?rID=40248)을 제공합니다. 예를 들어 CopyFiles는 FakeModemCopyFileSection이 아닌 DriverCopyFiles로 설정됩니다. 어떠한 제안? –

+0

우리 회사에서 만든 수많은 제품의 드라이버로 usbser.sys를 사용했으며 Windows XP의 "새 하드웨어 발견 마법사"를 피할 수있는 쉬운 방법을 찾지 못했습니다. 그럴 경우 알려주십시오. 좋은 소식은 동일한 inf 파일을 사용하면 inf 파일을 설치 한 후 장치를 연결하면 드라이버가 Windows Vista 및 Windows 7에 마법사없이 자동으로 설치 될 수 있다는 것입니다. –

1

나는 힘 문제에 대해 확실하지 않지만 ther는 pleanty CDC 드라이버 (또는 나는 거기에 있다고 생각한다.) 그래서 당신은 하나를 사용할 수있다. 전원 문제에 대해서는 많은 구성을 가진 솔루션이 좋을 것입니다. USB 애널라이저가있는 직장에서이 문제가 발생하지는 않았지만 때로는 집에서 USB로 전원을 필요로하는 3 개 이상의 다른 장치가있을 때 열거 오류가 발생했습니다. 나는 이것이 새로운 장치에 전원을 공급할 수 없다면 운영 체제의 선택이라고 생각한다. 전원을 끌 수 없으므로 절대로 꺼내야한다. 이것은 USB standart를 오히려 점검하는 나의 견해입니다.

1

디바이스가 호스트 OS가 이미 지원하는 디바이스 ID를보고하는 경우 드라이버는 필요하지 않습니다.

기존 USB uart를 가장해야 할 수도 있습니다. 데이터 시트를 쉽게 이용할 수 있습니다. (하지만 이미 알고있는 것으로 나타났습니다.)

호스트 OS가 다중 구성 아이디어를 존중할 지 확신하지 못합니다.

하지만 우리 모두 알고 있도록 펀트주세요!

+0

장치 ID는 공급 업체 ID와 제품 ID로 구성되며, 해당 공급 업체 ID의 소유자는 자신의 ID 도용에 감사하지 않을 수 있습니다. 물론 문제는 없지만 그러한 장치를 판매하지 않는 개인 프로젝트의 경우. – MSalters

+0

물론, 자신의 ID를 얻는 것은 그렇게 비싸지 않으며, 우리는 모두 당신의 놀라운 장치를 사고 싶습니다. 맞습니까? –

1

드라이버 질문에 맞습니다. 장치를 연결하고 열거 과정을 거치면 < 100mA를 유지해야합니다. 호스트는 구성을 조사하고 결정합니다. 서로 다른 출력 레벨을 지원하는 드라이버가 둘 이상인 경우 드라이버는 적절한 구성을 선택해야합니다. 고전력 만 사용되고 사용할 수없는 경우 장치를 열거하지 않습니다. 일반적으로 CDC를 수행하는 표준 드라이버는 가능한 다른 장치 수준 구성을 인식하지 못하기 때문에이를 처리하기 위해 어느 정도의 사용자 지정이 필요합니다.

1

장치가 USB CDC-ACM 장치로 Windows 데스크톱 호스트에 연결하는 경우 windows 데스크톱은 이미 usbser.sys 드라이버를 제공합니다. 그러나 Windows Vista에는 몇 가지 문제가 있습니다. 바탕 화면에 usbser.sys를 설치하려면 inf가 필요합니다. WinCE의 경우 드라이버가 없으므로 타사 공급 업체로부터 서면 요청을 받아야합니다. 자기가 그 호스트가 디바이스 자체 전원 기능에 의존하는 것이 그 장치 설명에 전원으로 장치 자체를 지정하는 경우 여기에 하나

http://www.em.avant-garde-lab.com/Products.html

입니다. 자세한 내용은 usb.org를 참조하십시오. 감사합니다. .