首页 文章

使用I / O套件访问串行至USB设备

提问于
浏览
10

我有以下问题:我有一个Wintec WBT-202 GPS设备,它能够通过USB传输位置数据作为NMEA数据 . 在这个USB内部它只是一个USB到串行桥,它使用标准 usbser.sys 驱动程序在Windows下运行 .

我的问题是让它在Mac OS X下运行 .

The hardware USB GPS鼠标使用Atmel AT91SAM7S256芯片,该芯片也负责USB接口 .

在Mac OS X下 The problem 没有任何事情发生 . 在 /dev 下没有创建新的字符设备来使该设备可访问 .

在Windows下,使用标准驱动程序 usbser.sys . 只有一个.inf文件将vendorID和productID指向此驱动程序 . 从在Windows上使用Snoopy Pro(USB嗅探软件)我知道,一旦设备正确初始化,它就会将数据作为ASCII NMEA字符串发送,这就是我想要的 .

Question 1 Mac OS X是否有 usbser.sys 等价物?如果是,可以使用无代码kext来确保驱动程序匹配正确吗?

如果这不起作用,我会从用户空间使用IOKit向设备发送和接收消息 . 我仍然对这将如何工作有疑问,因为我不完全理解苹果的文档 . 如果连接了USB设备,则会发生驱动程序匹配 . 如果找不到驱动程序会发生什么 .

Question 2 可能是因为某些通用USB驱动程序从用户空间加载到内核中我能够使用它吗?我怎么知道正确的驱动程序已加载?

Question 3 我看到WWDC08中有一个"getting started with I/O Kit"会话有没有办法访问这个会话视频?

我附上了USBProbe的一些日志和I / O注册表摘录 .

任何关于我如何开始哪些文档提供一个体面的教程的评论将不胜感激 .

我查看了Mac OS X Internals - Amit Singh的系统内部,Apple的文档"Getting started with I/O Kit","I/O Kit Fundamentals Guide"以及USB私有数据样本 .

APPENDIX

USB Probe

Full Speed device @ 8 (0xFD360000): .............................................   Communication device: "WINTEC WBT202 CDC"
    Port Information:   0x0019
           Captive
           External Device
           Connected
           Enabled
    Device Descriptor   
        Descriptor Version Number:   0x0200
        Device Class:   2   (Communication)
        Device Subclass:   0
        Device Protocol:   0
        Device MaxPacketSize:   8
        Device VendorID/ProductID:   0x03EB/0x6119   (Atmel Corporation)
        Device Version Number:   0x0100
        Number of Configurations:   1
        Manufacturer String:   0 (none)
        Product String:   1 "WINTEC WBT202 CDC"
        Serial Number String:   0 (none)
    Configuration Descriptor   
        Length (and contents):   67
            Raw Descriptor (hex)    0000: 09 02 43 00 02 01 00 C0  32 09 04 00 00 01 02 02  
            Raw Descriptor (hex)    0010: 00 00 05 24 00 10 01 05  24 01 01 00 04 24 02 02  
            Raw Descriptor (hex)    0020: 05 24 06 00 01 07 05 83  03 40 00 0A 09 04 01 00  
            Raw Descriptor (hex)    0030: 02 0A 00 00 00 07 05 01  02 40 00 00 07 05 82 02  
            Raw Descriptor (hex)    0040: 40 00 00 
        Number of Interfaces:   2
        Configuration Value:   1
        Attributes:   0xC0 (self-powered)
        MaxPower:   100 ma
        Interface #0 - Communications-Control   
            Alternate Setting   0
            Number of Endpoints   1
            Interface Class:   2   (Communications-Control)
            Interface Subclass;   2
            Interface Protocol:   0
            Comm Class Header Functional Descriptor   
                Raw Descriptor (hex)   0000: 05 24 00 10 01 
            Comm Class Call Management Functional Descriptor   
                Raw Descriptor (hex)   0000: 05 24 01 01 00 
            Comm Class Abstract Control Management Functional Descriptor   
                Raw Descriptor (hex)   0000: 04 24 02 02 
            Comm Class Union Functional Descriptor   
                Raw Descriptor (hex)   0000: 05 24 06 00 01 
            Endpoint 0x83 - Interrupt Input   
                Address:   0x83  (IN)
                Attributes:   0x03  (Interrupt no synchronization data endpoint)
                Max Packet Size:   64
                Polling Interval:   10 ms
        Interface #1 - Communications-Data/Unknown Comm Class Model   
            Alternate Setting   0
            Number of Endpoints   2
            Interface Class:   10   (Communications-Data)
            Interface Subclass;   0   (Unknown Comm Class Model)
            Interface Protocol:   0
            Endpoint 0x01 - Bulk Output   
                Address:   0x01  (OUT)
                Attributes:   0x02  (Bulk no synchronization data endpoint)
                Max Packet Size:   64
                Polling Interval:   0 ms
            Endpoint 0x82 - Bulk Input   
                Address:   0x82  (IN)
                Attributes:   0x02  (Bulk no synchronization data endpoint)
                Max Packet Size:   64
                Polling Interval:   0 ms

