各位大侠:<br />小弟在ZLG SMART D12开发板上使用CDC类开发USB转RS232,不需要写驱动(windows自带的usbser.sys),只需要提供一个INF文件,网上有很多的用AVR单片机做的例子,小弟想移植到51单片机上来,但是现在枚举不成功,获取配置描述符集合以后,就出现“由于向导无法找到需要的软件因此无法安装该硬件”的窗口,配置描述符如下(配置描述符也是仿照网上AVR单片机的):<br /><br />//ÅäÖÃÃèÊö·û<br />code USB_CONFIGURATION_DESCRIPTOR ConfigDescr =<br />{<br /> 9, /* bLength */ <br /> 2, /* descriptor type */ <br /> SWAP( CONFIG_DESCRIPTOR_LENGTH ), /* length of packed config descr. (16b) */ <br /> 0x02, /* number of interfaces */ <br /> 0x01, /* configuration value */ <br /> 0x00, /* configuration string index (none) */ <br /> 0x80, /* attributes (self-powered, no remote wakeup) */ <br /> 0xff, /* max power (0x0A * 2mA = 20mA) */ <br /> <br /> // ͨÐŽӿÚ<br /> /* Interface descriptor */<br /> 9, /* bLength */ <br /> 4, /* descriptor type */ <br /> 0x00, /* interface number */ <br /> 0x00, /* alternate setting */ <br /> 0x01, /* number of endpoints (excl. EP0) */ <br /> 0x02, /* CDC class */ /* interface class (USBTMC=0xFE) */ <br /> 0x02, /* Abstract (Modem) */ /* interface subclass (USB488=0x03) */ <br /> 0x01, /* AT-Commands */ /* interface protocol (0x01)*/ <br /> 0x00, /* interface string index (none) */ <br /><br /> /* CDC Class-Specific descriptor */<br /> 5, /* sizeof(usbDescrCDC_HeaderFn): length of descriptor in bytes */<br /> 0x24, /* descriptor type */<br /> 0, /* header functional descriptor */<br /> 0x10, 0x01,<br /><br /> 4, /* sizeof(usbDescrCDC_AcmFn): length of descriptor in bytes */<br /> 0x24, /* descriptor type */<br /> 2, /* abstract control management functional descriptor */<br /> 0x02, /* SET_LINE_CODING, GET_LINE_CODING, SET_CONTROL_LINE_STATE */<br /><br /> 5, /* sizeof(usbDescrCDC_UnionFn): length of descriptor in bytes */<br /> 0x24, /* descriptor type */<br /> 6, /* union functional descriptor */<br /> 0, /* CDC_COMM_INTF_ID */<br /> 1, /* CDC_DATA_INTF_ID */<br /><br /> 5, /* sizeof(usbDescrCDC_CallMgtFn): length of descriptor in bytes */<br /> 0x24, /* descriptor type */<br /> 1, /* call management functional descriptor */<br /> 0, /* allow management on data interface, handles call management by itself */<br /> 1, /* CDC_DATA_INTF_ID */<br /><br /><br /> 7, /* bLength */ <br /> 5, /* descriptor type */ <br /> 0x81, /* Endpoint dir'n (IN) & addr */ <br /> 0x03, /* Endpoint type */ <br /> SWAP(EP1_PACKET_SIZE),<br /> 10, /* Polling interval (unit=frame=1mS) */ <br /><br /> // Êý¾Ý½Ó¿Ú<br /> /* Interface Descriptor */<br /> 9, /* sizeof(usbDescrInterface): length of descriptor in bytes */<br /> 4, /* descriptor type */<br /> 1, /* index of this interface */<br /> 0, /* alternate setting for this interface */<br /> 2, /* endpoints excl 0: number of endpoint descriptors to follow */<br /> 0x0A, /* Data Interface Class Codes */<br /> 0,<br /> 0, /* Data Interface Class Protocol Codes */<br /> 0, /* string index for interface */<br /><br /> 7, /* bLength */ <br /> 5, /* descriptor type */ <br /> 0x82, /* Endpoint dir'n (IN) & addr */ <br /> 0x02, /* Endpoint type */ <br /> SWAP(EP2_PACKET_SIZE),<br /> 10, /* Interval - usually ignored for bulk */ <br /> <br /> 7, /* bLength */ <br /> 5, /* descriptor type */ <br /> 0x02, /* Endpoint dir'n (OUT) & addr */ <br /> 0x02, /* Endpoint type */ <br /> SWAP(EP2_PACKET_SIZE),<br /> 10, /* Interval - usually ignored for bulk */ <br />};<br />经过调试发现,配置描述符集合是正确发送给主机的,但主机没有找到驱动usbser.sys,提供的INF文件如下:<br /><br />; Windows USB CDC Setup File<br />; Copyright (c) 2000 Microsoft Corporation<br />; Copyright (c) 2007 ship_@163.com.<br /><br />[Version] <br />Signature="$Windows NT$" <br />Class=Ports<br />ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} <br />Provider=%COMPANY% <br />LayoutFile=layout.inf<br />DriverVer=03/01/2007,1.0.0.0<br /><br />[Manufacturer] <br />%MFGNAME% = ManufName<br /><br />[DestinationDirs] <br />DefaultDestDir=12 <br /><br />[ManufName] <br />%Modem3% = Modem3, USB\VID_0471&PID_0777<br /><br />;------------------------------------------------------------------------------<br />; Windows 2000/XP Sections<br />;------------------------------------------------------------------------------<br /><br />[Modem3.nt]<br />CopyFiles=USBModemCopyFileSection<br />AddReg=Modem3.nt.AddReg <br /><br />[USBModemCopyFileSection]<br />usbser.sys,,,0x20<br /><br />[Modem3.nt.AddReg] <br />HKR,,DevLoader,,*ntkern <br />HKR,,NTMPDriver,,usbser.sys <br />HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" <br /><br />[Modem3.nt.Services] <br />AddService=usbser, 0x00000002, DriverService<br /><br />[DriverService] <br />DisplayName=%SERVICE%<br />ServiceType=1<br />StartType=3<br />ErrorControl=1<br />ServiceBinary=%12%\usbser.sys <br /><br />;------------------------------------------------------------------------------<br />; String Definitions<br />;------------------------------------------------------------------------------<br /><br />[Strings] <br />COMPANY="ship_@163.com"<br />MFGNAME="mengrz"<br />Modem3="DpView" <br />SERVICE="USB-232 Emulation Driver"<br /><br />现在不知道问题出在哪里,希望大侠赐教<br /> |
|