Vous utilisez des GPIO supplémentaires comme E / S numériques?

11

j'espère que cette question est assez simple mais mon googling rapide n'a pas trouvé la réponse.

Je sais que le RPi a plusieurs GPIO que je peux utiliser ainsi que des GPIO spécialisés (SPI, I2C, UART, etc.). Dans mon projet, je suis en fait à court de GPIO ordinaires et j'aimerais utiliser également le SPI, I2C et d'autres GPIO comme GPIO "normaux". Je sais que cela peut être fait, mais je suppose que je ne sais pas comment je peux les configurer pour ne pas fonctionner en mode SPI / I2C / etc et simplement fonctionner en tant que GPIO ordinaires.

Dois-je faire quelque chose pour les configurer correctement?

Andrew Corsini
la source

Réponses:

10

La réponse courte

Non, vous (presque) pas. C'est en fait l'inverse - vous devez les configurer non pas pour être GPIO mais pour servir leur objectif spécial. La seule exception concerne les broches UART. De plus, les broches I²C sont en quelque sorte spéciales.

Broches UART

Les broches UART sont utilisées par le noyau pour la console. Vous devrez configurer le système pour ne pas les utiliser si vous souhaitez qu'ils soient disponibles pour votre usage:

  • éditer /boot/cmdline.txtet supprimer console=ttyAMA0,115200et kgdboc=ttyAMA0,115200paramètres
  • éditez /etc/inittabet commentez (mettez le #caractère devant) la ligne:

    T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
    
  • redémarrez votre RaspberryPi

Maintenant, les broches ne doivent pas être utilisées par le système et vous pouvez les utiliser

Broches I²C

Les broches I²C sont équipées de résistances de rappel 1,8 k intégrées. Ils ne peuvent pas être désactivés. Cela limite l'utilisation de ces broches dans certaines situations (mais peut être pratique dans d'autres).

Solutions complémentaires

Si vous manquez de broches GPIO, vous pouvez parfois facilement étendre son nombre en utilisant du matériel supplémentaire (mais simple). Pour la sortie par exemple, vous pouvez utiliser shift registersou I²C I/O expanders(aussi appelé `expandeurs de bus I²C), à la fois facilement à acheter et à utiliser. Vous pouvez trouver un exemple de son utilisation ici .

PFC8574(ou similaire de cette famille) sont si populaires qu'il existe un module de noyau prêt à l'emploi qui gère toutes les communications pour vous ( il n'est pas activé dans le noyau RaspberryPi officiel, vous devrez compiler votre propre noyau pour l'utiliser ). Le module est appelé gpio_pcf857x, à condition que vous l'ayez chargé modprobe(avec les pilotes I²C) et que vous ayez la puce connectée au I²Cbus, vous pouvez l'activer comme ceci:

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

pcf8574est le nom réel de votre puce (ce module peut gérer quelques puces différentes comme pca967xet max732x) et 0x27son adresse I²C(vous pouvez configurer l'adresse de la puce lors du câblage).

Cela créera des entrées dans le /sys/class/gpio/répertoire qui vous permettront de les utiliser de la même manière que les autres ports GPIO dans RaspberryPi, à condition que vous utilisiez l' sysinterface (par exemple wiringPiSetupSys()dans le câblagePi). Malheureusement, le RPi.GPIOmodule de Python ne prend pas en charge ce mode, il ne pourra donc pas utiliser ces broches avec cette bibliothèque. Les broches auront des chiffres élevés comme 248-255 ou similaire.

Remarque: PCF8574 est sinking current- il peut fournir un puits de disque (accepter à l'état bas) jusqu'à 20 mA, mais il ne peut fournir que 0,1 mA à l'état élevé. Cela signifie que vous allez généralement l'utiliser en logique inverse, c'est-à-dire +3.3V -> LED -> RESISTOR -> PCF8574_PIN.

Krzysztof Adamski
la source