O que é o protocolo de 1 fio?

O que é o protocolo de 1 fio?

O protocolo 1-Wire é uma interface de fio único, half-duplex, bidirecional, de baixa velocidade e potência, protocolo de comunicação de dados seriais de longa distância. Embora este protocolo seja classificado como um padrão de 1 fio, pelo menos dois fios são necessários no barramento padrão de 1 fio – um para a fonte de dados e/ou alimentação e outro para o retorno à terra. Poderá ser necessário um fio adicional, dependendo do modo de alimentação.

Um padrão de 1 fio possui uma configuração mestre e escravo, onde só pode haver um dispositivo mestre, um computador ou microcontrolador e vários dispositivos escravos. É possível conectar até 100 dispositivos escravos de 1 fio, com barramento padrão de 1 fio. No entanto, à medida que os dispositivos escravos são adicionados ao barramento, a sua pesquisa pelo dispositivo mestre pode demorar mais tempo.

Este protocolo não usa sinal de clock. Em vez disso, os dispositivos escravos são sincronizados internamente e sincronizados com um sinal do dispositivo mestre. O dispositivo mestre é o único responsável pelas operações de leitura e gravação dos dispositivos escravos, portanto eles não podem iniciar uma transferência de dados por conta própria. O que eles podem fazer é indicar sua presença no barramento quando o mestre for reinicializado. Cada dispositivo mestre é identificado por um endereço de 64 bits, armazenado na ROM de cada dispositivo escravo de um fio.

Este é um padrão de comunicação serial de baixa velocidade, com velocidade de dados típica de 15,4 kbps. O barramento pode ser sobrecarregado até uma velocidade máxima de dados de 125 kbps. As velocidades de dados no protocolo de 1 fio são baixas em comparação com outros protocolos padrão de comunicação de dados seriais (como UART, I2C e SPI), mas o barramento de 1 fio é extremamente econômico na produção e operação. Ele oferece uma implementação de hardware simples e um consumo de energia extremamente baixo.

Embora o hardware seja simples, a implementação do software no lado do microcontrolador é altamente complexa. E apesar do baixo consumo de energia, ele pode comunicar dados em distâncias relativamente longas.

O protocolo 1-Wire é usado por sensores de temperatura, relógios em tempo real, temporizadores, EEPROMs e o popular iButton. A maioria desses dispositivos escravos de 1 fio são produtos da (o que é agora) Maxim Integrated.

Vamos discutir com mais detalhes.

O que é o protocolo de 1 fio?
O protocolo 1-Wire é uma interface de fio único para comunicação de dados de baixa velocidade em microcontroladores e computadores. O protocolo opera em uma única linha de dados sem sinal de clock. É um protocolo de comunicação serial mestre-escravo onde a comunicação de dados bidirecional half-duplex com vários escravos é gerenciada e controlada exclusivamente por um único mestre.

O barramento padrão de 1 fio
O barramento padrão de 1 fio possui pelo menos dois fios. Uma é a linha de dados e a outra é o retorno terrestre. Tanto o mestre quanto os escravos possuem uma conexão de dreno aberto (coletor aberto) com a linha de dados. É por isso que um resistor de 4,7K normalmente puxa a linha de dados. Existem dois modos de alimentação possíveis para os dispositivos escravos de 1 fio: parasita e convencional.

No modo parasita, apenas a linha de dados e o retorno à terra devem ser rastreados até o dispositivo escravo de 1 fio. Se for utilizado o modo de alimentação convencional, uma linha de alimentação positiva adicional deve ser traçada para cada escravo de 1 fio conectado ao barramento.

Portanto, o barramento de 1 fio em uma PCB pode ter duas ou três linhas. A alimentação convencional com três linhas no barramento de 1 fio é mais confiável.

