Como verificar se o barramento CAN é gratuito ou não

8

Eu li muitas coisas sobre arbitragem de barramento CAN, mas isso não respondeu às minhas perguntas.

Se um nó já está transmitindo os dados no barramento e entre outro nó deseja iniciar a transferência de dados, como esse "outro nó" saberá que o barramento está ocupado?

Todos os documentos (que eu li) têm a condição de que ambos os nós estejam iniciando a transmissão simultaneamente e, em seguida, um com o primeiro bit dominante obterá o barramento, mas ninguém explicou a condição que eu quero saber.

Swanand
fonte
1
Swanand, você pode obter melhores respostas para suas perguntas se esperar um pouco mais para aceitar a resposta. Esta é uma comunidade internacional e alguns especialistas podem não ser capazes de responder instantaneamente.
W5VO 31/01
@ W5VO Vou lembrar da próxima vez! Obrigado pela sugestão! :)
Swanand

Respostas:

10

A resposta curta é que o nó deve monitorar as linhas CAN para ficar ocioso por um certo tempo antes de tentar transmitir. Portanto, se outro nó estiver transmitindo, ele deverá permanecer quieto até que o outro nó esteja pronto.

Um barramento CAN é baseado em sinalização diferencial. As duas linhas, CAN-Alta (CAN +) e CAN-Baixa (CAN-), têm o mesmo potencial quando o barramento está ocioso. Para enviar bits, um transmissor CAN coloca uma tensão diferencial nas linhas de cerca de 2 volts.

Um transmissor CAN primeiro vê se o barramento está ocioso e, se estiver, começa a transmitir. Como a arbitragem funciona é que um transmissor monitora o barramento enquanto está transmitindo. A transmissão é feita como acima, mantendo as duas linhas no mesmo potencial ou em um potencial diferencial. Portanto, se o transmissor transmite um pouco mantendo as linhas no mesmo potencial (sic), mas vê que as duas linhas de transmissão têm um potencial diferencial, isso significa que algum outro nó está transmitindo e o primeiro transmissor perdeu a arbitragem. Deve então parar de transmitir.

Quando um nó começa a transmitir, os bits transmitidos são os mesmos até o endereço do nó transmissor que é obviamente diferente. Se dois nós começarem a transmitir juntos, eles transmitirão juntos em sincronia até que a parte do endereço seja alcançada. Quando o endereço é diferente, um nó notará uma diferença potencial nas linhas, mesmo quando não estiver colocando um nas linhas. Então ele sabe que perdeu e precisa tentar novamente. O nó vencedor continua transmitindo sem saber que algum outro nó estava tentando também. Obviamente, essa lógica se estende a mais de dois nós também.

Eu espero que isso ajude.

Doc
fonte
1
Boa resposta! Se bem me lembro, o envio de um '0' é dominante sobre um '1', o que resulta na menor arbitragem ganhadora de endereços. Um recurso interessante disso é que, se o nó perdedor parar quando deveria parar, não haverá corrupção de dados no barramento.
W5VO 31/01
Ótima resposta !! Ficará muito grato se você puder esclarecer isso: digamos que os identificadores sejam "1011001" e "1000110" quando o terceiro bit for atingido, o primeiro transmissor está enviando "1" e o segundo está enviando "0"; de acordo com o protocolo CAN, o bit dominante é 0 e substitui o bit recessivo. Então agora o barramento contém "0"; o primeiro módulo detecta isso e interrompe a transmissão enquanto o segundo continua a transmitir. Meu entendimento está correto?
Febin Ensolarado
@FebinSunny Sim ... O que você disse está correto!
Swanand
1
Esta resposta não é "boa" nem "ótima". De fato, é totalmente errado . Primeiro, o transmissor " não mantém as duas linhas com o mesmo potencial" para enviar bits recessivos. Ele simplesmente para de separar as linhas e os resistores de terminação igualam o potencial. Segundo, o endereço do nó transmissor não faz parte do campo de arbitragem na especificação CAN, embora alguns protocolos baseados em CAN de nível superior o usem como parte do ID da mensagem. Em terceiro lugar, nenhum dos isso tem alguma coisa a ver com a detecção de ônibus ocioso
bordo
7

