Eu tenho um dispositivo USB que provavelmente é um barramento CAN e estou tentando interagir com ele. Eu estou querendo saber se alguém pode oferecer algum conselho para investigar e descobrir quais serviços estão disponíveis. Suponho que um bom lugar para começar seria verificar se é ou não um ônibus CAN. Eu não tenho certeza como fazer isso, no entanto.
Especificamente, estou conectado à interface USB para um helicóptero quad DJI Phantom. É um pequeno drone autônomo.
Aqui está o que eu tenho até agora:
Se eu chamar o lsusb
com o drone conectado e ligado,
Bus 003 Device 003: ID fff0:0008
é novo. lsusb -vvv
fornece os detalhes adicionais:
Bus 003 Device 003: ID fff0:0008
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 2 Communications
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0xfff0
idProduct 0x0008
bcdDevice 1.00
iManufacturer 1 DJI CONFIF
iProduct 2 DJI CONTROLLER
iSerial 3 0001A0000000
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 75
bNumInterfaces 2
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Association:
bLength 8
bDescriptorType 11
bFirstInterface 0
bInterfaceCount 2
bFunctionClass 2 Communications
bFunctionSubClass 2 Abstract (modem)
bFunctionProtocol 0 None
iFunction 4 VCOM
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 2 Communications
bInterfaceSubClass 2 Abstract (modem)
bInterfaceProtocol 0 None
iInterface 4 VCOM
CDC Header:
bcdCDC 1.10
CDC Call Management:
bmCapabilities 0x01
call management
bDataInterface 1
CDC ACM:
bmCapabilities 0x02
line coding and serial state
CDC Union:
bMasterInterface 0
bSlaveInterface 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0010 1x 16 bytes
bInterval 2
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 10 CDC Data
bInterfaceSubClass 0 Unused
bInterfaceProtocol 0
iInterface 4 VCOM
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 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 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
Device Status: 0x0000
(Bus Powered)
se eu chamar o udevadm
e remover o cabo USB do quadriciclo, eu recebo:
UDEV [41256.502177] remove /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/tty/ttyACM0 (tty)
UDEV [41256.502247] remove /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.1 (usb)
UDEV [41256.502286] remove /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0 (usb)
UDEV [41256.502346] remove /devices/pci0000:00/0000:00:14.0/usb3/3-2 (usb)'
and when I plug it in...
'UDEV [41261.068689] add /devices/pci0000:00/0000:00:14.0/usb3/3-2 (usb)
UDEV [41261.070265] add /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0 (usb)
UDEV [41261.071507] add /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.1 (usb)
UDEV [41261.072843] add /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0/tty/ttyACM0 (tty)
Então eu tento tratá-lo como uma interface de barramento CAN. Parece bem com o comando:
sudo slcand -o -s6 -t hw -S 1000000 /dev/ttyACM0
i.e. sem mensagens de erro e
sudo ip link set up slcan0
cria a interface de rede slcan0
e ifconfig
mostra agora:
slcan0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
A partir disso, alguém pode dizer se esse é realmente um barramento CAN que estou interagindo? Ou eu estou andando no caminho errado?