BMW M5 Forum and M6 Forums banner

Algum interesse em hacking de código CAN bus E60?

91K views 54 replies 23 participants last post by  Geara2020  
#1 ·
Tenho algumas ideias com as quais quero brincar no meu carro. Em todo o meu tempo livre inexistente, estou a investigar um registador CAN Linux. Alguém já trabalhou nesta área e tem algo para partilhar?
 
#3 ·
Eu tenho isso e vou usá-lo com Linux. Não estou falando sobre codificar as opções do carro ou programar módulos, mas sim interpretar os dados que fluem entre os módulos e decifrar o que ele faz. A ideia de um pequeno microcontrolador Arduino que faz novas coisas acontecerem quando eu aperto o botão M parece muito legal. ;)
 
#5 ·
Coisas muito interessantes - só queria ter tempo para me aprofundar. Além disso, não sou muito familiarizado com Linux... Inscrevendo-me mesmo assim!
 
#6 ·
Interessante, mas fora da minha base de conhecimento, então vou sentar e ouvir.
 
#7 ·
Tenho algumas ideias com as quais quero brincar no meu carro. Em todo o meu tempo livre inexistente, estou a analisar um logger CAN Linux. Alguém já trabalhou nesta área e tem algo para partilhar?
No meu tempo livre inexistente, aqui estão algumas ferramentas CAN que encontrei:

Estas são simples, mas não têm muito suporte de software:
CANbus Solutions

Isto é muito mais sofisticado, e a empresa fabrica ferramentas de engenharia para muitos protocolos de barramento:
Interface Komodo CAN Duo - Analisador e adaptador USB para CAN

Não tenho nenhuma experiência pessoal com nenhum dos produtos.
 
#8 ·
Então, demorou um pouco, mas finalmente consegui soldar os pinos de cabeçalho no meu Sparkfun CAN Shield.

https://www.sparkfun.com/products/10039

Esta placa é um "shield" (placa de expansão) para um Arduino (microcontrolador de código aberto) e permite que você conecte um Arduino a um barramento CAN. Dependendo do programa escrito para o Arduino, ele pode registrar os pacotes CAN (sinais) através do barramento do carro. Depois de obter uma grande quantidade de dados, leva algum trabalho para analisar e interpretar quais são os sinais, para quem (qual módulo) eles são destinados e o que eles contêm. A maioria das pessoas ficaria surpresa com a quantidade de dados circulando em seu carro se não estiverem familiarizadas com isso.

Meu objetivo é descobrir quais sinais são gerados no carro quando determinados botões são pressionados. Quem sabe, talvez possamos fazer algo legal com isso!

Além disso, assim que estiver familiarizado com os sinais e interpretá-los, gostaria de construir um testador de bancada para os atuadores do acelerador e os atuadores de marcha lenta.













 
#50 · (Edited)
Então, demorou um pouco, mas finalmente consegui soldar os pinos de cabeçalho no meu Sparkfun CAN Shield.

CAN-BUS Shield - DEV-13262 - SparkFun Electronics

Esta placa é um "shield" (placa de expansão) para um Arduino (microcontrolador de código aberto) e permite que você conecte um Arduino a um barramento CAN. Dependendo do programa escrito para o Arduino, ele pode registrar os pacotes CAN (sinais) no barramento do carro. Depois de obter uma grande quantidade de dados, leva algum trabalho para analisar e interpretar quais são os sinais, para quem (qual módulo) eles são destinados e o que eles contêm. A maioria das pessoas ficaria surpresa com a quantidade de dados circulando em seus carros se não estiverem familiarizadas com isso.

Meu objetivo é descobrir quais sinais são gerados no carro quando determinados botões são pressionados. Quem sabe, talvez possamos fazer algo legal com isso!

Além disso, assim que estiver familiarizado com os sinais e interpretá-los, gostaria de construir um testador de bancada para os atuadores do acelerador e os atuadores de marcha lenta.

View attachment 208241

View attachment 208249

View attachment 208257

View attachment 208265

View attachment 208273

View attachment 208281

View attachment 208289
Em vez disso, experimente um ESP32 com cpu dual core, Wi-Fi/Bluetooth integrado e tela OLED. A marca Heltec é barata e OK, pois vem com oled, mas Lolin D32 é mais uma qualidade, chipset um pouco mais poderoso e capaz com opção de memória flash.

me agradeça depois. Ele também roda na plataforma/IDE Arduino, mas envolto no sistema operacional Espressif. É incrível porque é tão fácil de usar e tem toneladas de poder para seu tamanho. Especialmente considerando a pegada (tamanho) do esp32 em comparação com Arduino Uno/Mega, etc.

