Beagleboard:BeagleBone cape interface spec

From eLinux.org
Revision as of 06:56, 19 August 2020 by Lorforlinux (talk | contribs) (PWM)
Jump to: navigation, search

This is a list of symlink interfaces based on BeagleBone Cape header pins.[1][2][3]

LEDs

Bone LED pin uses gpio-leds driver and allows users to easily create compatible led nodes in overlays for BBBWL, BBB, and BBAI. For the definitions, you can see bbai-bone-buses.dtsi#L16 & bbb-bone-buses.dtsi#L16.

Bone LEDs
LED Header pin BBBWL/BBB BBAI
/sys/class/leds/led_P8_03 P8_03 gpio1_6 gpio1_24
/sys/class/leds/led_P8_04 P8_04 gpio1_7 gpio1_25
/sys/class/leds/led_P8_05 P8_05 gpio1_2 gpio7_1
/sys/class/leds/led_P8_06 P8_06 gpio1_3 gpio7_2
/sys/class/leds/led_P8_07 P8_07 gpio2_2 gpio6_5
/sys/class/leds/led_P8_08 P8_08 gpio2_3 gpio6_6
/sys/class/leds/led_P8_09 P8_09 gpio2_5 gpio6_18
/sys/class/leds/led_P8_10 P8_10 gpio2_4 gpio6_4
/sys/class/leds/led_P8_11 P8_11 gpio1_13 gpio3_11
/sys/class/leds/led_P8_12 P8_12 gpio1_12 gpio3_10
/sys/class/leds/led_P8_13 P8_13 gpio0_23 gpio4_11
/sys/class/leds/led_P8_14 P8_14 gpio0_26 gpio4_13
/sys/class/leds/led_P8_15 P8_15 gpio1_15 gpio4_3
/sys/class/leds/led_P8_16 P8_16 gpio1_14 gpio4_29
/sys/class/leds/led_P8_17 P8_17 gpio0_27 gpio8_18
/sys/class/leds/led_P8_18 P8_18 gpio2_1 gpio4_9
/sys/class/leds/led_P8_19 P8_19 gpio0_22 gpio4_10
/sys/class/leds/led_P8_20 P8_20 gpio1_31 gpio6_30
/sys/class/leds/led_P8_21 P8_21 gpio1_30 gpio6_29
/sys/class/leds/led_P8_22 P8_22 gpio1_5 gpio1_23
/sys/class/leds/led_P8_23 P8_23 gpio1_4 gpio1_22
/sys/class/leds/led_P8_24 P8_24 gpio1_1 gpio7_0
/sys/class/leds/led_P8_25 P8_25 gpio1_0 gpio6_31
/sys/class/leds/led_P8_26 P8_26 gpio1_29 gpio4_28
/sys/class/leds/led_P8_27 P8_27 gpio2_22 gpio4_23
/sys/class/leds/led_P8_28 P8_28 gpio2_24 gpio4_19
/sys/class/leds/led_P8_29 P8_29 gpio2_23 gpio4_22
/sys/class/leds/led_P8_30 P8_30 gpio2_25 gpio4_20
/sys/class/leds/led_P8_31 P8_31 gpio0_10 gpio8_14
/sys/class/leds/led_P8_32 P8_32 gpio0_11 gpio8_15
/sys/class/leds/led_P8_33 P8_33 gpio0_9 gpio8_13
/sys/class/leds/led_P8_34 P8_34 gpio2_17 gpio8_11
/sys/class/leds/led_P8_35 P8_35 gpio0_8 gpio8_12
/sys/class/leds/led_P8_36 P8_36 gpio2_16 gpio8_10
/sys/class/leds/led_P8_37 P8_37 gpio2_14 gpio8_8
/sys/class/leds/led_P8_38 P8_38 gpio2_15 gpio8_9
/sys/class/leds/led_P8_39 P8_39 gpio2_12 gpio8_6
/sys/class/leds/led_P8_40 P8_40 gpio2_13 gpio8_7
/sys/class/leds/led_P8_41 P8_41 gpio2_10 gpio8_4
/sys/class/leds/led_P8_42 P8_42 gpio2_11 gpio8_5
/sys/class/leds/led_P8_43 P8_43 gpio2_8 gpio8_2
/sys/class/leds/led_P8_44 P8_44 gpio2_9 gpio8_3
/sys/class/leds/led_P8_45 P8_45 gpio2_6 gpio8_0
/sys/class/leds/led_P8_46 P8_46 gpio2_7 gpio8_1
/sys/class/leds/led_P9_11 P9_11 gpio0_30 gpio8_17
/sys/class/leds/led_P9_12 P9_12 gpio1_28 gpio5_0
/sys/class/leds/led_P9_13 P9_13 gpio0_31 gpio6_12
/sys/class/leds/led_P9_14 P9_14 gpio1_18 gpio4_25
/sys/class/leds/led_P9_15 P9_15 gpio1_16 gpio3_12
/sys/class/leds/led_P9_16 P9_16 gpio1_19 gpio4_26
/sys/class/leds/led_P9_17 P9_17 gpio0_5 gpio7_17
/sys/class/leds/led_P9_18 P9_18 gpio0_4 gpio7_16
/sys/class/leds/led_P9_19 P9_19 gpio0_13 gpio7_3
/sys/class/leds/led_P9_20 P9_20 gpio0_12 gpio7_4
/sys/class/leds/led_P9_21 P9_21 gpio0_3 gpio3_3
/sys/class/leds/led_P9_22 P9_22 gpio0_2 gpio6_19
/sys/class/leds/led_P9_23 P9_23 gpio1_17 gpio7_11
/sys/class/leds/led_P9_24 P9_24 gpio0_15 gpio6_15
/sys/class/leds/led_P9_25 P9_25 gpio3_21 gpio6_17
/sys/class/leds/led_P9_26 P9_26 gpio0_14 gpio6_14
/sys/class/leds/led_P9_27 P9_27 gpio3_19 gpio4_15
/sys/class/leds/led_P9_28 P9_28 gpio3_17 gpio4_17
/sys/class/leds/led_P9_29 P9_29 gpio3_15 gpio5_11
/sys/class/leds/led_P9_30 P9_30 gpio3_16 gpio5_12
/sys/class/leds/led_P9_31 P9_31 gpio3_14 gpio5_10
/sys/class/leds/led_P9_41 P9_41 gpio0_20 gpio6_20
/sys/class/leds/led_P9_91 P9_91 gpio3_20
/sys/class/leds/led_P9_42 P9_42 gpio0_7 gpio4_18
/sys/class/leds/led_P9_92 P9_92 gpio3_18
/sys/class/leds/led_A15 A15 gpio0_19

