Como o Raspberry Pi diferencia entre várias placas de expansão?

8

Estou apenas começando a usar o GPIO no Raspberry Pi para vários projetos. Existem muitas placas de interrupção para o RPi e muitas delas possuem pinos para empilhar placas umas sobre as outras. Parece que os pinos do GPIO passam direto e todas as placas têm os mesmos pinos em comum. Para mim, isso significa que todas as placas em uma pilha recebem exatamente os mesmos sinais do RPi e devem se comportar de acordo. Parece que isso pode produzir muitos erros com os comandos destinados a uma placa que afeta a maneira como outra placa opera, mas aparentemente isso não acontece.

Então, como o Raspberry Pi sabe qual placa está recebendo quais comandos específicos? Existe algum tipo de comando de inicialização que apenas uma placa específica reconhece e começa a aceitar o restante dos comandos?

cspirou
fonte
Isso também é algo que vejo com escudos empilháveis ​​do arduino e outras várias plataformas de computação.
cspirou
A resposta, receio, é que não exista uma maneira padrão de uma placa detectar outra e se reconfigurar. Você terá que examinar os detalhes de cada quadro antes da compra e determinar sua capacidade de trabalhar um com o outro.
joana

Respostas:

5

Os computadores usam um sistema chamado barramento para conectar vários dispositivos periféricos à CPU através do mesmo conjunto de fios. I2C e SPI são exemplos de sistemas de barramento usados ​​com os pinos pi GPIO, que permitem vários dispositivos nos mesmos pinos físicos (gerenciados pelo barramento interno), mas usando endereços diferentes . O endereçamento é uma abstração criada pelo protocolo do sistema de barramento. É um pouco como você pode ter vários aplicativos em rede usando a mesma conexão física com a Internet, todos executando simultaneamente.

Por exemplo, olhando para o RTC Pi Plus , uma das placas empilháveis ​​do seu link de exemplo:

insira a descrição da imagem aqui

Observe no lado próximo as cinco conexões em uma caixa. Estes correspondem aos pinos do outro lado. Eles estão rotulados:

  • 5V = Potência, compartilhável com outros dispositivos.
  • GND = Terra, também comum.
  • Pinos de barramento SDA e SCL = I2C; no pi, os pinos 3 e 5. Você pode ter vários dispositivos no barramento I2C, todos usando esses mesmos dois pinos para comunicação.
  • SQW = Eu acredito que isso significa "onda quadrada" e talvez um de nossos membros com mais conhecimento eletrônico deixe um bom comentário explicando sua finalidade.

Em outras palavras, a maioria dos pinos não é usada por esta placa. Eles estão lá apenas para permitir o empilhamento. Os que ele usa são todos (ou principalmente, ainda não sabem sobre SQW) compartilháveis ​​simultaneamente com outros dispositivos.

O limite real para empilhar dessa maneira será a quantidade de energia que pode ser fornecida versus o que é consumido, não o número de pinos envolvidos. Talvez isso se tornasse uma limitação se você incluísse fontes de alimentação adicionais, mas acho que antes você precisaria mover a pilha para fora e começar a usar uma escada para trabalhar nela. ;)

Cachinhos Dourados
fonte
3

Você pode ter apenas uma placa HAT, para que não haja esse problema. Existem algumas placas nas quais você pode conectar mais de uma, mas essas não são placas HAT.

salmão
fonte
11
HATs pode não ser a coisa certa a dizer, mas estou falando de placas que se conectam aos pinos GPIO. O site a seguir mostra pilhas altas dessas placas. abelectronics.co.uk Eu posso modificar a pergunta para remover 'HATs'
cspirou 15/03/2015
1

Então, como o Raspberry Pi sabe qual placa está recebendo quais comandos específicos?

O Pi não pode saber. Você tem que ter certeza.

O problema é que, se você conectar várias placas de extensão, terá que tomar cuidado para que as linhas de sinais não sejam usadas mais de uma vez ou implementar um esquema de barramento que possa funcionar com vários dispositivos que compartilham algumas linhas (como @goldilocks já sugeriu). Para ter uma idéia de como isso pode ser feito, eu recomendaria ler o antigo barramento ISA . Algo que poderia ser implementado usando o GPIO como linhas de dados e endereço (e se alguém estiver disposto à dor).

Existe algum tipo de comando de inicialização que apenas uma placa específica reconhece e começa a aceitar o restante dos comandos?

Enquanto os HATs estão fora de questão, o esquema de identificação que eles usam vale a pena dar uma olhada. Observe que não há HATs empilhados * (de acordo com o Blog do Raspberry Pi : HATs empilháveis ​​apresentados na discussão sobre especificações - mas acabou sendo descartado devido ao grande aumento na complexidade do autoconfig e ao potencial de erro do usuário ). Portanto, a qualquer momento, apenas um HAT será conectado, terá sua EEPROM lida e disponibilizado suas informações na árvore de dispositivos.


* É possível fazer chapéus empilháveis ​​se forem do mesmo tipo e, portanto, não exigirem identificação múltipla e diferente, por exemplo, o PWM / Servo HAT Adafruit de 16 canais para Raspberry Pi .

Ghanima
fonte