Qual é o poder sobre o estado dos GPIOs?


35

Qual é o estado dos GPIOs quando a energia é aplicada? por exemplo, Alto, Baixo, Hi-Z?

Além disso, qualquer sistema operacional altera o estado de qualquer GPIO quando é carregado? Espero que não.


A menos que esteja na folha de dados, você provavelmente precisará medi-la para ter certeza. O Linux não "conhece" os GPIOs, portanto não os altera durante a inicialização (a menos que você tenha feito um script de inicialização), mas sempre há uma chance da ROM.
Malvineous

@ Malvineous, você está incorreto. O Linux conhece os GPIOs e o suporte está embutido no kernel. Aqui está alguma documentação: kernel.org/doc/Documentation/gpio.txt #
Emmaly Wilson

2
@DustyWilson: Desculpe se eu não estava claro, eu quis dizer que o núcleo do Linux Linux não utiliza GPIOs durante a inicialização. Apenas os disponibiliza para o espaço do usuário e drivers específicos. Portanto, o kernel padrão não deve alterar o estado dos pinos do GPIO durante a inicialização.
Malvineous 18/07/12

@ Malvineous: Ah, entendi.
21712 Emmaly Wilson

Respostas:


11

Encontrei a resposta aqui graças a russellstrong . Cito a parte relevante abaixo

Eu tirei conclusões sobre meus resistores pull-up / sensibilidade do meu circuito aos resistores pull-down. O RPi não está configurando o GPIO para a saída quando inicializado. Ele está ligando um resistor pull down por 740 milissegundos.

Eu usei dois resistores de 18K (3v3 -> GPIO -> GND) para analisar exatamente o que está acontecendo com os pinos. Aqui está o traço. Linha azul é potência 3v3, linha amarela é linha GPIO.

insira a descrição da imagem aqui


Você pode esclarecer um pouco? Quando o Raspberry Pi inicializa, o GPIO é definido como um estado de entrada de alta impedância?
Alex Chamberlain

11
@AlexChamberlain, parece que o chip Broadcom inicia-se com pulldowns, mas o carregador limpa os pulldowns assim eles vão ser alta impedância (inputs)
John La Rooy

9

Quando começou a usar a distribuição Debian recomendada para RPi, o GPIO está desativado. Você precisa habilitar cada pino individualmente.

Se você estiver fazendo isso via / sys , encontrará "Paths in Sysfs" interessantes (pesquise em http://www.kernel.org/doc/Documentation/gpio.txt ). Em particular, você ativaria um pino "exportando" ele. Todos os comandos abaixo assumem que você está executando com privilégios de root (sudo ou não) ou alterou as permissões / propriedade dos arquivos virtuais que estão sendo modificados.

echo 4 > /sys/class/gpio/export

Isso permite que o pino GPIO # 4, que faz com que / sys / class / gpio / gpio4 exista, que contém vários arquivos virtuais. Esses arquivos incluem "direção", que define se é um pino de entrada ou saída, "valor", que é somente leitura para entrada ou gravável para saída e contém o valor atual e outros.

echo out > /sys/class/gpio/gpio4/direction # set it as an output pin
echo 1 > /sys/class/gpio/gpio4/value # set the value to ON
echo 0 > /sys/class/gpio/gpio4/value # set the value to OFF
echo in > /sys/class/gpio/gpio4/direction # set it as input
cat /sys/class/gpio/gpio4/value # get the value
echo 4 > /sys/class/gpio/unexport # disables pin 4 and removes the gpio4 directory

Obviamente, você provavelmente preferirá usar alguma biblioteca preexistente para fazer o GPIO fornecido ou compatível com o idioma de sua escolha. Mas se você está querendo algo simples, basta fazer a interface diretamente com o sysfs para fazer o GPIO muito básico.


Isso é útil. Olhei para a folha de dados, mas não consegui encontrar o estado padrão dos pinos. Isso é significativo se você estiver controlando as coisas com os pinos e não desejar que os periféricos sejam ligados enquanto o sistema operacional estiver carregando.
John La Rooy

3
Esta é uma ótima resposta, mas não tenho certeza de que realmente responda à pergunta. Qual é o estado do GPIO logo após ser ativado? e direção definida?
21812 Alex Chamberlain

@gnibbler: Eu acredito que você só precisará testá-lo. Eu tentei isso há pouco e não vi nada inesperado em relação a algo ligando ou desligando. Não sei nem prometo que minha experiência seja a esperada. Eu diria que você deve simplesmente jogar um multímetro nos pinos que deseja testar e depois reiniciar ou ligar o Pi várias vezes para testar. O que vi foi que todos os pinos estavam desligados, como se não houvesse energia no Pi, até que eu mesmo habilitasse cada um.
Emmaly Wilson

@ DustyWilson, talvez eles sejam configurados como entradas sem pull ups ou pull downs. Isso significa que eles são efetivamente flutuantes se conectado a um FET e causaria comportamento aleatório se um pull up / down resistor não é adicionado à porta
John La Rooy

de fato ... cat /sys/class/gpio/gpio4/directiondiz "in". Li na folha de dados que não é possível ler o estado das pullups / pulldowns. Vou tentar medi-los
John La Rooy
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.