IO Registry

8: WINTEC WBT202 CDC@fd360000  <class IOUSBDevice>
     AppleUSBCDC  <class AppleUSBCDC>
     IOUSBInterface@0  <class IOUSBInterface>
         AppleUSBCDCACMControl  <class AppleUSBCDCACMControl>
     IOUSBInterface@1  <class IOUSBInterface>
   bcdDevice   256 (0x100)
   bDeviceClass   2 (0x2)
   bDeviceProtocol   0 (0x0)
   bDeviceSubClass   0 (0x0)
   bMaxPacketSize0   8 (0x8)
   bNumConfigurations   1 (0x1)
   Bus Power Available   250 (0xfa)
   Device Speed   1 (0x1)
   idProduct   24857 (0x6119)
   idVendor   1003 (0x3eb)
   iManufacturer   0 (0x0)
   IOCFPlugInTypes   
       9dc7b780-9ec0-11d4-a54f-000a27052861   IOUSBFamily.kext/Contents/PlugIns/IOUSBLib.bundle
   IOGeneralInterest   IOCommand is not serializable
   IOUserClientClass   IOUSBDeviceUserClientV2
   iProduct   1 (0x1)
   iSerialNumber   0 (0x0)
   locationID   -46792704 (0xfd360000)
   Low Power Displayed   No
   non-removable   yes
   PortNum   6 (0x6)
   Requested Power   50 (0x32)
   sessionID   1167822359 (0x459b8e17459b8e17)
   USB Address   5 (0x5)
   USB Product Name   WINTEC WBT202 CDC

USB probe log on device attach