Conheço duas maneiras de resolvê-lo:

Primeiro, o controlador CAN sempre monitorava o barramento; quando detecta uma mensagem no barramento, inicia o processo de recebimento. Agora que está no estado de recebimento, ele sabe que o barramento está em uso quando uma transmissão é solicitada.

Segundo, pelo preenchimento de bits, o transceptor CAN não terá o mesmo bit por mais de cinco ciclos (a menos que um erro de barramento seja detectado; nesse caso, você verá até 12 bits dominantes seguidos). A exceção é quando nada está sendo transmitido no barramento, quando um bit passivo é sempre lido. Um controlador que estava começando pode ouvir o barramento por cinco ciclos antes de declarar 'provavelmente livre'.

Não garanto que esses sejam os processos reais, mas com base no meu conhecimento (limitado) do CAN, eles funcionariam.

CoderTao
fonte
Eu gostei do segundo truque! Isso é puro lógico e incrível!
Swanand
2
Você está perdendo o ponto principal da arbitragem de barramento - que a primeira coisa em um pacote CAN é o endereço.
W5VO 31/01
1
Essa não era realmente a pergunta dele; a questão era como um controlador determina se há atividade no barramento
CoderTao
Os quadros CAN do W5VO não têm um endereço, a menos que algum protocolo de nível superior faça parte do ID da mensagem.
Maple
@CoderTao enquanto pouco recheio não é como controlador detecta ônibus ocioso, você está correto em que ela desempenha papel importante neste processo, fazendo os dados certeza transmissíveis não pode ser confundido com fim do quadro
bordo
3

Como o CoderTao diz - o controlador CAN está monitorando continuamente o barramento, para saber quando uma transmissão já está em andamento. Portanto, o único momento em que uma colisão pode ocorrer é quando os dois nós começam a transmitir "simultaneamente" - dentro de um bit de tempo um do outro (+ uma pequena quantidade de tempo adicional para a propagação do barramento). Portanto, esses são os únicos casos que você encontrou nos documentos :)

Martin Thompson
fonte
2

O endereço do nó determina a prioridade, os endereços inferiores sendo de alta prioridade. A transmissão começa com o nó transmitindo seu endereço. Ao mesmo tempo em que transmite, ouve. Digamos que o nó três e o dois transmitam ao mesmo tempo. Como o último bit do endereço, o nó três transmite um 1 e o nó dois transmite um 0. Por causa do 0, a linha de dados é puxada para o estado 0. O nó três vê que, em vez do 1 transmitido, a linha é 0 e para de transmitir.

O CAN foi usado pela primeira vez em carros e caminhões. Alguns sensores precisavam ter uma prioridade muito maior que outros. Por exemplo, a frenagem antiderrapagem precisava ter uma prioridade mais alta do que o líquido lavador de pára-brisa baixo.

Jim C
fonte
Eu já sei disso .... Minha pergunta não era sobre arbitragem no início .... Era sobre a transmissão .... #
315
1