Desde que me mudei para Porto Rico há cerca de 2 meses... também tenho pensado no que pode ser feito com um arduino + bmw, mas mais no sentido de um dispositivo de rastreamento de carro anti-roubo que usa uma conexão de operadora móvel e uma pequena bateria de backup se a bateria de 12v do carro for desconectada. Sequestros e roubos de carros são bastante comuns aqui, por isso começo a pensar em um potencial produto de rastreamento de carro anti-roubo barato
 
#9 ·
Então, o primeiro teste não correu muito bem.

Aparentemente, o escudo CAN e o programa que me deram não funcionam com o Arduino Mega. O escudo CAN tem um slot micro-SD para registro, mas a configuração dos pinos é diferente para a placa Mega.

Então, corri para a Radio Shack e peguei um Arduino Uno por $29,99 e problemas resolvidos... pelo menos com o cartão SD.

Eu estava animado e corri para o carro para conectá-lo e começar a registrar. E adivinhem? Os E60 Pre LCI não têm sinais CAN na porta OBD...

Então, agora, para descobrir um lugar de fácil acesso para tocar no barramento CAN. Até agora, estou pensando no porta-malas no módulo PDC. Posso até mover o módulo PDC para fora do poço do estepe (supondo que esteja lá nos Ms, como está nos não-Ms), como muitos caras do bimmerforums fizeram para evitar a possibilidade de um derramamento de líquido no porta-malas.

Postarei mais quando eu o conectar e alguns dados forem coletados.
 
#24 ·
Então, o primeiro teste não correu muito bem.

Aparentemente, o escudo CAN e o programa que me deram não funcionam com o Arduino Mega. O escudo CAN tem um slot micro-SD para registro, mas a configuração dos pinos é diferente para a placa Mega.

Então, corri para a Radio Shack e peguei um Arduino Uno por US$ 29,99 e os problemas foram resolvidos... pelo menos com o cartão SD.

Fiquei animado e corri para o carro para conectá-lo e começar a registrar. E adivinha? Os E60s Pre LCI não têm sinais CAN na porta OBD...

Então, agora para descobrir um lugar de fácil acesso para tocar no barramento CAN. Até agora, estou pensando no porta-malas no módulo PDC. Posso até mover o módulo PDC para fora do poço do pneu sobressalente (supondo que esteja lá nos Ms, como está nos não-Ms), como muitos caras do bimmerforums fizeram para evitar a possibilidade de um derramamento de líquido no porta-malas que o inundaria.

Postarei mais quando eu o conectar e alguns dados forem coletados.
Olá Jim,

Ao conectar ao CAN em qualquer lugar que não seja o OBD-II, certifique-se de usar a resistência de terminação adequada em sua placa transceptora. Um barramento CAN é projetado como uma "espinha dorsal" à qual os participantes se conectam. Se você for um ponto final, precisará terminar com 2 x 60 Ohms para aterramento conectados por meio de um capacitor de 10 nF. Se você estiver no 'meio' do barramento (onde você normalmente deve estar mirando), você não termina. Portanto, esteja ciente da sua posição no barramento e tente conectar 'no meio'. Caso contrário, você causa reflexos e pode ter problemas de qualidade do sinal.

Agora, no barramento CAN do atuador do acelerador e nos barramentos CAN do solenóide VANOS, você deve conectar sem terminação porque é um barramento CAN de alta velocidade ponto a ponto. Não há meio: você é ele com seu sniffer. Estes são os interessantes na minha opinião :wink, especialmente se você puder alinhar o tempo com os dados de registro. A propósito, esses transceptores específicos são fabricados pela Infineon (TLE6250G) rodando a 1 Mbit/s. Geralmente é melhor usar os mesmos transceptores no modo de escuta para obter a melhor fidelidade, mas ei, ele funcionará com um TJA1043 da NXP também, eu aposto. Qual transceptor é usado na configuração Arduino?

Não tenho certeza sobre as outras redes CAN em nossos carros e suas taxas de dados exatas. Algumas redes de alta velocidade operam a 500 kbit/s. Então, cuidado. Um osciloscópio barato é útil em tais assuntos. Eu tenho um, se necessário.

O melhor software e hardware para registro é este: CANalyzer
Mas é muito caro. É o que as montadoras usam, pois em muitos casos elas executam seu software em um Vector OS (baseado em OSEK). Eu procurei no eBay, mas nada apareceu. Surpresa, surpresa. Eu não tentei muito, devo dizer. No entanto, diga a palavra e posso ir com um conjunto de ferramentas quando as perguntas ficarem difíceis!
 
