Transmissão de mensagens diferentes com o mesmo ID em um barramento CAN

12

A arbitragem CAN é feita com IDs, e qualquer nó no barramento pode transmitir com qualquer ID (idealmente não, mas um nó desagradável pode).

E se dois nós diferentes conectados no mesmo barramento CAN transmitirem mensagens com os mesmos IDs, mas com bytes de dados diferentes?

Meu pensamento: isso irá gerar lixo no ônibus. Quem tem os bits dominantes, esses somente serão transmitidos.

Swanand
fonte
1
Não sei por que eles fizeram dessa maneira. Eu teria pensado que faria mais sentido que a arbitragem se aplicasse a toda a mensagem.
Rocketmagnet

Respostas:

12

Seção 6.1 da especificação CAN :

ERRO DE BOCADO: Uma unidade que está enviando um pouco no barramento também monitora o barramento. Um BIT ERROR deve ser detectado nesse momento, quando o valor do bit monitorado for diferente do valor do bit enviado. Uma exceção é o envio de um bit 'recessivo' durante o fluxo de bits recheado do ARBITRATION FIELD ou durante o ACK SLOT.

Portanto, o nó que primeiro transmite um '1' quando o outro está transmitindo um '0' notará um Erro de Bit e sinalizará um erro normalmente - transmitindo um sinalizador de erro (consulte a Seção 3.1.3), como descrito formalmente na seção 6.2.

Informalmente, se esse nó estiver com erro ativo (que deve ser o caso usual), ele transmitirá um sinalizador de erro de 6 bits dominantes, que todos os outros nós também detectarão (como um erro de material). Isso tem o efeito de destruir completamente essa mensagem:

  • ninguém vai receber
  • nenhum dos transmissores achará que transmitiu algo com sucesso.

Cada transmissor tentará retransmitir - dependendo do tempo preciso das retransmissões, um pode iniciar suficientemente antes do outro o controle de ganho do barramento. Caso contrário, a mesma sequência pode acontecer novamente. (Ou outra mensagem de prioridade mais alta pode adiar os dois por um tempo!)


Resposta estendida inspirada na resposta de @ clabbacchio abaixo.

Você menciona "nós desagradáveis" e o clabbacchio afirma que, se dois nós transmitem em momentos diferentes, cada receptor precisa decidir o que fazer com suas múltiplas recepções.

Isso foi demonstrado por um hack no ano passado . O artigo discute, na seção "Especificações do PSCM", como um invasor pode sincronizar com as mensagens regulares no barramento e reproduzir sua mensagem maligna imediatamente antes daquela que a ECU "boa" está prestes a enviar. A ECU receptora aceita a mensagem anterior, atualiza seu contador de mensagens e descarta as mensagens "boas" como incorretas, porque seu contador de mensagens não foi incrementado.

Martin Thompson
fonte
1

Na sua pergunta, você faz esta hipótese:

Quem tem os bits dominantes, esses somente serão transmitidos.

O que pressupõe que as duas mensagens sejam transmitidas exatamente ao mesmo tempo, que é um caso específico de um problema mais geral. A resposta válida de Martin cobre esse problema específico, mas ignora o caso (mais geral) em que os dois nós transmitem em momentos diferentes.

Nesse caso, haverá duas mensagens com o mesmo ID, mas com carga útil diferente circulando no barramento, e depende da lógica dos receptores discriminar entre as duas mensagens e decidir se é o conteúdo que eles precisam receber. Se eles não conseguirem distinguir as duas mensagens, eles podem interpretar mal os dados e causar problemas mais sérios do que apenas quadros de erro.

Por exemplo, digamos que uma mensagem contenha a leitura de um sensor de temperatura, a outra contenha a posição alvo de um atuador no mesmo byte (NUNCA DEVE ACONTECER NA VIDA REAL), você pode fazer com que o atuador consiga isso como alvo sem nem mesmo saber.

clabacchio
fonte
Sim, uma lógica deve ser implementada para distinguir entre duas mensagens. Mas minha pergunta era se a arbitragem é feita com base no ID, o que acontecerá se o ID da mensagem for o mesmo e os dados diferentes.
Swanand
@Swanand apenas com a hipótese de transmissão simultânea, então? Apenas observe que é um caso de canto, o oposto é mais provável
clabacchio
0

Se o campo de dados das mensagens for diferente, você (espero!) Obterá um quadro de erro no barramento devido a um CRC errado.

Axeman
fonte