Existem quatro elementos principais na especificação CAN que permitem aos controladores CAN detectar o estado do barramento inativo:

  • A sinalização AND com fio possibilita que o bit dominante transmitido por um dos nós seja detectado por todos os outros nós que transmitem o bit recessivo ao mesmo tempo. Portanto, se algum nó que estiver transmitindo bits recessivos vê o estado dominante do barramento, ele sabe que o barramento está ocupado .

  • O preenchimento de bits garante que não haja mais que 5 bits consecutivos idênticos. Por si só, o preenchimento de bits é usado para manter a sincronização. No entanto, um efeito colateral disso é que não podem ocorrer mais do que 5 bits recessivos consecutivos dentro dos bits do quadro até o delimitador CRC.

  • Fim do quadro é uma série de 7 bits recessivos no final de um quadro. Eles não são cheios de bits, portanto podem ser facilmente detectados pelos controladores. Observe que o barramento ainda não está ocioso durante esse tempo, pois o EOF é considerado parte do quadro.

  • O espaço entre quadros é uma série de 3 bits de intervalo recessivos entre os quadros, seguidos pelo estado ocioso do barramento. Nenhum nó tem permissão para iniciar uma transmissão durante o intervalo, a menos que deseje enviar quadros de erro ou sobrecarga . Além disso, o nó que transmitiu o último quadro também deve enviar 8 bits de transmissão suspensa recessiva após o intervalo antes de iniciar outra transmissão. Esse último requisito permite que outros nós comecem a enviar mensagens pendentes, portanto, nenhum nó pode "monopolizar o barramento" indefinidamente.

De todas as opções acima, eis como os nós detectam o estado do barramento inativo:

  • Nós de recebimento simplesmente esperam 10 bits recessivos consecutivos , que incluem EOF e intervalo. Após esse período, eles consideram o ônibus inativo e podem tentar iniciar a transmissão por conta própria.

  • O nó de transmissão envia 11 bits recessivos consecutivos após o EOF do último quadro que ele transmitiu. Se nenhum outro nó inicia a transmissão durante esse período, ele considera o barramento inativo e pode tentar iniciar outra transmissão. Se um bit dominante for detectado durante esse período, o nó se tornará um receptor.

As informações acima, além de informações adicionais sobre o tempo de bits, podem ser encontradas na especificação CAN desenvolvida pela BOSCH.

Bordo
fonte
Há um barramento com vários nós ativos. Um novo nó é conectado quando não há comunicação em andamento. Como esse novo nó saberá que o barramento está ocioso? 10 bits recessivos consecutivos são transmitidos quando este novo nó não estava na imagem.
Swanand
"Sinalização AND com fio" significa que os bits recessivos não são "transmitidos", como tal, significa que o nó transmissor não gera ativamente potencial dominante. Mas eles são recebidos , ou seja, os nós receptores amostram o barramento em intervalos de bits e veem bits recessivos na linha. Portanto, se esse novo nó faz uma amostragem do barramento 10 vezes e vê um bit recessivo toda vez que considera o barramento inativo.
bordo
Não há diferença entre "10 bits recessivos consecutivos transmitidos quando este novo nó não estava na imagem" e o estado ocioso do barramento depois disso. Se não houver comunicação, qualquer leitura do barramento retornará o bit recessivo ("1"). Portanto, não importa quando você iniciar a amostragem, durante ou após o último bit dominante. Contanto que o receptor veja 10 bits, ele pode começar a transmitir. BTW, ninguém envia 10 bits. O último transmissor "envia" 11 bits recessivos, 3 intervalos + 8 suspensos. Se o nó em espera começar a transmitir após o dia 10, o último transmissor perde a arbitragem e rende o barramento para o novo nó.
Maple
0

Um nó específico inicia sua transmissão somente após o período INTERMISSION (essa duração também é chamada de duração SUSPENDED); nesse período, 3 bits recessivos são transmitidos ao barramento após a transmissão do quadro DATA / REMOTE ao barramento. Isso indica que o barramento está no estado IDLE), porque, durante esse período, nenhum dos nós inicia a transmissão. Após o barramento estar no estado inativo, o nó que deseja o barramento para transmissão entra na ARBITRAGEM.

Após a transmissão do espaço entre os quadros para o barramento, os nós presentes na rede CAN tentarão iniciar a transmissão. Portanto, um nó específico sabe se o barramento está ocupado ou não.

Nagendra Pulaparthi
fonte
E se, será a primeira transmissão no ônibus? Nesse caso, não haverá "período de intermissão". Consulte a resposta do @ Doc para obter detalhes.
Swanand