#11 ·
Acho que temos uma formação semelhante, engenheiro de software embarcado por aqui, de qualquer forma o geek em mim está muito interessado neste projeto. Então, mantenha-nos informados. A primeira coisa que você vai querer fazer é descobrir o endereço CAN de cada unidade. Há muitas mensagens passando pelo barramento quando o carro está rodando, você quer filtrar o ruído o mais rápido possível. Já faz um tempo que não trabalho com CAN, mas acredito que pelo menos costumava ser, existe um CAN de baixa velocidade e um CAN de alta velocidade no carro. Portanto, certifique-se de que está olhando para o barramento certo, se ainda for o caso. DME ABS/DSC e SMG, talvez atuadores do acelerador, todos devem ser CAN de alta velocidade e todo o resto normal/baixa velocidade.

Mantenha-nos informados!:thumbsup:
 
#12 ·
Na verdade, existem vários barramentos CAN diferentes. O barramento CAN principal sobre o qual todos os vários módulos da carroceria se comunicam (DME, SZL, SMG, CCC, ABBL, etc.), existe o PT-CAN sobre o qual o DME, SMG falam e, em seguida, um CAN local que é especificamente para atuadores do acelerador e atuadores de marcha lenta. A parte de endereçamento levará algum tempo. Espero que alguns dos endereços sejam semelhantes aos do E46, pelo menos em esquema. O trabalho anterior tornará mais fácil identificá-los. Depois de saber que o logger está funcionando, provavelmente o moverei para o CAN local do DME. Existem apenas alguns módulos que falam lá, então menos ruído de fundo para filtrar.

Sabe, seria mais fácil se essa fosse minha experiência, mas ganhei a vida me esgueirando debaixo d'água. Eu só gosto de entender como as coisas funcionam... e então dobrá-las à minha vontade! :grinyes:
 
#13 ·
A questão é, então, se você já se meteu em 'problemas' por mexer na eletrônica de um submarino? 'Hum, capitão, ele está aprontando de novo...'... :)
 
#14 · (Edited)
Então, depois de não pensar muito nisso por um tempo, tive um ataque de loucura neste fim de semana.

O Arduino Mega não é muito compatível, então peguei um Uno na Radio Shack (tão feliz em vê-los voltando às suas raízes). O Uno funciona perfeitamente com o escudo Sparkfun CAN usando o esboço de registro CAN de Thaniel.

Então, finalmente decidi arrancar o forro do porta-malas para descobrir meu irritante problema de fiação "porta-malas aberto". Enquanto eu estava lá dentro, removi tudo para ter um bom acesso ao módulo PDC.

O módulo PDC tem três conectores, um dos quais acredito que vai para a matriz de sensores traseiros, um para a matriz frontal e um para linhas de alimentação/CAN.

O conector de alimentação tem apenas 4 fios:
- 12V (terminal 30)
- Terra
- CAN High
- CAN Low

Eu conectei o terra, CAN-high e CAN-low e os alimentei no conector D-SUB de 9 pinos no escudo CAN. Aviso, este escudo não segue o padrão D-SUB ISO para comunicações CAN, então tive que soldar um conector DSUB personalizado de 9 pinos para ele. Tudo isso é inútil sem fotos, então vou adicionar algumas hoje à noite.

De qualquer forma, o sniffer CAN foi ativado imediatamente e começou a gravar no cartão micro-SD.

Fiz vários arquivos de log antes de realmente pesquisar a velocidade do barramento. De acordo com este PDF, o E60 usa uma velocidade de barramento K-CAN de 100 kHz.

EDIT: Não tenho certeza se o link funciona, então aqui está o PDF: View attachment BUS__en.pdf

Então, ajuste o esboço do Arduino para converter para 100 kHz e executei mais algumas execuções.

Cada execução durou cerca de 20 segundos, pois eu não tinha ideia do que estava olhando para começar e mesmo 20 segundos são cerca de 8000 mensagens CAN para decifrar.

A primeira execução foi com o motor desligado o tempo todo com o modo "M" ativado e desativado duas vezes. A segunda execução foi desligado/ligado/desligado com o modo "M" ativado e desativado duas vezes.

O esboço de Thaniel gera um bom arquivo de texto com tempo/ARBID/extensão/bits de dados. Eu os despejei no Excel, pois é mais fácil filtrar e classificar os ARBIDs em que estou interessado. Aqui está o que tenho até agora com alguns comentários. Alguém quer participar e ajudar a decifrar? :biggrin:
 
