Usando GPIOs adicionais como E / S digital?

11

espero que esta pergunta seja bastante simples, mas meu rápido estudo no Google não encontrou a resposta.

Eu sei que o RPi possui vários GPIOs que posso usar, além de GPIOs especializados (SPI, I2C, UART, etc.). No meu projeto, na verdade, estou ficando sem os GPIOs regulares e gostaria de usar o SPI, o I2C e outros GPIOs como GPIOs "regulares" também. Sei que isso pode ser feito, mas acho que não tenho certeza de como posso configurá-los para não serem executados nos modos SPI / I2C / etc e apenas como GPIOs regulares.

Preciso fazer algo para configurá-los adequadamente para isso?

Andrew Corsini
fonte

Respostas:

10

A resposta curta

Não, você (quase) não. Na verdade, é o contrário - você precisa configurá-los para não serem GPIO, mas para servir a seus propósitos especiais. A única exceção são os pinos UART. Os pinos I e C também são especiais.

Pinos UART

Os pinos UART são usados ​​pelo kernel para o console. Você precisará configurar o sistema para não usá-los se desejar que eles estejam disponíveis para seu uso:

  • editar /boot/cmdline.txte remover console=ttyAMA0,115200e kgdboc=ttyAMA0,115200parâmetros
  • edite /etc/inittabe comente (coloque um #caractere na frente) a linha:

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • reinicie o seu RaspberryPi

Agora, os pinos não devem ser usados ​​pelo sistema e você pode usá-los

Pinos I²C

Os pinos I²C possuem resistores pull-up de 1,8k instalados. Eles não podem ser desativados. Isso limita o uso desses pinos em algumas situações (mas pode ser útil em outras).

Soluções adicionais

Se estiver com poucos pinos GPIO, às vezes você pode estender seu número facilmente usando algum hardware adicional (mas simples). Para saída, por exemplo, você pode usar shift registersou I²C I/O expanders(também chamado de `expansores de barramento I²C) ', ambos facilmente para comprar e usar. Você pode encontrar exemplos de seu uso aqui .

PFC8574(ou similar desta família) são tão populares que existe um módulo do kernel pronto para usar que lida com toda a comunicação para você ( ele não está ativado no kernel oficial do RaspberryPi, você precisará compilar seu próprio kernel para usá-lo ). O módulo é chamado gpio_pcf857x, desde que você o carregue modprobe(junto com os drivers I²C) e que tenha o chip conectado ao I²Cbarramento, você pode ativá-lo desta forma:

echo pcf8574 0x27 > /sys/class/i2c-adapter/i2c-0/new_device

onde pcf8574está o nome atual do chip (este módulo pode lidar com alguns chips diferentes como pca967xe max732x) e 0x27o endereço dele I²C(você pode configurar o endereço do chip ao conectá-lo).

Isso criará entradas no /sys/class/gpio/diretório que permitirão que você as use da mesma maneira que outras portas GPIO no RaspberryPi, desde que você esteja usando a sysinterface (por exemplo, wiringPiSetupSys()na fiaçãoPi). Infelizmente, o RPi.GPIOmódulo do Python não suporta esse modo, portanto, não será possível usar esses pinos nesta biblioteca. Os pinos terão alguns números altos, como 248-255 ou similar.

Nota: PCF8574 é sinking current- ele pode fornecer dissipador de unidade (aceitar em estado baixo) até 20mA, mas pode fornecer apenas 0,1mA em estado alto. Isso significa que você geralmente o usará em lógica reversa, ie +3.3V -> LED -> RESISTOR -> PCF8574_PIN.

Krzysztof Adamski
fonte