我已经通过CDC-ACM USB设备连接了一些串行设备,因此从Linux的角度来看,可以通过/ dev / ttyACM1与之通信。 终端设备是包含RTC的设备,它允许我通过CDC-ACM从中获取当前日期和时间。它可以很好地在用户空间中正常工作。
以下是我的CDC-ACM USB设备的设备描述符:
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 2
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0xyyyy
idProduct 0xzzzz
bcdDevice 2.00
iManufacturer 1 xxxxxxxxxxxxxx
iProduct 2 yyyyyyyyyyyyyy
iSerial 3 zzzzzzzzzzzzzz
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 67
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 2
bInterfaceSubClass 2
bInterfaceProtocol 1
iInterface 0
CDC Header:
bcdCDC 1.10
CDC Call Management:
bmCapabilities 0x00
bDataInterface 1
CDC ACM:
bmCapabilities 0x02
line coding and serial state
CDC Union:
bMasterInterface 0
bSlaveInterface 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 255
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 10
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Device Status: 0x0001
Self Powered
现在-我想使用USB内核API通过此CDC-ACM连接设置日期和时间。我认为通过批量输出ep1发送相同的日期和时间请求字符串并通过批量输入ep81接收响应就足够了。我尝试使用usb_bulk_msg()进行操作,当我使用此proc发送请求字符串时-它返回0。接下来,当我发送请求以从该设备读取响应时,我得到-110(-ETIMEDOUT)。
似乎linux内核正在正确发送我的第一个请求,因为它返回0,但是由于某些原因,由于超时(-110)发生,它没有任何响应,因此最终设备未收到该请求。
我想知道我的代码是否没有遗漏任何东西,这就是为什么它不起作用的原因。有什么想法可能是错误的吗?
仅使用大容量输入和大容量输出端点与终端设备进行通信是否足够,还是在正确传输之前应该执行其他任何操作?