Rede CAN em Linux
Embarcado para
Aplicações Conectadas
Prof. André Márcio de Lima Curvello – contato@andrecurvello.com.br
Sobre mim
2
André Márcio de Lima Curvello
• Engenheiro de Computação – USP São Carlos
• MBA em Gestão de TI - UNIFRAN
• Mestre em Ciências – USP São Carlos
• Analista de Tecnologia – Padtec S/A
• Articulista do Portal Embarcados e FilipeFlop
• Professor na Pós-Graduação em Sistemas
Embarcados – UNISAL São José – Campinas
“Se não puder voar, corra.
Se não puder correr, ande.
Se não puder andar, rasteje.
Mas continue em frente de
qualquer jeito.
Martin Luther King
!
Linux e CAN
Vamos começar pelas partes
4
O que é Linux Embarcado?
▸ Mesmo Linux que o usado em um PC
▸ Mas com algumas “adaptações” para sistemas
embarcados
▸ Precisa de um sistema com microprocessador
▸ Uso em ascensão!
▸ Redução de custos de componentes
▸ Facilidade no desenvolvimento e manutenção
5
6
O que é Linux Embarcado?
7
O que é Linux Embarcado?
▸ Linux Embarcado favorece aplicações que usem:
▸ Recursos multimídia (áudio, fotos, vídeos)
▸ Rede
▸ Criptografia
▸ Banco de Dados
▸ Interface Gráfica
8
O que é Linux Embarcado?
9
Linux Embarcado - Estrutura
10
Fonte: Traduzido pelo Sergio Prado de http://free-electrons.com/
Fonte: http://free-electrons.com/
E a CAN?
11
O que é Rede CAN?
▸ Desenvolvido pela Bosch para redes de
comunicação veiculares na década de 80
▸ Publicado em 1986 na SAE
▸ Troca de mensagens entre ECUs
▸ Electronic Control Unit
▸ Robusto em ambientes com ruído!
▸ Baixo custo
12
O que é Rede CAN?
▸ Protocolo multi-mestre
▸ Broadcast
▸ Comunicação serial
▸ Baseado em mensagens
▸ Sem “endereços”
▸ IDs
▸ Mensagens
13
O que é Rede CAN?
Standard CAN – Versão 2.0A
▸ ID de 11 bit
▸ 2048 ids diferentes!
14
Fonte: http://www.ti.com
Transmissão de dados em CAN
15
Fonte: https://www.linkedin.com/pulse/automotive-can-bus-system-explained-kiril-mucevski
Transmissão de dados em CAN
16
Fonte: https://www.linkedin.com/pulse/automotive-can-bus-system-explained-kiril-mucevski
Topologia de uma rede CAN
17
Fonte: https://www.linkedin.com/pulse/automotive-can-bus-system-explained-kiril-mucevski
Topologia de um nó em CAN
18
Fonte: http://www.ti.com
CAN Controller?
19
CAN Transceiver?
20
SN65HVD230
Fonte: http://www.ti.com
CAN Controller + Transceiver?
21
CAN – Muito usado nos veículos!
22
A IntegraçãoA integração de um sistema operacional
com uma rede robusta em automação
23
Quando aconteceu?
▸ Contribuição do
Volkswagen Research
▸ Drivers e pilha de rede
chamada SocketCAN
▸ Código-aberto
24
Documentação
▸ Já disponível na árvore do Kernel Linux
▸ Link:
▸ https://www.kernel.org/doc/Documentation/networking/can.txt
▸ Documentação tem por base o SocketCAN
▸ Trata de CAN como interface de rede
▸ Especifica chamadas (API)
▸ E estruturas de dados
25
Ferramentas
▸ Tudo parte do can-utils
▸ Link: https://github.com/linux-can/can-utils/
▸ candump - display, filter and log CAN data to files
▸ canplayer - replay CAN logfiles
▸ cansend - send a single frame
▸ cangen - generate (random) CAN traffic
▸ cansniffer - display CAN data content differences (just 11bit
CAN IDs)
26
Linux Embarcado + Rede CAN
▸ SocketCAN é uma API em C
▸ Mas há “wrappers” para outras linguagens
▸ Como por exemplo... Python!
▸ Biblioteca python-can
▸ E suporte no Python 3.3 em diante
27
Linux Embarcado + Rede CAN - Setup
▸ Módulos habilitados em Kernel
28
Linux Embarcado + Rede CAN - Setup
▸ Configuração em Device-Tree
29
Linux Embarcado + Rede CAN - Setup
▸ Carregamento dos módulos
30
# modprobe can
# modprobe can_raw
# modprobe can_dev
Linux Embarcado + Rede CAN - Setup
▸ Setup da Rede
31
# ip link set can0 type can bitrate 500000
# ip link set can0 up
# ip link show can0
Desenvolvimento com CAN em Linux
▸ SocketCAN é uma API em C
▸ Mas há “wrappers” para outras linguagens
▸ Como por exemplo... Python!
▸ Biblioteca python-can
▸ E suporte no Python 3.3 em diante
32
Desenvolvimento com CAN em Linux - C
33
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <net/if.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <linux/can.h>
#include <linux/can/raw.h>
Desenvolvimento com CAN em Linux - C
34
CAN em Linux - Python
35
36
Fonte: https://fabiobaltieri.com/2013/07/23/hacking-into-a-vehicle-can-bus-toyothack-and-socketcan/
37
38
Muito cuidado ao ligar
em um veículo...
Velocidade / baudrate
da CAN é
fundamental!
Como tornar isso real? Plaquinhas!
39
BeagleBone Black
▸AM335x 1GHz ARM® Cortex-A8
▸2x PRU 32-bit microcontrollers
▸Controller CAN
+Transceiver
40
Toradex Colibri NXP iMX6 + Placa base Viola
 Módulo SODIMM NXP