Parasita vs. energia convencional
Conforme mencionado, os dispositivos escravos de 1 fio podem ser alimentados nos modos parasita e convencional. Todos os dispositivos escravos de 1 fio possuem três terminais: VDD, GND e dados. No modo parasita, os pinos VDD e GND são conectados ao terra, de modo que o sinal e a energia são fornecidos aos dispositivos escravos na mesma linha (ou seja, a linha de dados).

Os dispositivos escravos possuem um capacitor interno de 800 pF, que é carregado quando a linha de dados está em nível ALTO. A carga armazenada mantém o escravo ativo quando a linha de dados está BAIXA. A linha de dados normalmente é puxada por um resistor de 4,7K.

A alimentação parasita requer tempo rigoroso e fornecimento de acordo com as especificações exatas para manter o dispositivo escravo ativo sem falhas. É por isso que este modo é menos confiável. Freqüentemente, um hard pull-up adicional é usado para verificar a fonte de alimentação.

A alimentação parasita de dispositivos de 1 fio.

A alimentação parasita de dispositivos de 1 fio com um hard pull-up adicional.

Em um modo de alimentação convencional, os dispositivos escravos de 1 fio são alimentados externamente. Um fio adicional é rastreado para cada escravo de 1 fio. A fonte de alimentação externa para os escravos garante uma operação segura mesmo em condições adversas e de alta temperatura.

A alimentação convencional de dispositivos de 1 fio.

Dispositivos típicos de 1 fio operam em tensões de – 1,71 ~ 1,89 V, 1,71 ~ 3,63 V, 2,97 ~ 6,63 V e 2,97 ~ 5,25 V. A corrente consumida varia entre 1,06~5mA. O resistor pull-up define o nível de corrente, independentemente de os dispositivos receberem energia parasita ou convencional.

Como funciona o protocolo 1-Wire
Essa interface geralmente não é usada em microcontroladores ou microcomputadores. Geralmente é implementado por software usando bit-banging ou um receptor-transmissor assíncrono universal (UART).

A comunicação pela linha de dados é iniciada pelo mestre por meio de um reset. Ele puxa a linha de dados para 480 nós e depois a libera, permitindo que o resistor pull-up típico puxe a linha de dados para ALTO. Se dispositivos escravos estiverem conectados ao barramento, eles respondem ao sinal de reset puxando a linha de dados para BAIXO por 60~240 nós. Se a linha for puxada pelo(s) escravo(s), o mestre confirma sua presença no barramento. Após 60~240 nós, o(s) escravo(s) libera(m) a linha de dados, para que o mestre possa começar a escrever.

Após uma reinicialização, o mestre pode escrever e ler dados com os dispositivos escravos. Inicialmente, ele envia comandos ROM, como o comando search ROM (0xF0), para acessar o endereço ROM dos dispositivos escravos. Depois de ler os endereços ROM de todos os dispositivos escravos de 1 fio conectados, o dispositivo mestre pode acessar um deles enviando o comando Match ROM (0x55). Os comandos ROM são seguidos pelos de função.

Por exemplo, se um sensor de temperatura de 1 fio estiver conectado ao barramento, o microcontrolador pode enviar os comandos de função para iniciar a conversão de temperatura, ler a temperatura, etc. A ROM e os comandos de função têm 8 bits de comprimento.

Como o padrão 1-Wire não utiliza nenhum sinal de clock, a comunicação dos bits '0' e '1' ocorre configurando o nível lógico da linha de dados para um intervalo de tempo específico. Normalmente, o intervalo de tempo é de 60 nós. Há também um intervalo de 1us entre cada intervalo de tempo, para que a linha de dados seja puxada para ALTO novamente pelo resistor pull-up. Durante cada intervalo de tempo de 60 us, 1 bit é comunicado entre o mestre e o escravo. O intervalo de tempo pode ser até 10 vezes menor se o barramento estiver sobrecarregado.

