Por que alguns pinos do GPIO são ALTOS quando o Raspberry Pi é inicializado?

18

Eu tenho um circuito fácil conectado, com um LED conectado ao pino 18 na referência BOARD. Executo um programa simples para colocar o pino 18 em ALTO, que acende o LED e, alguns segundos depois, coloco o pino 18 em BAIXO e, finalmente, encerro meu programa com GPIO.cleanup ().

Neste ponto, o LED está apagado, o que significa que o pino 18 está apagado (LOW). Agora, reinicializo ou reinicio meu Raspberry Pi e, quando ele inicializa, o LED no pino 18 acende novamente, mesmo que o pino estivesse desligado antes de eu reiniciar o Raspberry Pi.

Por que isso pode estar acontecendo? Como posso configurar um pino específico, como o pino 18, para ser desativado quando o Raspberry Pi é inicializado? E eu não quero que nenhum pino GPIO esteja em ALTO quando o Raspberry Pi inicializar.

Estou preocupado com esse problema, porque digamos que o pino 18 esteja conectado a um motor DC em um robô e, quando o Raspberry Pi inicializar, o motor será ligado, e isso não é o que eu quero, porque isso interfere no toda a estrutura do robô, e alguns motores podem iniciar e outros não, dependendo dos pinos aos quais estão conectados. Quero ligar manualmente todos os motores de maneira sincronizada.

Outra coisa é que nem todos os pinos têm esse problema. Alguns ficam de fora quando o Raspberry Pi é inicializado, mas outros não.

Viktor Raspberry
fonte
Esse LED está tão brilhante quanto seria quando você o define alto ou apenas brilha vagamente?
goldilocks
Existem 3,3 volts aplicados a ele.
Viktor Raspberry
Portanto, se você entrar /sys/class/gpioe exportar o pino 18, em que estado o sistema diz que está se você não alterar nada?
goldilocks
Quando escrevo "/ sys / class / gpio", ele diz "-bash: / sys / class / gpio: é um diretório". Não sei como exportar um pino específico.
22815 Viktor Raspberry
Existem inúmeras explicações disso , então não vou me incomodar em regurgitar. Esse exemplo é meio pesado no echo, que escreve, ou seja, define algo. Depois de exportá-lo, você deseja abster-se disso e usar apenas o catque lê para verificar a direção e o valor.
goldilocks

Respostas:

25

Na energização, os GPIOs são puxados para cima ou para baixo através dos resistores internos. Se a atração é alta ou baixa para um GPIO específico, é detalhado na página 102 dos Periféricos BCM2835 ARM .

Quando o kernel do Linux é iniciado e se a árvore de dispositivos estiver ativada (provável), ele reconfigurará os GPIOs de acordo com as configurações da árvore de dispositivos. Os módulos carregados de /etc/modulestambém podem atualizar o estado GPIO.

Qualquer outro software que você esteja executando na inicialização pode reconfigurar os GPIOs subsequentemente às configurações da árvore de dispositivos e às cargas do módulo.

É mais seguro encontrar uma solução de hardware se você tiver um hardware que pode ser acionado incorretamente na inicialização do sistema.

joan
fonte
10

Quando o Raspberry Pi inicializa, as linhas GPIO são redefinidas para o padrão do chip, o sistema operacional é carregado e as redefine para o padrão do sistema operacional. Não há como "lembrar" as configurações durante uma reinicialização. Consulte também Qual é o estado de energia dos GPIOs? e estado GPIO após a inicialização .

hildred
fonte
2

Eu sei que é muito tarde. Para responder. Você pode escrever um script python ou um script bash que defina manualmente o pino para baixo e agende um trabalho cron para ser executado a cada inicialização. Você não precisará modificar nenhum arquivo crítico / do sistema. Além do cron

Sathaye.h
fonte