iMX6S
 CPU Cortex A9 – 800 MHz
a 1.0 GHz
 Controller CAN
+ Transceiver CAN
41
Qualcomm DragonBoard 410c
42
▸ Quad-core ARM® Cortex® A53
Snapdragon 410E Processor at up to
1.2 GHz per core
▸ 1GB 533MHz LPDDR3 memory
▸ 8GB eMMC 4.51 storage
▸ WiFi + BT + GPS
▸ Android / Linux / Win10 IoT
+ Transceiver e Controller CAN
AutoPi – Raspberry Pi Zero Wireless com OBDII
43
44
45
Módulo
Conexões
Execução
Transceiver
Telemetria de Dados Coletados
Execução em um veículo
46
 Termos principais:
 ID – identificação da mensagem
 DLC – tamanho em bytes da mensagem
 Payload – mensagem propriamente
(bytes)
Telemetria de Dados Coletados
47
+
+
Telemetria de Dados Coletados
48
Áreas de Atuação / Aplicação
▸ Automotivo
▸ Militar
▸ Maquinário Industrial
▸ Maquinário Agrícola
▸ Controle de Elevadores
▸ Sistemas Médicos
▸ Robótica
▸ Drones
▸ Etc
49
50
51
• Autor: Derek Molloy
• De A a Z com Linux Embarcado na Beagle
Bone Black
• Link:
https://www.amazon.com/Exploring-BeagleBone-
Techniques-Building-Embedded/dp/1118935128
Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux
52
• Livro disponibilizado gratuitamente na
forma de ebook: PDF!
• Objetivo: Inspirar a criação de Internet das
Coisas
• Disponível no Google mais próximo de
você! Ou...
http://iotcomicbook.org/
Inspirando a Internet das Coisas!
53
• Livro disponibilizado gratuitamente via web.
• Informações sobre como explorar recursos
do veículo (como informações da rede
CAN).
• Link:
http://opengarages.org/handbook/
The Car Hacker’s Handbook
54
Obrigado!
Perguntas?
Contato
55
@andremlcurvello
http://youtube.com/profandrecurvello
http://andrecurvello.com.br
contato@andrecurvello.com.br
http://facebook.com/profandrecurvello

