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?
Respostas:
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:
Observe no lado próximo as cinco conexões em uma caixa. Estes correspondem aos pinos do outro lado. Eles estão rotulados:
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. ;)
fonte
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.
fonte
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).
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 .
fonte