Comunicações Digitais
SPI
SPI significa Serial Peripheral Interface e é comumente utilizada para a comunicação de periféricos como sensores (IMU, barômetros etc.), cartões SD, outros processadores e outros. Normalmente, essa interface consegue atingir velocidades de clock de até 10 MHz, com 10 Mbits de taxa de dados. Além disso, diferentemente do I2C, não necessita de resistores de pull-up. É também uma interface com um mestre e vários escravos (periféricos). É uma interface de 4 conexões, ou seja, cada escravo possui 4 conexões envolvidas na comunicação. Os nomes delas são:
CLK ou SCK: Clock enviado pelo mestre, esta é uma conexão compartilhada por todos os periféricos.
COPI (MOSI ou SDO): (Controller Out Peripheral In) O output do controlador (mestre) e a entrada do periférico (escravo) também são compartilhados entre todos os periféricos.
CIPO (MISO ou SDI): (Controller In Peripheral Out) O input do controlador e a saída do periférico também são compartilhados entre todos os periféricos.
NCS ou CSB: Este é o chip select de qual periférico será selecionado para comunicação. Ele funciona com lógica invertida, ou seja, ativo quando 0. Normalmente um por periférico, não é compartilhado.
Maneiras de conexão
Ponto a ponto (Point to Point): Quando há somente um periférico.
Multi-subnó (Multi-Subnode): Vários periféricos, porém somente um NCS. Você envia o mesmo dado para todos os periféricos ao mesmo tempo.
Daisy chain: Vários periféricos e vários NCS, comunicação individual com cada um. Este modo de conexão possui algumas desvantagens, dentre elas, que a comunicação entre cada periférico é mais lenta e que você possui uma maior carga capacitiva nas trilhas.
Não se deve ter mais de um periférico ativo ao mesmo tempo, isso pode causar curto-circuitos, pois ambos tentam ter um output ao mesmo tempo.A capacitância no bus de SPI (ou seja, nas trilhas) não deve exceder o máximo especificado pelo componente. Normalmente, quanto maior a capacitância, menor as velocidades que você pode atingir na comunicação. Também existem opções de Quad SPI (QSPI) e Octo SPI (OSPI) que permitem atingir uma velocidade maior de transferência de dados.
É recomendado o uso de resistores de pull-up na linha de NCS de cada periférico para evitar que, durante o boot, ele não seja ligado quando não deve ser. O valor desses resistores não é de extrema importância, desde que sejam de mais de 10k. Use o que for mais comum no seu design (BOM menor).
Não é um problema específico do SPI, mas algumas memórias de QSPI podem assumir o estado de SPI e os pinos de QSPI se tornam pinos de proteção de escrita, então é bom utilizar resistores de pull-up nesse caso.
O SPI normalmente não precisa de controle de impedância, porém, se você tiver tempos de subida rápidos e trilhas longas, é útil utilizar um controle de impedância. Isso se deve ao fato de que podem haver reflexões no sinal ou perda da integridade do mesmo, além de aumentar as interferências eletromagnéticas. Se você estiver fazendo um design que já possui controle de impedância, não custa também utilizar no SPI com traços de 50Ω. Também é útil ter resistores nos outputs dos drivers para que você possa "tunar" a impedância de saída.
Caso o BUS de SPI vá sair da placa via um conector, é útil utilizar filtros e adicionar retornos de GND.
Também é útil utilizar um resistor de terminação na trilha de CLK, pelo menos.
Mantenha uma distância entre as trilhas de SPI de pelo menos 3 vezes o tamanho do seu dielétrico da placa. Mantenha traços pequenos e finos para evitar uma maior capacitância do bus. Não divida as trilhas no meio do caminho, passe entre os periféricos.
I²C
I²C é uma interface de comunicação entre múltiplos dispositivos. Ela é uma interface de dois fios, ou seja, com apenas duas trilhas. É útil para controle, como CODECs e sensores que não precisam de uma alta velocidade de comunicação. Ela possui 3 frequências de operação: a comum de 100 kHz, a rápida de 400 kHz e a rápida+ de 1000 kHz. Também é uma interface de dreno aberto, ou seja, precisa de resistores de pull-up para atingir o nível lógico alto, e para ir para 0, somente aciona um fet que está ligado ao 0V.
É importante também dizer que a capacitância no bus de comunicação também não pode exceder o spec máximo, pois isso afeta os rise times. É importante notar também que os tempos de subida no bus são mais lentos do que os tempos de descida, devido ao fato de ser basicamente um capacitor que carrega via o resistor de pull-up e, na descida, ele é basicamente um curto ao GND. O tempo de subida costuma então estar nas centenas de nanossegundos, enquanto os de descida entre 5-10 ns.
As duas linhas utilizadas são: SDA - utilizada para os dados SCL - utilizada para o clock.
É bom ter alguns valores meio abstratos como valores máximos também. Então podemos considerar que a capacitância típica de cada dispositivo é em torno de 10pF. Cada velocidade de comunicação também possui um valor máximo de subida, sendo:
Standart
Fast
Fast+
rise (ns)
1000
300
120
cap max (pF)
400
400
560
Mesmo assim, procure sempre a especificação do seu componente.
O valor do resistor de pull-up também é algo a ser considerado. Algumas observações são que o valor do seu resistor para a linha de SDA e para a linha de SCL devem ser os mesmos. É possível também montar uma tabela com o que deve fazer o valor do seu resistor aumentar ou diminuir:
Aumentar o R
Diminuir o R
+tensão de VDD
Velocidade de comunicação maior
menor consumo de corrente
maior capacitância no Bus de I²C
Em caso de a capacitância de bus ser muito grande, é útil utilizar buffers para mitigar o tempo de rise. Também podem ser utilizados level shifters para mudar a tensão de comunicação, a fim de fazer com que um aparelho que utilize 3V3 se comunique com um de 5V.
Também deve-se tomar cuidado para não colocar dispositivos que compartilham o mesmo endereço no mesmo bus. Uma opção para evitar problemas com isso é utilizar aparelhos que possuem pinos de chip select ou utilizar um bus separado de I²C. Também podem ser utilizados multiplexadores.
Quando rotear, siga basicamente a mesma regra de distância de 3 dielétricos que a comunicação SPI.
USB
Universal Serial Bus ou USB é um método de comunicação digital entre dois aparelhos. Existem diversos padrões para a comunicação usb, que por acaso tem nomes muito confusos, neste documento serão retratados somente os básicos do USB 2.0. O USB 2.0 pode transferir até 480Mbps permitindo uma transferência de dados com velocidade boa
O USB possui duas conexões essenciais D+ e D- que é um par diferencial. Isso significa que ambos os pinos transferem os mesmos dados, porém um invertido em relação ao outro. Ao rotear esses pinos é importante manter ambas as trilhas o mais próximo possível e devem possuir uma impedância de 90 ohms. O critério da impedância da trilha pode ser ignorado, no entanto caso o tamanho dela não ultrapasse o comprimento crítico que é 0,75 polegadas ou 19,05mm.
É importante notar que também a depender do seu componente podem ser necessários resistores de terminação perto do conector na linha de D+ e de D-, os valores desses resistores no entanto variam de componente a componente e devem ser conferidos no datasheet do mesmo.
UART
A comunicação uart é uma comunicação de dois fios que pode ser utilizada entre dois aparelhos, ela é extremamente útil para se fazer debug de circuitos, sistemas de log de dados ou comunicações simples entre aparelhos. A comunicação uart no ponto de vista de hardware é uma das mais simples por não ser tão rápida, não necessitar de nenhum componente externo, ter somente dois fios e fazer conexão entre somente dois aparelhos.
Os dois pinos presentes na comunicação são os TX e RX, transmit e receive. É importante notar que não se deve conectar os TX de dois componentes ou aparelhos entre si, deve se conectar sempre o TX ao RX de um e vice-versa.
Um outro traço importante deste protocolo é que ele é assíncrono, ou seja, os dois aparelhos não são sincronizados entre si por um sinal de clock. Deve-se então configurar ambos para que transmitam os seus dados no mesmo baud rate.
Last updated