USB 20与UVC 11 在Webcam FW传输设定.docx
《USB 20与UVC 11 在Webcam FW传输设定.docx》由会员分享,可在线阅读,更多相关《USB 20与UVC 11 在Webcam FW传输设定.docx(48页珍藏版)》请在冰豆网上搜索。
USB20与UVC11在WebcamFW传输设定
題目:
USB2.0與UVC1.1在WebcamF/W傳輸設定
尚立Webcam高級工程師Aladdin
前言:
Webcam使用USBVideoClass1.1以及使用USB2.0的通訊協定將Webcam的影像資料傳輸到PC或NB,如果有支援聲音則使用USBAudioClass1.0的協定
內容:
Webcam可以從程式設定了解USB協定
(1)設定StandardDevice
主要設定USB2.0HighSpeed的StandardDeviceDescriptor,定義在USB2.0Spec.Table9.8
設定USB版本,產品的VID,PID,SerialNumber....等
0x00,0x12,//lengthofdevicedecriptor
//DeviceDescriptor
0x12,//bLength:
0x12byte
0x01,//bDescriptorType:
DEVICE
0x00,0x02,//bcdUSB:
version2.00
0xEF,//bDeviceClass:
independentinterfaces
0x02,//bDeviceSubClass:
2
0x01,//bDeviceProtocol:
classspecificprotocolsNOTusedondevicebasis
0x40,//bMaxPacketSize0:
maximumpacketsizeforendpointzero
0xF2,0x04,//idVendor:
vendorID
0xC3,0xB2,//idProduct:
productID
0x27,0x11,//bcdDevice:
devicereleasenumberinBCD
0x01,//iManufacturer:
indexofstring
0x02,//iProduct:
indexofstring
0x00,//iSerialNumber:
indexofstring
0x01,//bNumConfigurations:
1configuration
解釋
Offset0->bLength:
為這個Descriptor的長度為18Bytes,,占1Byte,設定為0x12
Offset1->bDescriptorType,這個Descriptortype,占1Byte,為0x01
Offset2->bcdUSB,USB通訊的版本,占2個Bytes,由於是支援USB2.0,所以要設定0x00,0x02(傳輸先傳低位元組再傳高位元組)
Offset4->bDeviceClass,USB_IF對這DeviceClass的編碼,0xEF
Offset5->bDeviceSubClass,USB_IF對這DevicesubClass編碼,0x02
Offset6->bDeviceProtocol,USB_IF對這DeviceProtocol編碼,0x01
Offset7->bMaxPacketSize,傳輸最大數據包的Size,只可以定義8,16,32,64,這裡定義為64Bytes,為0x40
Offset8->idVendor,為產品的VID根據USB-IF定義,占2bytes,0xF2,0x40
Offset10->idProduct,定義產品的PID,占2bytes,0xC3,0xB2
Offset12->bcdDevice,可定義產品的版本,占2bytes,0x27,0x11
Offset14->iManufacturer,製造廠商,利用index選擇Strings,0x01
Offset15->iProduct,產品名稱,利用index選擇Strings,0x02
Offset16->iSerialNumber,序號,利用index選擇Strings,0x00
Offset17->bNumConfigurations,結構的編號,使用Configuration1,0x01
這個Devicedescriptor傳輸到NB或PC,在Windows的系統的硬體識別碼顯示VID,PID,與Rev
(2)其他速率傳輸設定
Device_QualifierDescriptor,設定非HighSpeedUSBDeviceDescriptor,如Webcam也有支援FullSpeed傳輸,定義在USBSpec.Table9.9
F/W設定為
0x00,0x0A,//lengthofdevicequalifierdescriptor
//DeviceQualifierDescriptor
0x0A,//bLength:
0x0Abyte
0x06,//bDescriptorType:
DEVICEQUALIFIER
0x00,0x02,//bcdUSB:
version2.00
0xEF,//bDeviceClass:
independentinterfaces
0x02,//bDeviceSubClass:
2
0x01,//bDeviceProtocol:
classspecificprotocolsNOTusedondevicebasis
0x40,//bMaxPacketSize0:
maximumpacketsizeforendpointzero
0x01,//bNumConfigurations:
1configuration
0x00,//bReserved:
0x00
解釋
Offset0,為bLength,這DeviceQualifier為10bytes,0x0A
Offset1,為bDescriptorType,設定為0x06
Offset2,為bcdUSB,USB通訊的版本,占2個Bytes,由於是USB2.0,所以要設定0x00,0x02
Offset4,為bDeviceClass,USB-IF對這Device的class編碼,0xEF
Offset5,為bDeviceSubClass,USB-IF對這Device的subclass編碼,0x0x02
Offset6,為bDeviceProtocol,USB-IF對這Device的protocol編碼,0x0x01
Offset7->bMaxPacketSize,傳輸最大數據包的Size,只可以定義8,16,32,64,這裡定義為64,為0x40
Offset8->bNumConfigurations,結構的編號,使用Configuration1,0x01
Offset9->bReserved,保留,需設定0x00
(3)顯示語言編碼
顯示Webcam字串的語言編碼,定義在USB2.0Spec.Table9.15
F/W設定
0x00,0x04,//lengthoflanguageidstringdescriptor
//LanguageIDStringDescriptor
0x04,//bLength
0x03,//bDescriptorType:
STRING
0x09,0x04,//bString:
English(US)
解釋
Offset0為bLength,因指定義一種語言所以為0x04
Offset1為bbDescriptorType,String的Descriptor為0x03
Offset2為wLANGID[0],占2bytes,英文編碼為0x09,0x04參考USBLanguage編碼
(4)產品名稱編碼
Webcam的產品名稱,定義在USB2.0Spec.Table9.16
F/W設定
0x00,0x32,//lengthofproductstringdescriptor
0x32,//ProductStringDescriptor
0x03,//bLength
0x53,0x00,
0x50,0x00,
0x43,0x00,
0x41,0x00,
0x32,0x00,
0x32,0x00,
0x38,0x00,
0x31,0x00,
0x20,0x00,
0x57,0x00,//'W'
0x65,0x00,//'e'
0x62,0x00,//'b'
0x20,0x00,//''
0x43,0x00,//'C'
0x61,0x00,//'a'
0x6D,0x00,//'m'
0x65,0x00,//'e'
0x72,0x00,//'r'
0x61,0x00,//'a'
0x20,0x00,
0x20,0x00,
0x20,0x00,
0x20,0x00,
解釋
Offset0為bLength,更具字串+2來定義Length
Offset1為bDescriptorType,設定字串的Descriptor為0x03
Offset2~OffsetN設定字串編碼,使用Unicode碼,每個字為2Bytes
這個Stringsdescriptor傳輸到NB或PC,在顯示名稱會秀出如USBCamera
2.傳輸設定:
主要設定USB2.0的Configuration及UVC1.1的定義處理如feature,resolution...等等
可分為FullSpeedUSB定義及HighSpeedUSB定義,兩者的Descriptor類似只是參數設定不同,
(1)USBConfiguration
F/W編碼
//ConfigurationDescriptor
0x09,//bLength:
0x09byte
0x02,//bDescriptorType:
CONFIGURATION
0x81,0x05,//wTotalLength:
0x062dbyte
0x04,//bNumInterfaces:
2interfaces
0x01,//bConfigurationValue:
configuration1
0x00,//iConfiguration:
indexofstring
0x80,//bmAttributes:
buspowered
0xFA,//MaxPower:
500mA
這定義USB2.0傳送UVC及UAC的型態,規範在USB2.0Spec.Table9.10
解釋
Offset0為bLength,ConfigurationDescriptor的長度為9bytes,0x09
Offset1為bDescriptorType,ConfigurationDescriptortype,0x02
Offset2為wTotalLength,占2bytes為傳送USB2.0的UVC或UAC定義資料的全部長度,包括ConfigurationDescriptor,0x81,0x05(0x581bytes)
Offset4為bNumInterfaces,Interfacenumber,SPCA2281有Audio所以設定0x04,如沒有Audio設定0x02
Offset5為bConfigurationValue,為設定結構值,定義0x01
Offset6為iConfiguration,為設定這結構的描述字串指標,0x00
Offset7為bmAttributes,為設定bus的power狀況,D7為reserved必須設定為1,D6為是否要SelfPower,D5為遠端遙控開機功能,D4~D0為reserved設為0,所以為0x80
Offset8為bMaxPower,設定USBbus最大電流,每單為為2mA,所以0xfa=250即為500mA
(2)VideoInterfaceAssociationDescriptor
USB在Video介面接口關連描述(IAD)
定義在UVC1.1Spec.Table3-1
F/W設定
//VideoInterfaceAssociationDescriptor
0x08,//bLength:
0x08byte
0x0B,//bDescriptorType:
INTERFACEASSOCATIONDescriptor
0x00,//bInterfaceNumber:
interface0
0x02,//bInterfaceCount:
2
0x0E,//bFunctionClass:
0x0E
0x03,//bFunctionSubClass:
0x03
0x00,//bInterfaceProtocol:
classspecificprotocolNOTusedonthisinterface
0x02,//iFunction:
2
解釋
Offset0為bLength,IAD長度為8bytes,0x08
Offset1bDescriptorType,InterfaceAssociationdescriptortype,Value=11,0x0B
DescriptorTypes編號
Offset2為bFirstInterface為第一個Videocontrolnumber,設定0x00
Offset3為bInterfaceCount為鄰近的interface總數,設定0x02(Webcam,NBorPC)
Offset4為bFunctionClass,VideoInterfaceClasscode的CC_VIDEO,0x0E
Offset5為bFunctionSubClass,設定SC_VIDEO_INTERFACE_COLLECTION
0x03
Offset6為bFunctionProtocol,必須設為PC_PROTOCOL_UNDEFINED,0x00
Offset7為iFunction,這界面字串的指標,0x02
(3)StandardVCInterfaceDescriptor
設定基本VideoControl介面的Descriptor,定義UVC1.1SpecTable3-2
F/W設定
//VideoControlInterfaceDescriptor
0x09,//bLength:
0x09byte
0x04,//bDescriptorType:
INTERFACE
0x00,//bInterfaceNumber:
interface0
0x00,//bAlternateSetting:
alternatesetting0
0x01,//bNumEndpoints:
1endpoint
0x0E,//bInterfaceClass:
0x0E
0x01,//bInterfaceSubClass:
0x01
0x00,//bInterfaceProtocol:
classspecificprotocolNOTusedonthisinterface
0x02,//iInterface:
indexofstring
解釋
Offset0為bLength,這VCinterfaceDescriptor固定長度為9Bytes,0x09
Offset1為bDescriptorType,介面Descriptortype,0x04
Offset2為bInterfaceNumber,介面數,設定為0
Offset3為bAlternateSetting,間隔數的設定,設為0間隔,0x00
Offset4為bNumEndpoints,端點的設定,需設為1,0x01
Offset5為bInterfaceClass,設定為CC_VIDEO,0x0E
Offset6為bInterfaceSubClass,設定SC_VIDEOCONTROL,0x01
Offset7為bInterfaceProtocol,沒使用必須設PC_PROTOCOL_UNDEFINED,0x00
Offset8為iInterface,介面descriptor描述字串指標,設定0x02
(4)Class-specificVCInterfaceHeaderDescriptor
主要是設定Class-specific的totallength及DeviceclockFrequency,參考UVCSpecTable3-3
F/W設定
//Class-specificVideoControlInterfaceHeaderDescriptor
0x0D,//bLength:
0x0Dbyte
0x24,//bDescriptorType:
0x24
0x01,//bDescriptorSubType:
VC_HEADERsubtype
0x00,0x01,//bcdVDC:
Revisionofclassspecificationthatthisdeviceisbasedupon
0x50,0x00,//wTotalLength:
Totalsizeofclass-specificdescriptors
0x00,0x6C,0xDC,0x02,//dwClockFrequency:
48MHz
0x01,//bInCollection:
Numberofstreaminginterfaces
0x01,//baInterfaceNr
(1):
InterfacenumberofthefirstVideoStreaminginterface
解釋
Offset0為bLength,基本Length為12,另外增加1Byte的interfacenumber,為13,0x0D
Offset1為bDescriptorType,設定CS_INTERFACE,為0x24
Offset2為bDescriptorSubType,要設VC_Header,0x01
Offset3為bcdUVC,定義VideoDeviceClassSpecificationreleasenumber,占2bytes,0x00,0x01
Offset5為wTotalLength,定義class-specificVideoControlinterfacedescriptor的全部長度,占2bytes,為0x50,0x00
Offset7為dwClockFrequency,裝置的clockFrequency,為48MHz->48000000->02DC6C00,占4bytes,0x00,0x6C,0xDC,0x02
Offset11為bInCollection,為VideoStreamingnumber,設定0x01
Offset12為baInterfaceNr
(1),為第一個VideoStreaming有多少interface,為0x01
(5)Input(Camera)TerminalDescriptor
設定VideoControlCameraInputTerminalDescriptor,參考UVCSpecTable3-6
F/W設定
//VideoControlCameraTerminalDescriptor
0x12,//bLength:
0x12byte
0x24,//bDescriptorType:
0x24
0x02,//bDescriptorSubType:
VC_INPUT_TERMINALsubtype
0x01,//bTerminalID:
IDofthisinputterminal
0x01,0x02,//wTerminalType:
ITT_CAMERAtype.
0x00,//bAssocTerminal:
Noassocation
0x00,//iTerminal:
Unused
0x00,0x00,//wObjectiveFocalLengthMin:
Nooptionalzoomsupported
0x00,0x00,//wObjectiveFocalLengthMax:
Nooptionalzoomsupported
0x00,0x00,//wOcularFocalLength:
Nooptionalzoomsupported
0x03,//bControlSize:
ThesizeofthebmControlsis2bytes
0x0A,0x00,0x00,//bmControls:
CameraTerminalcontrolsaresupported
解釋:
Offset0為bLength,設定0x12
Offset1為bDescriptorType,設定CS_INTERFACE,0x24
Offset2為bDescriptorSubtype,設定VC_INPUT_TERMINAL,0x02
Offset3為bTerminalID,為InputterminalID,0x01
Offset4為wTermina