BeagleBone Black Pins

Submitted by Evan Boldt on

Pinout Tables

These tables are based on the BeagleBone Black System Reference Manual (Creative Commons) by Gerald Coley of BeagleBoard.org. They aren't really available anywhere else on the internet, so I thought I'd transcribe them into a more available format.

The PROC column is the pin number on the processor.

The PIN column is the pin number on the expansion header.

The MODE columns are the mode setting for each pin. Setting each mode to align with the mode column will give that function on that pin. Each pin's mode can be set individually.

Note that the MODE5 column is absent. That is not a typo. It just doesn't do anything. The only exception is GPIO0_7 in expansion header P9 has a mmc0_sdwp

Expansion Header P8 Pinout
PINPROCNAMEMODE0MODE1MODE2MODE3MODE4MODE6MODE7
1,2GND
3R9GPIO1_6gpmc_ad6mmc1_dat6    gpio1[6]
4T9GPIO1_7gpmc_ad7mmc1_dat7    gpio1[7]
5R8GPIO1_2gpmc_ad2mmc1_dat2    gpio1[2]
6T8GPIO1_3gpmc_ad3mmc1_dat3    gpio1[3]
7R7TIMER4gpmc_advn_ale timer4   gpio2[2]
8T7TIMER7gpmc_oen_ren timer7   gpio2[3]
9T6TIMER5gpmc_be0n_cle timer5   gpio2[5]
10U6TIMER6gpmc_wen timer6   gpio2[4]
11*R12GPIO1_13gpmc_ad13lcd_data18mmc1_dat5*mmc2_dat1eQEP2B_in gpio1[13]
12*T12GPIO1_12gpmc_ad12lcd_data19mmc1_dat4*mmc2_dat0EQEP2A_IN gpio1[12]
13*T10EHRPWM2Bgpmc_ad9lcd_data22mmc1_dat1*mmc2_dat5ehrpwm2B gpio0[23]
14*T11GPIO0_26gpmc_ad10lcd_data21mmc1_dat2*mmc2_dat6ehrpwm2_tripzone gpio0[26]
15*U13GPIO1_15gpmc_ad15lcd_data16mmc1_dat7*mmc2_dat3eQEP2_strobe gpio1[15]
16*V13GPIO1_14gpmc_ad14lcd_data17mmc1_dat6*mmc2_dat2eQEP2_index gpio1[14]
17*U12GPIO0_27gpmc_ad11lcd_data20mmc1_dat3*mmc2_dat7ehrpwm0_synco gpio0[27]
18V12GPIO2_1gpmc_clk_mux0lcd_memory_clkgpmc_wait1mmc2_clk mcasp0_fsrgpio2[1]
19*U10EHRPWM2Agpmc_ad8lcd_data23mmc1_dat0*mmc2_dat4ehrpwm2A gpio0[22]
20*V9GPIO1_31gpmc_csn2gpmc_be1nmmc1_cmd*   gpio1[31]
21*U9GPIO1_30gpmc_csn1gpmc_clkmmc1_clk*   gpio1[30]
22V8GPIO1_5gpmc_ad5mmc1_dat5    gpio1[5]
23U8GPIO1_4gpmc_ad4mmc1_dat4    gpio1[4]
24V7GPIO1_1gpmc_ad1mmc1_dat1    gpio1[1]
25U7GPIO1_0gpmc_ad0mmc1_dat0    gpio1[0]
26V6GPIO1_29gpmc_csn0     gpio1[29]
27*U5GPIO2_22lcd_vsync*gpmc_a8    gpio2[22]
28*V5GPIO2_24lcd_pclk*gpmc_a10    gpio2[24]
29*R5GPIO2_23lcd_hsync*gpmc_a9    gpio2[23]
30*R6GPIO2_25lcd_ac_bias_en*gpmc_a11    gpio2[25]
31*V4UART5_CTSNlcd_data14*gpmc_a18eQEP1_indexmcasp0_axr1uart5_rxduart5_ctsngpio0[10]
32*T5UART5_RTSNlcd_data15*gpmc_a19eQEP1_strobemcasp0_ahclkxmcasp0_axr3uart5_rtsngpio0[11]
33*V3UART4_RTSNlcd_data13*gpmc_a17eQEP1B_inmcasp0_fsrmcasp0_axr3uart4_rtsngpio0[9]
34*U4UART3_RTSNlcd_data11*gpmc_a15ehrpwm1Bmcasp0_ahclkrmcasp0_axr2uart3_rtsngpio2[17]
35*V2UART4_CTSNlcd_data12*gpmc_a16eQEP1A_inmcasp0_aclkrmcasp0_axr2uart4_ctsngpio0[8]
36*U3UART3_CTSNlcd_data10*gpmc_a14ehrpwm1Amcasp0_axr0 uart3_ctsngpio2[16]
37*U1UART5_TXDlcd_data8*gpmc_a12ehrpwm1_tripzonemcasp0_aclkxuart5_txduart2_ctsngpio2[14]
38*U2UART5_RXDlcd_data9*gpmc_a13ehrpwm0_syncomcasp0_fsxuart5_rxduart2_rtsngpio2[15]
39*T3GPIO2_12lcd_data6*gpmc_a6 eQEP2_index  gpio2[12]
40*T4GPIO2_13lcd_data7*gpmc_a7 eQEP2_strobepr1_edio_data_out7 gpio2[13]
41*T1GPIO2_10lcd_data4*gpmc_a4 eQEP2A_in  gpio2[10]
42*T2GPIO2_11lcd_data5*gpmc_a5 eQEP2B_in  gpio2[11]
43*R3GPIO2_8lcd_data2*gpmc_a2 ehrpwm2_tripzone  gpio2[8]
44*R4GPIO2_9lcd_data3*gpmc_a3 ehrpwm0_synco  gpio2[9]
45*R1GPIO2_6lcd_data0*gpmc_a0 ehrpwm2A  gpio2[6]
46*R2GPIO2_7lcd_data1*gpmc_a1 ehrpwm2B  gpio2[7]

 * some pins are used by the internal storage (eMMC), and HDMI. 11-21 are used by eMMC.  27-46 are used by HDMI. 

