Ativando o I2C no Debian - o i2cdetect não mostra o dispositivo

1

Estou tentando fazer com que meu laptop se comunique com meu sensor SRF02, que está usando uma interface USB-I2C. Meu laptop está rodando Debian Jessie.

Problema:

Quando executo sudo i2cdetect -y 0 , não vejo nenhum dispositivo. Isso é o mesmo para a porta 1, mas além disso, muitos dispositivos são exibidos em locais aleatórios (por exemplo, a porta 4 mostra uma tabela quase cheia). Em nenhum dos portos < 3 é o EX70, que é o local padrão do dispositivo.

Eu tentei carregar automaticamente o i2c-dev na inicialização, mas o problema persiste. Os documentos do módulo dizem que você precisa do driver FTDI VCP, mas isso deve ser incluído no kernel Linux.

Estou convencido de que este é um problema de software porque consegui obter dados usando exatamente o mesmo dispositivo e a configuração de um computador que executa o Windows 8.

Existem muitas postagens sobre isso, mas todas são especificamente baseadas em Raspberry Pi, e usam os pinos Raspbian e GPIO ao invés de USB.

EDITAR: Aqui está um link para a saída do dmesg logo após conectar o dispositivo. O log é muito grande para postar aqui: P link

Agradecemos antecipadamente

Máximo

    
por Slidon 28.01.2017 / 15:53

2 respostas

2

As linhas relevantes de dmesg são:

[  518.172735] usb 1-3: new full-speed USB device number 4 using xhci_hcd
[  518.306677] usb 1-3: New USB device found, idVendor=0403, idProduct=6001
[  518.306686] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  518.306689] usb 1-3: Product: FT232R USB UART
[  518.306692] usb 1-3: Manufacturer: FTDI
[  518.306695] usb 1-3: SerialNumber: AK04P01W
[  518.309382] ftdi_sio 1-3:1.0: FTDI USB Serial Device converter detected
[  518.309442] usb 1-3: Detected FT232RL
[  518.309445] usb 1-3: Number of endpoints 2
[  518.309448] usb 1-3: Endpoint 1 MaxPacketSize 64
[  518.309450] usb 1-3: Endpoint 2 MaxPacketSize 64
[  518.309453] usb 1-3: Setting MaxPacketSize 64
[  518.309771] usb 1-3: FTDI USB Serial Device converter now attached to ttyUSB0

Estas são as linhas relevantes, porque os timestamps pertencem a eles, como reação ao que acontece quando você faz o plugin do dispositivo, e eles acontecem por tempo suficiente após as mensagens de boot, então não há nenhuma conexão com isso.

Como você pode ver, um novo dispositivo USB é detectado, você recebe detalhes do dispositivo e, em reação a isso, o módulo ftdi_sio é carregado, o que fornece os arquivos de dispositivo especiais /dev/ttyUSB0 . Se nenhum driver de kernel fosse carregado, você poderia caçar (por exemplo, com google ou grep a origem do kernel) para a combinação de fornecedor / produto ( 0403:6001 , também mostrado em lsusb ) e tentar encontrar um driver do kernel para este dispositivo.

O driver bcm2708 mencionado nas outras respostas não é relevante: é um driver para o barramento I2C, por exemplo. para o Raspberry Pi, e não para o seu laptop.

Mas já temos um driver em funcionamento, que fornece apenas uma interface serial e não tem conexão com a infraestrutura I2C do kernel. Portanto, lmsensors , i2detect etc. não funcionará (a menos que você escreva ou encontre um driver adicional).

O site do seu conversor USB-I2C que você mencionou nos comentários explica o protocolo para use sobre o link serial: você envia uma seqüência de bytes e depois opcional recebe uma seqüência de bytes como resposta. A seqüência de comando se parece com

<command-byte> <address> <register (0-2 bytes)> <data byte count (0-1 bytes)> <write data>

E a página da Web para o SRF 02 explica como os registros do chip do sensor se parecem : 6 registradores você pode ler, um registro de 1 comando você pode escrever.

Então, por exemplo, para ler a versão, você precisa ler 01 byte do registrador 00 , o endereço do chip padrão é E0 , o LSB é o bit R / W, então você usa E1 como endereço e o comando necessário para o adaptador USB-I2C é 55 . Portanto, a sequência completa que você enviaria em série seria 55 E1 00 01 e, em seguida, você leria um byte como resposta.

Você pode fazer isso a partir da linha de comando:

$ printf '\x55\xE1\x00\x01' > /dev/ttyUSB0
$ hexdump -n 1 -e '"%02x \n"' < /dev/ttyUSB0

Ou você pode abrir /dev/ttyUSB0 em seu idioma favorito e, depois, ler e escrever bytes usando os comandos fornecidos pela sua linguagem.

    
por 29.01.2017 / 19:02
0

Existem dois módulos do kernel i2c :

i2c-bcm2708 

e

i2c-dev

Adicione ambos a /etc/modules e o reinício.

    
por 28.01.2017 / 17:16