Qual é o barramento serial incorporado mais popular? [fechadas]


8

Estou projetando um dispositivo incorporado que gostaria de tornar interoperável com periféricos de terceiros por meio de um barramento serial. Devo escolher SPI, I²C ou algum outro barramento?

Os periféricos terão uma largura de banda bastante baixa (alguns sensores que se comunicam pelo barramento, sondados periodicamente) e provavelmente dentro de um metro ou menos do controlador. A única tarefa do controlador é coletar os dados do sensor, empacotá-los de alguma forma e enviá-los para um módulo sem fio por outro barramento (embora o barramento do sensor possa ser potencialmente reutilizado para isso também).


3
Depende de quais periféricos você deseja interoperar, em que voltagens, em que velocidades e a que distância.
Toby Jaffey

1
Eu adicionei mais detalhes à pergunta
pfyon

1
Não acredito que o UART não tenha sido mencionado ... estou apenas dizendo.
vicatcu

Corrija-me se estiver errado, mas não achei que o UART fosse um ônibus. Eu pensei que era apenas uma comunicação serial entre dois dispositivos.
Pfyon

Então, um barramento não é para comunicação serial entre dois dispositivos? Você está descontando porque às vezes é usado apenas ponto a ponto? PCIe, SATA, HT são todos geralmente ponto a ponto. Independentemente disso, a maioria dos periféricos UART pode ser usada para RS-422, RS-485 ou LIN, que são multiponto.
Nick T

Respostas:


12

Se você não tiver certeza e seus requisitos forem bastante vagos, eu escolheria I²C.

A principal diferença entre SPI e I²C é que o SPI requer uma linha de seleção de chip para todos os periféricos. O I²C transmite um endereço periférico no início da comunicação, para que não precise de linhas de seleção de chip. As linhas de seleção de chips ficam complicadas depois dos primeiros.

Por outro lado, o SPI é provavelmente mais fácil de implementar e depurar. Pode ser o vencedor se você quiser apenas se conectar a alguns dispositivos.

Eu excluiria o USB, a menos que você precise de altas taxas de dados em distâncias relativamente longas (m em vez de cm). Eu também descartaria o RS-232, a menos que ainda seja 1976 e seus periféricos precisem de um sinal massivo para distinguir um pouco do ruído.

Você pode considerar Dallas 1-wire, mas suspeito que não seja tão comum quanto o I²C, e um ônibus "1-wire" que precisa de 2 fios para operar sempre me pareceu um pouco suspeito.


1
Eu acho que se você tem um controlador muito simples e precisa usar bit-bang (basicamente operando manualmente o relógio), é muito mais fácil implementar o SPI em quatro portas GPIO restantes.
Wouter Simons

1
Eu acho que você está certo sobre ser mais fácil bitbang SPI do que I2C. Espero que isso não aconteça.
Pfyon

3
+1 para a desconfiança do sistema de 2 fios comercializado como "1-wire".
Semaj

E para piorar, muitos chips que implementam o sistema de 1 fio (+ terra) requerem um terceiro pino - Vcc - porque não podem operar com energia parasitária! Quando penso em um barramento de 1 fio, estou imaginando alguma configuração acoplada capacitivamente, com um retificador de ponte com limite de corrente e algum código de linha com relógio automático; não 2 ou 3 fios.
Kevin Vermeer

"1-wire" deveria ter sido chamado "1-data-wire", já que é mais o que é. Os fios extras são GND e (às vezes) uma linha de energia estável.
Johan

3

Como você disse que a largura de banda seria baixa, alocaria IO suficiente para lidar com o SPI e o I2C. Eu também teria, se possível, linhas CS adicionais para que você possa executar vários dispositivos SPI. Também não se esqueça de ver como você vai alimentar o periférico. Se você estiver usando a bateria para obter vida útil máxima, é necessário colocar o dispositivo no modo de baixa energia ou remover a energia quando não estiver em uso. Use também o módulo de controle serial dos controladores, se possível, muitos controladores usarão o SPI, I2C e serial. Se você puder dividir a conexão sem fio do sensor, será mais fácil desligar os dispositivos quando não estiverem em uso. Além disso, alguns sensores possuem uma linha que informa ao controlador quando eles precisam ser reparados, para que você também deseje ter um IO extra entrando em um pino, idealmente do qual você possa gerar uma interrupção.


2

A questão é um pouco problemática por causa de problemas de definição.

Comunicação serializada é basicamente o que você precisa se quiser se comunicar com algum periférico externo sem usar várias portas no seu controlador. Basicamente, todo método de comunicação serial precisa de um relógio e uma configuração sobre como lidar com conexões de dados.

O SPI é um barramento de 4 fios. I2C é um barramento de 2 fios.

Cada um tem características diferentes. O que você precisa responder é a rapidez com que sua comunicação precisa ser, a confiabilidade que precisa ser, que opções seu microcontrolador oferece etc.

Este artigo da Wikipedia e este site de referência explica muito mais claramente do que eu posso, também siga as referências para aprender ainda mais!


2

Basicamente, você deve escolher entre I2C e SPI.

Independentemente de qual barramento você usar, considere o nível de tensão de seus sensores e periféricos de terceiros. Você pode fazer isso criando seu próprio conversor com dois MOSFETS (só funciona de uma maneira - pegar / sem alteração ou abaixar / sem alteração; apenas um problema se você precisar executar seus sensores em 3.3 e fazer interface com mestres de 1,8 e 5V). Veja o AN10441 da NXP [PDF]. Isso também funcionará para o SPI (basta remover os pullups). Você precisará adicionar uma linha ao seu conector para estabelecer uma tensão de referência (se ainda não estiver fazendo isso).

Uma desvantagem do I2C é que você está limitado ao relógio mais lento do ônibus. Se um sensor é capaz apenas de 100kHz e você deseja conversar com sua memória a 400kHz ou 1MHz (ambas as velocidades válidas), o comportamento do seu sensor mais lento não é especificado. Se você usa SPI, a linha de seleção de chips significa que o sensor mais lento nem ouvirá o que está no barramento, e você poderá executar velocidades diferentes para sensores diferentes.


1

Eu usaria I2C. Apenas certifique-se de obter um módulo sem fio que possa se comunicar via I2C, se você quiser tê-lo no mesmo barramento que seus sensores. A maioria dos periféricos de comunicação que vi usam SPI e não I2C.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.