I2C

I2C bone bus nodes allow creating compatible overlays for BBBWl, BBB, & BBAI. For the definitions, you can see bbai-bone-buses.dtsi#L388 & bbb-bone-buses.dtsi#L403.

Bone bus I2C
Bone bus BBBWL/BBB BBAI SCL SDA Overlay
/dev/bone/i2c/0 I2C0 I2C1 ❌ (On-board)
/dev/bone/i2c/1 I2C1 I2C5 P9.17 P9.18 BONE-I2C1.dts
/dev/bone/i2c/2 I2C2 I2C4 P9.19 P9.20 BONE-I2C2.dts
/dev/bone/i2c/2a I2C2 N/A P9.21 P9.22 BONE-I2C2A.dts
/dev/bone/i2c/3 I2C1 I2C3 P9.24 P9.26 BONE-I2C3.dts



SPI

SPI bone bus nodes allow creating compatible overlays for BBBWl, BBB, & BBAI. For the definitions, you can see bbai-bone-buses.dtsi#L406 & bbb-bone-buses.dtsi#L423.

Bone bus SPI
Bone bus BBBWL/BBB BBAI MOSI MISO CLK CS Overlay
/dev/bone/spi/0.x SPI0 SPI2 P9.18 P9.21 P9.22 P9.17 (CS0) BONE-SPI0_0.dts
/dev/bone/spi/1.x SPI1 SPI3 P9.30 P9.29 P9.31
  • P9.28 (CS0)
  • P9.42 (CS1)



UART

UART bone bus nodes allow creating compatible overlays for BBBWl, BBB, & BBAI. For the definitions, you can see bbai-bone-buses.dtsi#L367 & bbb-bone-buses.dtsi#L382.

Bone bus UART
Bone bus BBBWL/BBB BBAI TX RX RTSn CTSn Overlays
/dev/bone/uart/0 UART0 UART1 ❌ (console debug header pins)
/dev/bone/uart/1 UART1 UART10 P9.24 P9.26
  • P9.19
  • P8.4 (N/A on AM3358)
  • P9.20
  • P8.3 (N/A on AM3358)
BONE-UART1.dts
/dev/bone/uart/2 UART2 UART3 P9.21 P9.22
  • P8.38 (N/A on AM5729)
  • P8.37 (N/A on AM5729)
BONE-UART2.dts
/dev/bone/uart/3 UART3 P9.42 BONE-UART3.dts
/dev/bone/uart/4 UART4 UART5 P9.13 P9.11
  • P8.33 (N/A on AM5729)
  • P8.6 (N/A on AM3358)
  • P8.35 (N/A on AM5729)
  • P8.5 (N/A on AM3358)
BONE-UART4.dts
/dev/bone/uart/5 UART5 UART8 P8.37 P8.38 P8.32 P8.31 BONE-UART5.dts


CAN