12.719 [5]   AppleUSBHub[0x6805a00]::ProcessStatusChanged found (0x      40) in statusChangedBitmap
   12.719 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(+) now (1)
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: port 6 obtained runLock
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: calling GetPortStatus for port 6
   12.719 [5]   AppleUSBHub[0x6805a00]::powerChangeDone - spawning _checkForActivePortsThread
   12.719 [5]   AppleUSBEHCI[0x65ea000]::FindControlBulkEndpoint (inactive) - linking to active list: 65997c0
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - Hub 0xfd300000 port 6 - Initial status(0x0101)/change(0x0001)
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - change 4 clearing feature 0x10.
   12.719 [5]   AppleUSBHub[0x6805a00]::ClearPortFeature port/feature (60010) - clearing
   12.719 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - status(0x0101) - change(0x0000) - before call to (4) handler function
   12.719 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler - handling port 6 changes (101,0).
   12.719 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler port (6) - waiting 100 ms before asserting reset
   12.819 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler - port 6 - no existing device found on port
   12.820 [4]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler port 6 status(0101)/change(0000) - no error from GetPortStatus
   12.820 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler - port 6 - device detected, calling AddDevice
   12.820 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(+) now (2)
   12.820 [5]   AppleUSBHubPort[0x6807200]::DefaultConnectionChangeHandler - port 6 done, ending.
   12.820 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - err (0) on return from  call to (4) handler function
   12.820 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: calling GetPortStatus for port 6
   12.820 [5]   ***** AppleUSBHubPort[0x6807200]::AddDevice - port 6 on hub at 0xfd300000 - start
   12.820 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - Hub 0xfd300000 port 6 - Initial status(0x0101)/change(0x0000)
   12.820 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - err = 0 - done, releasing _runLock
   12.820 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(-) now (1)
   12.820 [3]   AppleUSBHub[0x6805a00]::DecrementOutstandingIO(269), outstandingIO(0), _interruptReadPending(false) - rearming read
   12.820 [5]   AppleUSBHub[0x6805a00]::DecrementOutstandingIO(269) - spawning _checkForActivePortsThread
   12.820 [5]   ***** AppleUSBHubPort[0x6807200]::AddDevice - port 6 on hub at 0xfd300000 - bus 0x65ea000 - acquiring dev zero lock
   12.820 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - about to obtain device zero lock
   12.820 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - not already locked - obtaining
   12.820 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - setting _devZeroLock to true
   12.820 [5]   AppleUSBEHCI[0x65ea000]: Acquired Device Zero
   12.820 [5]   ***** AppleUSBHubPort[0x6807200]::AddDevice - port 6 on hub at 0xfd300000 - resetting port
   12.820 [5]   AppleUSBHub[0x6805a00]::SetPortFeature port/feature (60004) - setting
   12.821 [5]   ***** AppleUSBHubPort[0x6807200]::AddDevice - port 6 on hub at 0xfd300000 - (err = 0) done - returning .
   12.821 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(-) now (0)
   12.879 [5]   AppleUSBHub[0x6805a00]::ProcessStatusChanged found (0x      40) in statusChangedBitmap
   12.879 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(+) now (1)
   12.879 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: port 6 obtained runLock
   12.879 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: delaying 100ms before first GetPortStatus after a reset of port 6
   12.879 [5]   AppleUSBHub[0x6805a00]::powerChangeDone - spawning _checkForActivePortsThread
   12.979 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler: calling GetPortStatus for port 6
   12.979 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - Hub 0xfd300000 port 6 - Initial status(0x0103)/change(0x0010)
   12.979 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - change 1 clearing feature 0x14.
   12.979 [5]   AppleUSBHub[0x6805a00]::ClearPortFeature port/feature (60014) - clearing
   12.979 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - status(0x0103) - change(0x0000) - before call to (1) handler function
   12.979 [5]   ***** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - start - status(0x0103) change (0x0000)
   12.979 [5]   **1** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - delaying 10 ms
   12.989 [5]   **2** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - found full speed device
   12.989 [5]   **2** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - configuring dev zero
   12.989 [5]   AppleUSBEHCI[0x65ea000]::ConfigureDeviceZero, new method called with hub:3, port:6
   12.989 [5]   AppleUSBEHCI[0x65ea000]::CreateDevice, high speed ancestor hub:3, port:6
   12.989 [5]   AppleUSBEHCI[0x65ea000]::DoCreateEP, high speed ancestor hub:3, port:6
   12.989 [3]   AppleUSBEHCI[0x65ea000]::UIMCreateControlEndpoint(0, 0, 8, 1 @(3, 6))
   12.989 [5]   **3** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6 on hub at 0xfd300000 - getting dev zero desc
   12.990 [5]   **3** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6, using 8 for maxPacketSize
   12.992 [5]   **5** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6, Releasing DeviceZero after successful SetAddress to 5
   12.992 [5]   AppleUSBEHCI[0x65ea000]::UIMDeleteEndpoint: unlinking async endpoint
   12.993 [5]   AppleUSBEHCI[0x65ea000]::UIMDeleteEndpoint: Deallocating 0x68bd700
   12.993 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - about to release device zero lock
   12.993 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - releasing lock
   12.993 [5]   AppleUSBEHCI[0x65ea000]::ProtectedDevZeroLock - wakeup done
   12.993 [5]   AppleUSBEHCI[0x65ea000]:: Released Device Zero
   12.993 [5]   AppleUSBEHCI[0x65ea000]::CreateDevice, new method called with hub:3, port:6
   12.993 [5]   AppleUSBEHCI[0x65ea000]::CreateDevice, high speed ancestor hub:3, port:6
   12.993 [5]   AppleUSBEHCI[0x65ea000]::CreateDevice: addr=5, speed=full, power=500
   12.993 [5]   IOUSBDevice @ 5 (500mA available, full speed)
   12.993 [5]   AppleUSBEHCI[0x65ea000]::DoCreateEP, high speed ancestor hub:3, port:6
   12.993 [3]   AppleUSBEHCI[0x65ea000]::UIMCreateControlEndpoint(5, 0, 8, 1 @(3, 6))
   12.993 [5]   IOUSBDevice[0xd335c00]::GetDeviceDescriptor (size 18)
   12.994 [5]   IOUSBDevice[0xd335c00]::GetStringDescriptor Got string descriptor 1, length 36, got 36
   12.994 [5]   **10** AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler -  port 6, at addr: 5, Successful
   12.994 [5]   AppleUSBHub[0x6805a00]::GetPortInformation  for port[6]
   12.995 [5]   WINTEC WBT202 CDC[0xd335c00]::GetDeviceInformation  Hub device name is HubDevice at USB address 3
   12.995 [5]   AppleUSBHub[0x6656800]::GetPortInformation  for port[3]
   12.995 [5]   AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - Port 6 of Hub at 0xfd300000 (USB Address: 5), calling registerService for device WINTEC WBT202 CDC
   12.995 [5]   AppleUSBHubPort[0x6807200]::AddDeviceResetChangeHandler - port 6, err = 0, ALL DONE
   12.995 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - err (0) on return from  call to (1) handler function
   12.995 [5]   AppleUSBHubPort[0x6807200]::PortStatusChangedHandler - port 6 - err = 0 - done, releasing _runLock
   12.995 [3]   AppleUSBHub[0x6805a00]::ChangeRaisedPowerState(-) now (0)
   12.995 [3]   AppleUSBHub[0x6805a00]::DecrementOutstandingIO(274), outstandingIO(0), _interruptReadPending(false) - rearming read
   12.995 [5]   AppleUSBHub[0x6805a00]::DecrementOutstandingIO(274) - spawning _checkForActivePortsThread
   12.999 [5]   Finding device driver for WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDC, score: 69000, wildCard = 0
   12.999 [5]   Finding device driver for WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 106999, wildCard = 3
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::handleOpen - [0xdd78880] is not an IOUSBInterface
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::TakeGetConfigLock - calling through to ChangeGetConfigLock
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::ChangeGetConfigLock - setting _GETCONFIGLOCK to true
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::GetFullConfigurationDescriptor - Index (0) - getting first 4 bytes of config descriptor
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::GetConfigDescriptor (length: 4)
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::GetFullConfigurationDescriptor - Index (0) - getting full 67 bytes of config descriptor
   13.002 [5]   WINTEC WBT202 CDC[0xd335c00]::GetConfigDescriptor (length: 67)
   13.003 [5]   WINTEC WBT202 CDC[0xd335c00]::ReleaseGetConfigLock - calling through to ChangeGetConfigLock
   13.003 [5]   WINTEC WBT202 CDC[0xd335c00]::ChangeGetConfigLock - setting _GETCONFIGLOCK to false and calling commandWakeup
   13.503 [5]   WINTEC WBT202 CDC[0xd335c00]::TerminateInterfaces interfaceList 0 terminate: 1
   13.503 [5]   WINTEC WBT202 CDC[0xd335c00]::SetConfiguration to 1
   13.504 [5]   WINTEC WBT202 CDC[0xd335c00]::SetConfiguration  Found InterfaceDescription[0] = 0x68bc889
   13.504 [5]   WINTEC WBT202 CDC[0xd335c00]::SetConfiguration  Found InterfaceDescription[1] = 0x68bc8ac
   13.504 [5]   WINTEC WBT202 CDC[0xd335c00]::RegisterInterfaces interfaceArray 0x6de9b00
   13.504 [5]   WINTEC WBT202 CDC[0xd335c00]::RegisterInterfaces  matching to interface = 0x8261700
   13.553 [5]   Finding driver for interface #0 of WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 104999, wildCard = 5
   13.567 [5]   Finding driver for interface #0 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMControl, score: 50000, wildCard = 0
   13.570 [5]   AppleUSBEHCI[0x65ea000]::DoCreateEP, high speed ancestor hub:3, port:6
   13.570 [5]   AppleUSBEHCI[0x65ea000]: UIMCreateInterruptEndpoint endpoint does NOT exist (this is normal)
   13.570 [5]   AppleUSBEHCI[0x65ea000]::AllocateInterruptBandwidth - pED[0x68bd780] _speed(1)
   13.570 [3]   AppleUSBEHCITTInfo[0x682b400]::AllocatePeriodicBandwidth: pSPE[0x6f8ae40]
   13.570 [5]   AppleUSBEHCISplitPeriodicEndpoint[0x6f8ae40]::FindStartFrameAndStartTime - _FSBytesUsed (78)
   13.570 [5]   AppleUSBEHCISplitPeriodicEndpoint[0x6f8ae40]::FindStartFrameAndStartTime - using Start Time entry found - _startFrame(1) _startTime(36)
   13.570 [5]   AppleUSBEHCI[0x65ea000]::AllocateInterruptBandwidth - returning 0x0(success)
   13.571 [5]   AppleUSBHub[0x6805a00]::powerChangeDone - spawning _checkForActivePortsThread
   13.573 [5]   WINTEC WBT202 CDC[0xd335c00]::RegisterInterfaces  matching to interface = 0xd337700
   13.621 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 104999, wildCard = 5
   13.636 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMData, score: 50000, wildCard = 0
   14.024 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMData, score: 50000, wildCard = 0
   14.075 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 104999, wildCard = 5
   14.089 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMData, score: 50000, wildCard = 0
   14.090 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCECMData, score: 50000, wildCard = 0
   14.266 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCECMData, score: 50000, wildCard = 0
   14.315 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.iokit.IOUSBUserClient, score: 104999, wildCard = 5
   14.330 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCACMData, score: 50000, wildCard = 0
   14.330 [5]   Finding driver for interface #1 of WINTEC WBT202 CDC, matching personality using com.apple.driver.AppleUSBCDCECMData, score: 50000, wildCard = 0
   14.334 [5]   WINTEC WBT202 CDC[0xd335c00]::SetConfiguration  returning success

