У меня есть какое-то последовательное устройство, подключенное через USB-устройство CDC-ACM, поэтому с ним можно связываться через / dev / ttyACM1 с точки зрения Linux.Конечное устройство - это устройство, которое содержит 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
Теперь - я хотел бы установить дату и время через этот CDC-АСМ соединение с использованием API ядра через USB.Я подумал, что достаточно отправить одну и ту же строку запроса для даты и времени через пакетную передачу ep1 и получить ответ через пакетную передачу ep81.Я попытался сделать это с помощью usb_bulk_msg (), и когда я отправляю строку запроса с этим proc - он возвращает 0. Далее, когда я отправляю запрос на чтение ответа с этого устройства, я получаю -110 (-ETIMEDOUT).
Похоже, ядро linux правильно отправляет мой первый запрос, потому что возвращает 0, но по некоторым причинам этот запрос не получен конечным устройством, потому что он ничего не ответил, потому что истекло время ожидания (-110).
Мне интересно, не пропустил ли я что-то с моим кодом, и поэтому он не работает.Есть идеи, что может быть не так?
Достаточно ли использовать только конечные точки на входе и выходе для связи с конечным устройством, или что-либо еще нужно сделать до правильной передачи?