Expansion Header P9 Pinout
PINPROCNAMEMODE0MODE2MODE3MODE4MODE6MODE7
1,2GND
3,4DC_3.3V
5,6VDD_5V
7,8SYS_5V
9PWR_BUT
10A10RESET_OUT      
11T17gpmc_wait0mii2_crsgpmc_csn4rmii2_crs_dvmmc1_sdcduart4_rxd_mux2gpio0[30]
12U18gpmc_be1nmii2_colgpmc_csn6mmc2_dat3gpmc_dirmcasp0_aclkr_mux3gpio1[28]
13U17gpmc_wpnmii2_rxerrgpmc_csn5rmii2_rxerrmmc2_sdcduart4_txd_mux2gpio0[31]
14U14gpmc_a2mii2_txd3rgmii2_td3mmc2_dat1gpmc_a18ehrpwm1A_mux1gpio1[18]
15R13gpmc_a0gmii2_txenrmii2_tctlmii2_txengpmc_a16ehrpwm1_tripzonegpio1[16]
16T14gpmc_a3mii2_txd2rgmii2_td2mmc2_dat2gpmc_a19ehrpwm1B_mux1gpio1[19]
17A16spi0_cs0mmc2_sdwpI2C1_SCLehrpwm0_synci  gpio0[5]
18B16spi0_d1mmc1_sdwpI2C1_SDAehrpwm0_tripzone  gpio0[4]
19D17uart1_rtsntimer5dcan0_rxI2C2_SCLspi1_cs1 gpio0[13]
20D18uart1_ctsntimer6dcan0_txI2C2_SDAspi1_cs0 gpio0[12]
21B17spi0_d0uart2_txdI2C2_SCLehrpwm0B EMU3_mux1gpio0[3]
22A17spi0_sclkuart2_rxdI2C2_SDAehrpwm0A EMU2_mux1gpio0[2]
23V14gpmc_a1gmii2_rxdvrgmii2_rxdvmmc2_dat0gpmc_a17ehrpwm0_syncogpio1[17]
24D15uart1_txdmmc2_sdwpdcan1_rxI2C1_SCL  gpio0[15]
25A14mcasp0_ahclkxeQEP0_strobemcasp0_axr3mcasp1_axr1EMU4_mux2 gpio3[21]
26D16uart1_rxdmmc1_sdwpdcan1_txI2C1_SDA  gpio0[14]
27C13mcasp0_fsreQEP0B_inmcasp0_axr3mcasp1_fsxEMU2_mux2 gpio3[19]
28C12mcasp0_ahclkrehrpwm0_syncimcasp0_axr2spi1_cs0eCAP2_in_PWM2_out gpio3[17]
29B13mcasp0_fsxehrpwm0B spi1_d0mmc1_sdcd_mux1 gpio3[15]
30D12mcasp0_axr0ehrpwm0_tripzone spi1_d1mmc2_sdcd_mux1 gpio3[16]
31A13mcasp0_aclkxehrpwm0A spi1_sclkmmc0_sdcd_mux1 gpio3[14]
32 VADC
33C8AIN4
34 AGND
35A8AIN6
36B8AIN5
37B7AIN2
38A7AIN3
39B6AIN0
40C7AIN1
41#D14xdma_event_intr1 tclkinclkout2timer7_mux1EMU3_mux0gpio0[20]
D13mcasp0_axr1eQEP0_index Mcasp1_axr0emu3 gpio3[20]
42@C18eCAP0_in_PWM0_outuart3_txdspi1_cs1pr1_ecap0_ecap
_capin_apwm_o
spi1_sclkxdma_event_intr2gpio0[7]
B12Mcasp0_aclkreQEP0A_inMcaspo_axr2Mcasp1_aclkx  gpio3[18]