CAN bone bus nodes allow creating compatible overlays for BBBWl, BBB, & BBAI. For the definitions, you can see bbai-bone-buses.dtsi#L440 & bbb-bone-buses.dtsi#L457.

Bone bus CAN
BBBWL/BBB BBAI TX RX Overlays
CAN0 P9.20 P9.19 BONE-CAN0.dts
CAN1 CAN2 P9.26 P9.24 BONE-CAN1.dts
CAN1 (rev A2 and later) P8.8 P8.7 TODO


ADC

Work needs to be done to create these symlinks as well as handle major differences in the driver used for the ADC. Maybe just have the "okay" in here and more in the base tree?

/dev/bone/adc/n

https://github.com/beagleboard/bb.org-overlays/blob/master/src/arm/BB-ADC-00A0.dts

  • 0 - AM3358 in_voltage0_raw, AM5729 in_voltage0_raw
  • 1 - AM3358 in_voltage1_raw, AM5729 in_voltage1_raw
  • 2 - AM3358 in_voltage2_raw, AM5729 in_voltage3_raw
  • 3 - AM3358 in_voltage3_raw, AM5729 in_voltage2_raw
  • 4 - AM3358 in_voltage4_raw, AM5729 in_voltage7_raw
  • 5 - AM3358 in_voltage5_raw, AM5729 in_voltage6_raw
  • 6 - AM3358 in_voltage6_raw, AM5729 in_voltage4_raw

PWM

PWM bone bus nodes allow creating compatible overlays for BBBWl, BBB, & BBAI. For the definitions, you can see bbai-bone-buses.dtsi#L415 & bbb-bone-buses.dtsi#L432

Bone bus PWM
Bone bus BBBWL/BBB BBAI A B Overlay
/dev/bone/pwm/0 PWM0 P9.22 P9.21 BONE-PWM0.dts
/dev/bone/pwm/1 PWM1 PWM3 P9.14 P9.16 BONE-PWM1.dts
/dev/bone/pwm/2 PWM2 PWM2 P8.19 P8.13 BONE-PWM2.dts

TIMER PWM

TIMER PWM bone bus uses ti,omap-dmtimer-pwm driver, and timer nodes that allow creating compatible overlays for BBBWl, BBB, & BBAI. For the timer node definitions, you can see bbai-bone-buses.dtsi#L449 & bbb-bone-buses.dtsi#L466.

Bone TIMER PWMs
Bone bus Header pin BBBWL/BBB BBAI overlay
/sys/bus/platform/devices/bone_timer_pwm_0/ P8.10 timer6 timer10 BONE-TIMER_PWM_0.dts
/sys/bus/platform/devices/bone_timer_pwm_1/ P8.07 timer4 timer11 BONE-TIMER_PWM_1.dts
/sys/bus/platform/devices/bone_timer_pwm_2/ P8.08 timer7 timer12 BONE-TIMER_PWM_2.dts
/sys/bus/platform/devices/bone_timer_pwm_3/ P9.21 timer13 BONE-TIMER_PWM_3.dts
/sys/bus/platform/devices/bone_timer_pwm_4/ P8.09 timer5 timer14 BONE-TIMER_PWM_4.dts
/sys/bus/platform/devices/bone_timer_pwm_5/ P9.22 timer15 BONE-TIMER_PWM_5.dts

ECAP

/dev/bone/ecap/1

TODO
AM3358 N/A
AM5729 eCAP1_in_PWM1_out

  • P8.15

/dev/bone/ecap/2

TODO
AM3358 N/A
AM5729 eCAP2_in_PWM2_out

  • P8.14

/dev/bone/ecap/3

TODO
AM3358 N/A
AM5729 eCAP3_in_PWM3_out

  • P8.04

MMC

/dev/bone/mmc/2

TODO: need overlay. Note: On Black, this is used by the on-board eMMC. On AI, these pins are available.
AM3358 MMC2
AM5729 MMC3

  • P8.21 - CLK
  • P8.20 - CMD
  • P8.25 - DAT0
  • P8.24 - DAT1
  • P8.5 - DAT2
  • P8.6 - DAT3
  • P8.23 - DAT4
  • P8.22 - DAT5
  • P8.4 - DAT7
  • P8.3 - DAT6

LCD

TODO

eQEP

/dev/bone/eqep/0

https://github.com/beagleboard/bb.org-overlays/blob/master/src/arm/bone_eqep0-00A0.dts
AM3358 eQEP0
AM5729 eQEP3

  • P9.42 - A
  • P9.27 - B
  • P9.25 - STROBE (N/A on AI)
  • P9.41 - INDEX (N/A on AI)
  • P8.6 - STROBE (N/A on AM3358)
  • P8.5 - INDEX (N/A on AM3358)

/dev/bone/eqep/1