Rede CAN em Linux Embarcado para Aplicações Conectadas

  • 1.
    Rede CAN emLinux Embarcado para Aplicações Conectadas Prof. André Márcio de Lima Curvello – contato@andrecurvello.com.br
  • 2.
    Sobre mim 2 André Márciode Lima Curvello • Engenheiro de Computação – USP São Carlos • MBA em Gestão de TI - UNIFRAN • Mestre em Ciências – USP São Carlos • Analista de Tecnologia – Padtec S/A • Articulista do Portal Embarcados e FilipeFlop • Professor na Pós-Graduação em Sistemas Embarcados – UNISAL São José – Campinas
  • 3.
    “Se não pudervoar, corra. Se não puder correr, ande. Se não puder andar, rasteje. Mas continue em frente de qualquer jeito. Martin Luther King
  • 4.
    ! Linux e CAN Vamoscomeçar pelas partes 4
  • 5.
    O que éLinux Embarcado? ▸ Mesmo Linux que o usado em um PC ▸ Mas com algumas “adaptações” para sistemas embarcados ▸ Precisa de um sistema com microprocessador ▸ Uso em ascensão! ▸ Redução de custos de componentes ▸ Facilidade no desenvolvimento e manutenção 5
  • 6.
  • 7.
    O que éLinux Embarcado? 7
  • 8.
    O que éLinux Embarcado? ▸ Linux Embarcado favorece aplicações que usem: ▸ Recursos multimídia (áudio, fotos, vídeos) ▸ Rede ▸ Criptografia ▸ Banco de Dados ▸ Interface Gráfica 8
  • 9.
    O que éLinux Embarcado? 9
  • 10.
    Linux Embarcado -Estrutura 10 Fonte: Traduzido pelo Sergio Prado de http://free-electrons.com/ Fonte: http://free-electrons.com/
  • 11.
  • 12.
    O que éRede CAN? ▸ Desenvolvido pela Bosch para redes de comunicação veiculares na década de 80 ▸ Publicado em 1986 na SAE ▸ Troca de mensagens entre ECUs ▸ Electronic Control Unit ▸ Robusto em ambientes com ruído! ▸ Baixo custo 12
  • 13.
    O que éRede CAN? ▸ Protocolo multi-mestre ▸ Broadcast ▸ Comunicação serial ▸ Baseado em mensagens ▸ Sem “endereços” ▸ IDs ▸ Mensagens 13
  • 14.
    O que éRede CAN? Standard CAN – Versão 2.0A ▸ ID de 11 bit ▸ 2048 ids diferentes! 14 Fonte: http://www.ti.com
  • 15.
    Transmissão de dadosem CAN 15 Fonte: https://www.linkedin.com/pulse/automotive-can-bus-system-explained-kiril-mucevski
  • 16.
    Transmissão de dadosem CAN 16 Fonte: https://www.linkedin.com/pulse/automotive-can-bus-system-explained-kiril-mucevski
  • 17.
    Topologia de umarede CAN 17 Fonte: https://www.linkedin.com/pulse/automotive-can-bus-system-explained-kiril-mucevski
  • 18.
    Topologia de umnó em CAN 18 Fonte: http://www.ti.com
  • 19.
  • 20.
  • 21.
    CAN Controller +Transceiver? 21
  • 22.
    CAN – Muitousado nos veículos! 22
  • 23.
    A IntegraçãoA integraçãode um sistema operacional com uma rede robusta em automação 23
  • 24.
    Quando aconteceu? ▸ Contribuiçãodo Volkswagen Research ▸ Drivers e pilha de rede chamada SocketCAN ▸ Código-aberto 24
  • 25.
    Documentação ▸ Já disponívelna árvore do Kernel Linux ▸ Link: ▸ https://www.kernel.org/doc/Documentation/networking/can.txt ▸ Documentação tem por base o SocketCAN ▸ Trata de CAN como interface de rede ▸ Especifica chamadas (API) ▸ E estruturas de dados 25
  • 26.
    Ferramentas ▸ Tudo partedo can-utils ▸ Link: https://github.com/linux-can/can-utils/ ▸ candump - display, filter and log CAN data to files ▸ canplayer - replay CAN logfiles ▸ cansend - send a single frame ▸ cangen - generate (random) CAN traffic ▸ cansniffer - display CAN data content differences (just 11bit CAN IDs) 26
  • 27.
    Linux Embarcado +Rede CAN ▸ SocketCAN é uma API em C ▸ Mas há “wrappers” para outras linguagens ▸ Como por exemplo... Python! ▸ Biblioteca python-can ▸ E suporte no Python 3.3 em diante 27
  • 28.
    Linux Embarcado +Rede CAN - Setup ▸ Módulos habilitados em Kernel 28
  • 29.
    Linux Embarcado +Rede CAN - Setup ▸ Configuração em Device-Tree 29
  • 30.
    Linux Embarcado +Rede CAN - Setup ▸ Carregamento dos módulos 30 # modprobe can # modprobe can_raw # modprobe can_dev
  • 31.
    Linux Embarcado +Rede CAN - Setup ▸ Setup da Rede 31 # ip link set can0 type can bitrate 500000 # ip link set can0 up # ip link show can0
  • 32.
    Desenvolvimento com CANem Linux ▸ SocketCAN é uma API em C ▸ Mas há “wrappers” para outras linguagens ▸ Como por exemplo... Python! ▸ Biblioteca python-can ▸ E suporte no Python 3.3 em diante 32
  • 33.
    Desenvolvimento com CANem Linux - C 33 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <net/if.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <linux/can.h> #include <linux/can/raw.h>
  • 34.
    Desenvolvimento com CANem Linux - C 34
  • 35.
    CAN em Linux- Python 35
  • 36.
  • 37.
  • 38.
    38 Muito cuidado aoligar em um veículo... Velocidade / baudrate da CAN é fundamental!
  • 39.
    Como tornar issoreal? Plaquinhas! 39
  • 40.
    BeagleBone Black ▸AM335x 1GHzARM® Cortex-A8 ▸2x PRU 32-bit microcontrollers ▸Controller CAN +Transceiver 40
  • 41.
    Toradex Colibri NXPiMX6 + Placa base Viola  Módulo SODIMM NXP iMX6S  CPU Cortex A9 – 800 MHz a 1.0 GHz  Controller CAN + Transceiver CAN 41
  • 42.
    Qualcomm DragonBoard 410c 42 ▸Quad-core ARM® Cortex® A53 Snapdragon 410E Processor at up to 1.2 GHz per core ▸ 1GB 533MHz LPDDR3 memory ▸ 8GB eMMC 4.51 storage ▸ WiFi + BT + GPS ▸ Android / Linux / Win10 IoT + Transceiver e Controller CAN
  • 43.
    AutoPi – RaspberryPi Zero Wireless com OBDII 43
  • 44.
  • 45.
  • 46.
    Execução em umveículo 46  Termos principais:  ID – identificação da mensagem  DLC – tamanho em bytes da mensagem  Payload – mensagem propriamente (bytes)
  • 47.
    Telemetria de DadosColetados 47 + +
  • 48.
    Telemetria de DadosColetados 48
  • 49.
    Áreas de Atuação/ Aplicação ▸ Automotivo ▸ Militar ▸ Maquinário Industrial ▸ Maquinário Agrícola ▸ Controle de Elevadores ▸ Sistemas Médicos ▸ Robótica ▸ Drones ▸ Etc 49
  • 50.
  • 51.
    51 • Autor: DerekMolloy • De A a Z com Linux Embarcado na Beagle Bone Black • Link: https://www.amazon.com/Exploring-BeagleBone- Techniques-Building-Embedded/dp/1118935128 Exploring BeagleBone: Tools and Techniques for Building with Embedded Linux
  • 52.
    52 • Livro disponibilizadogratuitamente na forma de ebook: PDF! • Objetivo: Inspirar a criação de Internet das Coisas • Disponível no Google mais próximo de você! Ou... http://iotcomicbook.org/ Inspirando a Internet das Coisas!
  • 53.
    53 • Livro disponibilizadogratuitamente via web. • Informações sobre como explorar recursos do veículo (como informações da rede CAN). • Link: http://opengarages.org/handbook/ The Car Hacker’s Handbook
  • 54.
  • 55.