EDIT: appended the log file excerpt from console.app after device attach

16.02.11 09:05:55   kernel  0        0 AppleUSBCDCACMControl: getFunctionalDescriptors - Descriptors are incorrect, checking...
16.02.11 09:05:55   kernel  0        1 AppleUSBCDCACMData: start - Find CDC driver for data interface failed

4 回答

  • 2

    我发布到Apple的USB邮件列表得到的答案是Apple AppleUSBCDCACMData 驱动程序中有一个错误,它阻止了它的工作 . 我在Apple的雷达上提出了一个错误,希望他们能尽快修复它 .

  • 0

    它看起来像系统的CDC驱动程序正确匹配,这应该创建 /dev/ttyusbmodem* IIRC,我'd check the system logs for error messages in case this isn'工作 .

  • 3

    如果您是USB驱动程序编程器,则应下载AppleUSBCDCDriver项目的源代码,该项目包含AppleUSBCDCDriver.kext,AppleUSBCDCACMControl.kext,AppleUSBCDCACMData.kext,AppleUSBCDCECMControl.kext,AppleUSBCDCECMData.kext .

    我可以保证的是,你肯定可以通过修复代码并构建自己的驱动程序来解决这个问题 . (记得改变驱动程序的类名 . )

    我可以确认的是,AppleUSBCDCDriver主要是根据标准通信设备类规范设计的,包括Apple开发团队的考虑,这个问题不应该是一个bug .

    在Mac OS上,驱动程序匹配主要是根据驱动程序的info.plist,就像Windows上的.inf文件一样 .

  • 0

    AppleUSBCDCACMData 中提到的错误有一个解决方法 . 您需要为呼叫管理描述符分配接口 . 你把它设置为00 .

    你展示:

    Comm Class Call Management Functional Descriptor Raw Descriptor (hex) 0000: 05 24 01 01 00

    缺乏和分配 . 使用ATMEL USB库,它看起来像这样:

    // Class-specific call management functional descriptor`
    { sizeof(CDCCallManagementDescriptor),
    CDCGenericDescriptor_INTERFACE,
    CDCGenericDescriptor_CALLMANAGEMENT,
    CDCCallManagementDescriptor_SELFCALLMANAGEMENT,
    1 // <--needed for MacOS
    }
    

相关问题