#15 · (Edited)
Edição: Esses dados foram obtidos exclusivamente do barramento K-CAN usando os conectores do módulo PDC no porta-malas. Isso opera a 100 kbps e pode não ter tudo o que é necessário para o registro de dados completo. No entanto, existe um barramento PT-CAN de 500 kbps com muitas coisas relacionadas ao motor que o DME comanda, ou seja, atuadores do acelerador, atuadores de marcha lenta, etc. Mais coisas interessantes quando estivermos conectados a isso.
 
#18 ·
Eu sei que alguém por aí tem melhores habilidades no Excel do que eu. Eu posso deixar o mlook bonito, mas processar muitos números manualmente... sinta-se à vontade para participar... ;)

Eu registrei 20 minutos de uma viagem e tenho uma tonelada métrica de dados para analisar.

No entanto, descobri alguns IDs de Arbitragem para alguns dos módulos, alguns dos quais podem até ser úteis para o meu objetivo.

Se o interesse for um pensamento secundário que eu tive. Muitos registradores de dados simplesmente consultam via OBD para obter os dados de que precisam e, em seguida, esperam que o módulo gateway retorne a resposta às suas perguntas, que o registrador de dados registra.

Há uma quantidade incrível de informações circulando nos barramentos de dados neste carro, provavelmente muitas das quais são úteis para fins de registro de dados. Que tal um registrador de dados DIY que você pode construir com peças por menos de US$ 100? :biggrin:

Aqui estão algumas coisas que eu encontrei:

View attachment 315841

Nesta captura de tela, você pode ver que o ArbID 0x1B4 (valor hexadecimal) é transmitido aproximadamente a cada 0,1 segundo. Ele contém 8 bytes de dados, dois dos quais (B0 e B1, os dois primeiros) são a velocidade do veículo em MPH, circulados em vermelho.

Em azul está uma conversão usando a fórmula do Excel:
Code:
=HEX2DEC(F20)
Circulado em laranja está o valor numérico para MPH depois que os valores decimais são colocados juntos nesta fórmula:
Code:
= (((Q20 - 16 ) * 256) + P20) / 16
Usei o Gravador de Voz no iPhone enquanto coletava esses dados e, em seguida, transcrevi os eventos (operei muitas coisas no carro). As notas de velocidade que gravei correspondem às velocidades geradas por esta fórmula, então tenho quase certeza, mas ainda não 100% certo de que a fórmula está correta. Há uma taxa de dados tão alta que só consigo obter cerca de 7 minutos de dados em uma planilha do Excel, pois atingi o limite de 65535 linhas.[/I]
Fio muito interessante.

Verificarei se a esposa (o "Corporate World Excel Wizard") está disposta a analisar/concluir seus dados do Excel hoje (já que são pouco depois das 5h00 da manhã aqui e não consigo dormir).

Novamente, fio muito legal... voltarei hoje, espero que com algum tipo de produto Excel finalizado para você.

Saúde.


Enviado de AutoGuide.com Free App
 
#19 ·
Olá jcolley,

Estou de volta depois de um dia longo, mas bom. Minha esposa analisou mais de perto o que você escreveu, e aqui está o que ela propôs: Para evitar atingir o limite de linhas no Excel, tente cortar os dados em segmentos menores, remover as duplicatas (se houver, usando o botão na guia Dados), recombinar os segmentos de dados menores e, mais uma vez, remover quaisquer duplicatas.

Espero que isso seja útil.

Saudações e tenha uma ótima semana.

Atenciosamente,
 
#20 ·
Só por curiosidade, mas qual versão do Excel você está usando? Eu pensei que 2010 permitia mais de 65 mil linhas, mas posso estar errado.
 
#21 ·
Limite de linhas do Excel - Office 2013

Só por curiosidade, mas qual versão do Excel você está usando? Eu pensei que o 2010 permitia mais de 65 mil linhas, mas posso estar errado.

Enviado do Aplicativo AutoGuide.com
messex,

Não, você está certo. Não posso falar pela versão 2010, mas o Excel no Office 2013 permite 1.048.576 linhas. :greenflag:
 
#23 ·
A lógica de controle de lançamento também é a mesma. A única diferença é uma animação de bandeira no KOMBI e9x. Não vejo nada nos rastreamentos de codificação e60 para DKG, mas alguns outros veem, incluindo o CIC e o EKPM.
 
#26 · (Edited)
RPM bruto (não otimizado para KOMBI) está embutido no ID da mensagem K-CAN, bytes 4 e 5, como um inteiro sem sinal de 16 bits. Os IDs de mensagem K-CAN e PT-CAN são os mesmos. Essas mensagens são transmitidas aproximadamente a uma taxa de atualização média de 100 ms (enquanto em PT-CAN seria em média 10 ms). Obrigado BMW por tornar isso fácil.
 