https://github.com/beagleboard/bb.org-overlays/blob/master/src/arm/bone_eqep1-00A0.dts
AM3358 eQEP1
AM5729 eQEP1

  • P8.34 - A
  • P8.36 - B
  • P9.21 - STROBE (N/A on AM3358)

/dev/bone/eqep/2

https://github.com/beagleboard/bb.org-overlays/blob/master/src/arm/bone_eqep2b-00A0.dts
AM3358 eQEP2
AM5729 eQEP2

  • P8.12 - A
  • P8.11 - B
  • P8.15 - STROBE on AM3358 only
  • P8.18 - STROBE on AM5729 only
  • P8.16 - INDEX on AM3358 only
  • P9.15 - INDEX on AM5729 only

/dev/bone/eqep/2a

https://github.com/beagleboard/bb.org-overlays/blob/master/src/arm/bone_eqep2-00A0.dts
AM3358 eQEP2
AM5729 N/A'

  • P8.41 - A
  • P8.42 - B
  • P8.40 - STROBE
  • P8.39 - INDEX

McASP

TODO

PRU

The overlay situation for PRUs is a bit more complex than with other peripherals. The mechanism for loading, starting and stopping the PRUs can go through either UIO or RemoteProc.[4]

/dev/bone/pru/0.0 (eCAP)

Not sure where to put this as it doesn't really have it's own Linux control interface, just an overlay.
TODO: provide overlay, since it is a different pinctrl mode.
AM3358 PRUSS
AM5729 PRUSS1

  • P8.15

/dev/bone/pru/0.0

TODO
AM3358 PRU0
AM5729 PRUSS1, PRU0

PIN AM3358 AM5729
P8.11 out 15 I/O 4
P8.12 out 14 I/O 3
P8.15 in 15 see pru/0.1
P8.16 in 14 see pru/0.1
P8.17 - I/O 15
P9.15 - I/O 5
P9.24 in 16 -
P9.25 I/O 7 see pru/1.1
P9.26 see pru0.1 I/O 17
P9.27 I/O 5 see pru/0.1
P9.28 I/O 3 see pru/1.1
P9.29 I/O 1 see pru/1.1
P9.30 I/O 2 see pru/1.1
P9.31 I/O 0 see pru/1.1
P9.41 I/O 6 see pru/0.1
P9.42 I/O 4 see pru/1.1 or pru/2.0
USR0 - I/O 10
USR2 - I/O 8
USR3 - I/O 7
USR4 - I/O 0

/dev/bone/pru/0.1

TODO
AM3358 PRU1
AM5279 PRUSS1, PRU1

PIN AM3358 AM5729
P8.13 - I/O 7
P8.14 - I/O 9
P8.15 - I/O 16
P8.16 - I/O 18

/dev/bone/pru/1.0

TODO
AM3358 N/A
AM5729 PRUSS2, PRU0

  • P8.3 - I/O 10 (N/A on AM3358)
  • P8.4 - I/O 11 (N/A on AM3358)
  • P8.5 - I/O 5 (N/A on AM3358)
  • P8.6 - I/O 7 (N/A on AM3358)
  • P8.8 - I/O 20 (N/A on AM3358)

/dev/bone/pru/1.1

TODO
AM3358 N/A
AM5729 PRUSS2, PRU1

  • P8.7 - I/O 16 (N/A on AM3358)
  • P8.9 - I/O 6 (N/A on AM3358)
  • P8.10 - I/O 15 (N/A on AM3358)

GPIO

TODO
For each of the pins with a GPIO, there should be a symlink that comes from the names

Methodology

The methodology for applied in the kernel and software images to expose the software interfaces is to be documented here. The most fundamental elements are the device tree entries, including overlays, and udev rules.

Device Trees

udev rules [5]

10-of-symlink.rules[6]

#From: https://github.com/mvduin/py-uio/blob/master/etc/udev/rules.d/10-of-symlink.rules
# allow declaring a symlink for a device in DT
ATTR{device/of_node/symlink}!="", \
	ENV{OF_SYMLINK}="%s{device/of_node/symlink}"

ENV{OF_SYMLINK}!="", ENV{DEVNAME}!="", \
	SYMLINK+="%E{OF_SYMLINK}", \
	TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/dev/%E{OF_SYMLINK}"

TBD

#Also courtesy of mvduin
# create symlinks for gpios exported to sysfs by DT
SUBSYSTEM=="gpio", ACTION=="add", TEST=="value", ATTR{label}!="sysfs", \
        RUN+="/bin/mkdir -p /dev/bone/gpio", \
        RUN+="/bin/ln -sT '/sys/class/gpio/%k' /dev/bone/gpio/%s{label}"

Verification

TODO: The steps used to verify all of these configurations is to be documented here. It will serve to document what has been tested, how to reproduce the configurations, and how to verify each major triannual release. All faults will be documented in the issue tracker.

References