Quando o mestre precisa escrever bits na linha de dados, ele puxa a linha de dados para baixo.

  • Para escrever '0', o mestre puxa a linha de dados para o intervalo de tempo completo de 60 us e depois a libera para um intervalo de 1 us entre os intervalos de tempo.
  • Para escrever '1', o mestre puxa a linha de dados para baixo por um período mais curto de 15 us, durante todo o intervalo de tempo, e então a libera por um intervalo de 1us entre os intervalos de tempo.

Os dispositivos escravos pulsam aproximadamente no intervalo de tempo intermediário (ou seja, 30us no intervalo de tempo de 60us). Eles possuem um multivibrador monoestável básico para detectar a duração dos pulsos. Os comandos ROM e de função têm 8 bits. Os dados comunicados também estão em grupos de 8 bits. A detecção de erros é realizada por uma verificação de redundância cíclica de 8 bits.

O mestre lê do dispositivo escravo após enviar uma pesquisa de ROM ou comando de função. A operação de leitura é controlada pelo dispositivo mestre. O mestre lê o escravo bit a bit enquanto os dados são comunicados ao mestre em grupos de 8 bits. Cada bit é lido em um intervalo de tempo de 60 us (ou menos se o barramento estiver sobrecarregado).

O mestre puxa a linha de dados para 1 nós e a libera. Em seguida, ele faz uma amostragem dos dados do barramento após 15 nós. Se o escravo escrever '0' no barramento, ele mantém a linha puxada para baixo durante os 60 us do intervalo de tempo e então libera a linha de dados por um intervalo de 1 us entre os intervalos de tempo. Se o escravo escrever '1' no barramento, ele mantém a linha puxada para baixo por 15 nós e então libera a linha de dados para o resistor pull-up puxar a linha de dados para ALTO.

O mestre amostra cada bit após 15 nós. Se o bit enviado pelo escravo for '0', a linha será puxada para BAIXO no momento da amostragem. Se o bit enviado pelo escravo for '1', a linha será puxada para ALTO no momento da amostragem.

O mestre pode se comunicar com até 100 escravos em um barramento padrão de 1 fio. Entretanto, quanto maior o número de escravos de 1 fio conectados ao barramento, mais tempo o mestre precisará para extrair dados deles. As bibliotecas de software normalmente usam bit-banging ou UART para cronometrar durações de pulso. O LSB é sempre enviado primeiro no protocolo 1-Wire.

Implementação de protocolo
Existem cinco tipos de sinais de barramento na comunicação de 1 fio, e cada um é iniciado e controlado pelo mestre. Esses sinais são Reset, Presença, Gravação 0, Gravação 1 e Leitura.

O protocolo pode ser implementado por um microcontrolador ou computador de duas maneiras: implementação com polling e implementação orientada por interrupção. Polled é uma implementação apenas de software. A implementação orientada a interrupções requer um temporizador/contador integrado.

Em termos de Arduino, a implementação pesquisada (somente software) pode ser feita usando a função delayMicroseconds . Esta função possui este código fonte:

void delayMicroseconds(unsigned int us)
{
// chamando a função delay_us do avrlib com valores baixos (por exemplo, 1 ou
// 2 microssegundos) fornece atrasos maiores que o desejado.
//atraso_us(us);
// para o clock de 16 MHz na maioria das placas Arduino
// para um atraso de um microssegundo, simplesmente retorne. a sobrecarga
// da chamada de função produz um atraso de aproximadamente 1 1/8 us.
se (–nós == 0)
retornar;
// o loop a seguir leva um quarto de microssegundo (4 ciclos)
// por iteração, então execute-o quatro vezes para cada microssegundo de
// atraso solicitado.
nós <<= 2;
// contabiliza o tempo gasto nos comandos anteriores.
nós -= 2;
//ocupado espera
__asm__ __volátil__ (
“1: sbiw %0,1” “\n\t” // 2 ciclos
“brne 1b”: “=w” (us): “0” (us) // 2 ciclos
);
}

Para Arduino, a operação de gravação de 1 fio pode ser realizada com esta função:

void OWWrite(uint8_t bit){
se(bit){
//Escreve o bit '1'
digitalWrite(NÚMERO PIN, 0x00);
atrasoMicrossegundos(6);
digitalWrite(NÚMERO PIN, 0x01);
atrasoMicrossegundos(64);
}
outro{
//Escreve o bit '0'
digitalWrite(NÚMERO PIN, 0x00);
atrasoMicrossegundos(60);
digitalWrite(NÚMERO PIN, 0x01);
atrasoMicrossegundos(10);
}
}

Para um computador, a mesma função pode ser escrita em C++, como segue:

void OWWrite(uint8_t bit){
se(bit==1){
//PF5 é o nome da porta
PORTF &= ~(1<
atrasoMicrossegundos(6);
PORTF = (1<
atrasoMicrossegundos(64);
}
outro{
PORTF &= ~(1<
atrasoMicrossegundos(60);
PORTF = (1<
atrasoMicrossegundos(10);
}
}

Para Arduino, a operação de leitura de 1 fio pode ser realizada por esta função:

uint8_t OWRead(void){
resultado uint8_t;
digitalWrite(NÚMERO PIN, 0x00);
atrasoMicrossegundos(6);
digitalWrite(NÚMERO PIN, 0x01);
atrasoMicrossegundos(9);
pinMode(NÚMERO PIN, ENTRADA);
resultado = digitalRead(PINNUMBER) & 0x01;
atrasoMicrossegundos(55);
pinMode(NÚMERO PIN, SAÍDA);
resultado de retorno;
}

Para um computador, a mesma função pode ser escrita em C++ conforme a seguir.

uint8_t OWReadBit(void){
resultado uint8_t = 0;
PORTF &= ~(1<
atrasoMicrossegundos(10);
PORTF = (1<
atrasoMicrossegundos(20);
if(PINF&(1<
resultado = ALTO;
}
atrasoMicrossegundos(30);
resultado de retorno;
}

Para Arduino, a operação de reset e presença pode ser realizada usando esta função:

uint8_t OWResetPresence(void){
resultado uint8_t;
atrasoMicrossegundos(0);
digitalWrite(NÚMERO PIN, 0x00);
atrasoMicrossegundos(480);
digitalWrite(NÚMERO PIN, 0x01);
atrasoMicrossegundos(70);
pinMode(NÚMERO PIN, ENTRADA);
resultado = digitalRead(PINNUMBER)^0x01;
atrasoMicrossegundos(410);
pinMode(NÚMERO PIN, SAÍDA);
resultado de retorno;
}

Para um computador, a mesma função pode ser escrita em C++:

uint8_t OWResetPresence(void){
resultado uint8_t = BAIXO;
PORTF &= ~(1<
atrasoMicrossegundos(480);
PORTF = (1<
atrasoMicrossegundos(55);
if(PINF&(1<
resultado = ALTO;
}
resultado de retorno;
}

Microcontroladores e computadores podem usar o UART para a implementação orientada por interrupções do protocolo 1-Wire. Os computadores podem precisar de um chip UART externo ou de uma placa breakout para se comunicar com dispositivos de 1 fio.

O Tx e Rx do UART devem se conectar à linha de dados do barramento de 1 fio. A porta UART deve ter um buffer de coletor aberto para que o(s) escravo(s) possa(m) puxar a linha de dados. Para o sinal de reset e presença, a taxa de transmissão deve ser definida para 9600 e o controlador/computador precisa transmitir 0xF0.

Durante a transmissão:

  • Os bits 0~3 são definidos como '0'
  • O bit 4 está definido como '1'
  • Os bits 5 a 7 são escritos pelo escravo.
  • O bit de parada está definido como HIGH

Se não houver nenhum escravo conectado ao barramento, o valor recebido é 0xF0. Se for recebido qualquer valor diferente de 0xF0, indica a presença de escravo(s) de 1 fio no barramento.

Para uma operação de gravação de 1 fio, a taxa de transmissão do UART deve ser definida como 115200. O bit inicial deve ser definido como '0' e o bit de parada como '1'.

Para escrever '1', o UART deve transmitir 0xFF e receber 0xFF em troca. Para escrever '0', o UART deve transmitir 0x00 e receber 0x00 em troca.

Para uma operação de leitura de 1 fio, a taxa de transmissão do UART deve ser definida como 115200. O bit inicial deve ser definido como '0' e o bit de parada como '1'. Para ler, a UART transmite um valor 0xFF, que equivale a liberar a linha puxada em estado HIGH. O resto dos bits são escritos pelo escravo. Se um escravo escrever '1', todos os bits após o bit inicial serão definidos como '1', então a UART receberá um valor de 0xFF. Se um escravo escrever '0', todos os bits após o bit inicial serão definidos como '0', então o UART receberá qualquer valor diferente de 0xFF.

Detecção de sequência
O dispositivo mestre pode procurar e detectar qualquer número arbitrário de dispositivos escravos de 1 fio no barramento. Também é possível conectar até 100 dispositivos escravos a um barramento padrão de 1 fio. Entretanto, em um barramento padrão de 1 fio, o mestre não possui nenhum mecanismo para detectar a sequência física dos dispositivos escravos no barramento. E em alguns dispositivos de 1 fio, dois pinos adicionais são fornecidos para suportar a detecção de sequência. Um desses dispositivos é o DS28EA00.

Detecção de sequência em interface de 1 fio.

Dispositivos
O protocolo 1-Wire é um padrão proprietário. Todos os dispositivos de 1 fio são fabricados pela Maxim Integrated. Alguns dos dispositivos de 1 fio notáveis ​​estão listados nesta tabela.

Conteúdo Relacionado

Como solucionar problemas comuns do ESP32-CAM
ESP32-CAM é um módulo de câmera compacto que combina...
Qual o papel dos sensores automotivos nos veículos modernos?
Uma rede de sensores é incorporada em todos os...
Como escolher um controlador de e-bike
O controlador do motor é um dos componentes mais...
Um guia para padrões USB de 1.0 a USB4
A evolução dos padrões USB foi fundamental para moldar...
Schurter aprimora série de seletores de tensão com revestimento prateado
A SCHURTER anuncia um aprimoramento para sua conhecida série...
A interface serial PCI fornece conectividade confiável em ambientes extremos
A Sealevel Systems anuncia o lançamento da Interface Serial...
STMicroelectronics expande portfólio de conversão de energia com diodos Trench Schottky de 100 V
A STMicroelectronics introduziu Diodos retificadores Schottky de trincheira de...
O que são Sistemas Globais de Navegação por Satélite (GNSS) e como são usados?
Determinar uma localização precisa é necessário em várias indústrias...
O conversor GaN de 50 W da STMicroelectronics permite projetos de energia de alta eficiência
O novo VIPerGaN50 da STMicroelectronics simplifica a construção de...
Samsung e Red Hat farão parceria em software de memória de próxima geração
A Samsung Electronics, fornecedora de tecnologia de memória avançada,...
Primeiro MPU single-core com interface de câmera MIPI CSI-2 e áudio
O mercado embarcado tem uma necessidade de soluções de...
Decodificação de fluência no motor de indução para melhor desempenho
Você provavelmente já se deparou com o termo 'arrastar'...
Compreendendo os isoladores de suporte em sistemas elétricos
Você provavelmente tem um Isolador de suporte Se você...
Explore Stay Insulator – segurança, instalação e manutenção
Você provavelmente já viu permanecer um isolante sente-se em...
Mais segurança e eficiência com o isolador de manilha
Você provavelmente já viu Isoladores de manilha entronizados em...
Descubra o poder dos relés de travamento para eficiência energética e muito mais
Você provavelmente já passou por situações em que o...
返回博客

发表评论

请注意,评论必须在发布之前获得批准。