Unused GPIO Pins on the BeagleBone Black

I’m currently working on a project requiring many GPIO pins, powered by a BeagleBone Black ARM Linux board. As I quickly found, many of the 65 possible GPIO pins are used for other functions. 25 of them are reserved for GPIO use if HDMI is disabled. In my case, using the BBB as a headless server, I have no use for HDMI. Leaving HDMI on leaves you 14 GPIO pins.

Disabling HDMI

Disabling HDMI will free up pins J8_27-31 and J8_39-44 (see diagram below). The BeagleBone Black implements HDMI and onboard eMMC as virtual “cape” daughterboards. To disable HDMI, mount the FAT boot partition and edit uEnv.txt:

mount /dev/mmcblk0p1 /mnt/card
vi /mnt/card/uEnv.txt

Make the first line read like this:

optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN

Now unmount the card and reboot:

umount /mnt/card
shutdown -r now

Finally, you can check to make sure the HDMI cape was not loaded with this:

cat /sys/devices/bone_capemgr.*/slots

Every cape that is currently loaded will show an L in the second column. You should see that the eMMC cape remains loaded while the HDMI cape is not.

Pure GPIO Pins

If you disabled HDMI as described above, the GPIO pins that are unshaded below are always available to us:

Unused GPIO pins on BeagleBone Black