#27 ·
RPM bruto (não otimizado para KOMBI) está embutido no ID da mensagem K-CAN, bytes 4 e 5, como um inteiro sem sinal de 16 bits. Os IDs de mensagem K-CAN e PT-CAN são os mesmos. Essas mensagens são transmitidas em média a uma taxa de atualização de 100 ms (enquanto em PT-CAN seria em média 10 ms). Obrigado BMW por tornar isso fácil.
Verdadeiro para todos os ArbIds em PT-CAN, K-CAN, ByteFlight, LLS-CAN e DK-CAN. Os ArbIds são únicos e atribuídos seus números por prioridade, por isso faz sentido manter a ordem consistente.
 
#30 ·
Eu postei isso no bimmerforums, mas vocês provavelmente também acharão útil. Encontrei isso enquanto cavava no tool32

Code:
0x399	Status M-Drive [2]	Status M-Drive [2]	0x12	DME1
Lista do que um monte de IDs de mensagens são e de quais módulos eles se originam. Existem alguns IDs faltando quando eu verifico em relação ao meu 535xi, então a lista está incompleta, mas ainda é muito melhor do que voar completamente às cegas.
Postagem abreviada de Terra acima para o que eu acho que a maioria está procurando aqui.

Hex ArbID para M-Drive é 0x399. Especificamente, você pode acionar o byte 1, bits 7-8.

 
#31 ·
O que provavelmente também interessa a vocês são as mensagens de transmissão:

Code:
0xB5	Drehmomentanforderung EGS [9]	Torque demand EGS [9]	0x18	EGS_MECH+NAVI/EGS_MECH
0xB8	Drehmomentanforderung DKG [2]	Torque requirement DKG [2]	0x18	DKG
0xBA	Getriebedaten [20]	Transmission data [20]	0x18	SMG_M/SMG/EGS_MECH+NAVI/EGS_MECH/DKG
0xBD	Drehmomentanforderung SSG [6]	Torque demand SSG [6]	0x18	SMG_M/SMG
0x1A2	Getriebedaten 2 [6]	Transmission data 2 [6]	0x18	EGS_MECH+NAVI/EGS_MECH/DKG
0x1A3	Rohdaten Längsbeschleunigung [3]	Raw data longitudinal acceleration [3]	0x18	SMG_M
0x1D2	Anzeige Getriebedaten [22]	Transmission data display [22]	0x18	SMG_M/SMG/EGS_MECH+NAVI/EGS_MECH/DKG
0x304	Status Gang [13]	Status Status [13]	0x18	SMG_M/SMG/EGS_MECH+NAVI/EGS_MECH/DKG
0x3B1	Getriebedaten 3 [2]	Transmission data 3 [2]	0x18	EGS_MECH/DKG
0x498	Netzwerkmanagement	Network management	0x18	DKG/EGS_MECH/EGS_MECH+NAVI/SMG/SMG_M
0x598	Dienste	services	0x18	DKG/EGS_MECH/EGS_MECH+NAVI/SMG/SMG_M
Somente 0xB8 parece ser específico para DCT, e somente 0xBD e 0x1A3 parecem ser específicos para SMG. 0xB8 e 0xBD parecem transportar a solicitação de torque, embora não esteja claro se o formato é o mesmo. 0x3B1 pode não estar presente em transmissões SMG

O próximo passo seria desmontar o MSS65, descobrir onde as mensagens CAN são tratadas e ver se já existe algum código para lidar com as mensagens específicas do DCT.
 
#34 ·
@jcolley, você tem alguma atualização sobre seu projeto? Estou tentando ativar o botão do volante M no modelo E60 não M, então se você tiver alguma dica útil para mim, agradecerei.
Mesmo que você codifique o módulo do volante para um VO M5 (presumivelmente é tudo o que é necessário), o carro ainda não saberá nada sobre esses quadros CAN.
 
#40 · (Edited)
Olá pessoal, revivendo um tópico antigo - alguém pode compartilhar seu esboço Arduino usado para farejar as mensagens k can? Além disso, alguém pode confirmar que resistores de terminação de 120 ohms de H e L para o terra seriam necessários ao conectar ao k can no PDC?
Sim, essa é a terminação adequada para o K-can. Dê uma olhada no esboço do arduino aqui.

https://github.com/pavelmalik/BMWCanBridge

Deixe-me adivinhar, você quer amarrar cortes de escape no modo m? :)