Selecting Modes

Using the "everything is a file" sys directory, you can use BASH or whatever to change the mode number for the pin in the NAME column.

echo 7 > /sys/kernel/debug/omap_mux/gpmc_ad4
echo 36 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio32/direction
echo 1 > /sys/class/gpio/gpio32/value

If you are using windows, TI has this GUI you can use called PinMuxTool / Pin Mux Utility. The BBB is AM335x r2 based.

The above only works if you're using the older kernel. The new 3.8 based kernel is missing this nifty pin mux feature. However, you can still check what they're muxed at even if you can't change them easily at runtime by looking at

/sys/kernel/debug/pinctrl/44e10800.pinmux/pingroups
root@arm:/sys/kernel/debug/pinctrl/44e10800.pinmux# cat pingroups 
registered pin groups:
group: pinmux_userled_pins
pin 21 (44e10854)
pin 22 (44e10858)
pin 23 (44e1085c)
pin 24 (44e10860)

group: pinmux_rstctl_pins
pin 20 (44e10850)

group: pinmux_i2c0_pins
pin 98 (44e10988)
pin 99 (44e1098c)

group: pinmux_i2c2_pins
pin 94 (44e10978)
pin 95 (44e1097c)

group: pinmux_emmc2_pins
pin 32 (44e10880)
pin 33 (44e10884)
pin 0 (44e10800)
pin 1 (44e10804)
pin 2 (44e10808)
pin 3 (44e1080c)
pin 4 (44e10810)
pin 5 (44e10814)
pin 6 (44e10818)
pin 7 (44e1081c)

group: pinmux_userled_pins
pin 21 (44e10854)
pin 22 (44e10858)
pin 23 (44e1085c)
pin 24 (44e10860)

group: mcasp0_pins
pin 107 (44e109ac)
pin 103 (44e1099c)
pin 101 (44e10994)
pin 100 (44e10990)
pin 106 (44e109a8)

group: nxp_hdmi_bonelt_pins
pin 108 (44e109b0)
pin 40 (44e108a0)
pin 41 (44e108a4)
pin 42 (44e108a8)
pin 43 (44e108ac)
pin 44 (44e108b0)
pin 45 (44e108b4)
pin 46 (44e108b8)
pin 47 (44e108bc)
pin 48 (44e108c0)
pin 49 (44e108c4)
pin 50 (44e108c8)
pin 51 (44e108cc)
pin 52 (44e108d0)
pin 53 (44e108d4)
pin 54 (44e108d8)
pin 55 (44e108dc)
pin 56 (44e108e0)
pin 57 (44e108e4)
pin 58 (44e108e8)
pin 59 (44e108ec)

group: nxp_hdmi_bonelt_off_pins
pin 108 (44e109b0)

Check Pin Statuses

root@beaglebone:~# cat /sys/kernel/debug/gpio
GPIOs 0-31, gpio:

GPIOs 32-63, gpio:
 gpio-52  (eMMC_RSTn           ) out lo
 gpio-53  (beaglebone:green:usr) out lo
 gpio-54  (beaglebone:green:usr) out lo
 gpio-55  (beaglebone:green:usr) out hi
 gpio-56  (beaglebone:green:usr) out lo
 gpio-59  (McASP Clock Enable P) out hi

GPIOs 64-95, gpio:

GPIOs 96-127, gpio:

Power Limitations

Be careful about this one, there are some much lower limits than you might be used to

Pin TypeMaximum VoltageMaximum Current
AIN1.8V 
GPIO3.3V4mA - 6mA
VDD 3.33.3V250mA
VDD 5V5V*1000mA *
SYS 5V5V250mA
VDD ADC1.8V0?
SYS 5V5V250mA

* VDD only works when the 5V barrel jack is used

i2c

It is recommended that you use I2C2 on pins 19 and 20 with the /dev/i2c-3 device.

Mode NamePortPhysical Pin NumberBlock Device
I2C1P917 & 18 or 24 & 26?
I2C2P919 & 20 or 21 & 22/dev/i2c-3

To check which i2c interfaces are avaible, check

root@arm:~# ls -l /dev/i2c*
crw-rw---- 1 root i2c 89, 0 Jun  5 04:34 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 Jun  5 04:34 /dev/i2c-1

To see what addresses are being used, try the i2cdetect command. In the below example, I have a temperature sensor hooked up to pins 19 and 20 that is using 48. Also note that the UU addresses are being used by the system and are unavailable.

root@beaglebone:~# i2cdetect -y -r 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 
50: -- -- -- -- UU UU UU UU -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --
Attachments