BeagleBone Black

Tested 2024-04-02: 13.3-R boots, 14.X and 15.X do not. /phk

Introduction

The BeagleBone Black is an updated version of the BeagleBone board. It first shipped in April 2013.

It uses the same SoC as the earlier board and is largely compatible but does have significant changes:

The University of Cambridge teaches its L41: Advanced Operating Systems masters-level OS course based on BeagleBone Black and FreeBSD:

The BeagleBone Green is a cost-reduced version of the BeagleBone Black. It lacks the HDMI/audio hardware, but in all other ways is pretty much identical. The FreeBSD BeagleBone Black images run perfectly on the Green.

What works

What still needs to be done

How to Boot the BeagleBone Black From Micro-SD

The BeagleBone Black can boot from either the built-in eMMC or a micro-SD card.

To boot from Micro-SD:

  1. Connect a serial/uart cable (3.3v), see: USB/Peripherals/Serial

  2. Insert the Micro-SD card.

  3. Hold the Boot switch (on the top of the board near the Micro-SD slot)

  4. Connect power, either via a 5v adapter or through a mini-USB cable.

Once the power is connected, you can release the switch; the switch state is recorded by the power chip when power is first applied and will be kept until power is removed.

Unrecognized filesystem type

If you see the message "Failed to mount ext2 filesystem... Unrecognized filesystem type" when booting from SD, then you weren't holding the Boot Switch when you applied power. Remove power, hold the switch, and re-apply power.

Of course, to boot from eMMC, apply power without holding the boot switch and without anything in the SD slot.

Making a Beaglebone Black always boot from the Micro-SD

Using the "hold down the button" method described above, the board will boot and reboot from the Micro-SD until power is removed. After the next power cycle it will return to booting from the eMMC. The ROM code in the AM335x chip actually boots from the first FAT partition it finds that has the active flag set. It looks first on the eMMC, then on the Micro-SD. To make the board always boot from the Micro-SD slot instead of the onboard eMMC, first boot FreeBSD by holding down the boot button as described above. After booting, log on as root and turn off the active/bootable flag on the eMMC FAT partition:

gpart unset -a active -i 1 mmcsd1

To restore the board to booting from the eMMC do:

gpart set -a active -i 1 mmcsd1

How to install FreeBSD on the eMMC

The same image that you copy onto the SD card can be copied to the eMMC. Once you have done that, no need to press the button or change settings to boot FreeBSD.

Known Issues

Problem: No HDMI output.

There is no driver for the HDMI framer ATM. You will need a Serial cable to boot this board.

Fixed in r284534.

Problem: No eMMC device or unstable operation of eMMC.

Fixed in r275950.

Problem: Panic at boot.

Sometimes, a problem reading from the ethernet PHY leads to the following panic:

Fixed in r273606.

Problem: Serial console dies upon reboot.

I've seen this happen a few times using the Adafruit cable. I'm not exactly sure what causes it. But I can reliably solve it by leaving the serial cable attached, then removing and re-applying power (remember to hold the boot switch if you're booting from SD).

Using WiFi

Various vendors sell a convenient, and small, 802.11 connector that supports up to 802.11N. The proper driver is the urtwn(4) and this BBB-WiFi kernel config has been modified to include proper support for both Wifi and the device driver.

GPIO

Default settings for P8 and P9 expansion headers (LCD/HDMI pins are missing).

P9

BeagleBoneBlack

P8

DGND

1

2

DGND

DGND

1

2

DGND

VDD_3V3

3

4

VDD_3V3

MMC1_DAT6 (GPIO_38)

3

4

MMC1_DAT7 (GPIO_39)

VDD_5V

5

6

VDD_5V

MMC1_DAT2 (GPIO_34)

5

6

MMC1_DAT3 (GPIO_35)

SYS_5V

7

8

SYS_5V

GPIO_66

7

8

GPIO_67

PWR_BTN

9

10

SYS_RESET

GPIO_69

9

10

GPIO_68

GPIO0_30

11

12

GPIO1_28

GPIO_45

11

12

GPIO_44

GPIO0_31

13

14

PWM1A (GPIO1_8)

PWM2B (GPIO0_23)

13

14

GPIO_26

GPIO1_16

15

16

PWM1B (GPIO1_19)

GPIO_47

15

16

GPIO_46

I2C1_SCL (GPIO0_4)

17

18

I2C1_SDA (GPIO0_5)

GPIO0_27

17

18

GPIO_65

I2C2_SCL (GPIO0_13)

19

20

I2C2_SDA (GPIO0_12)

PWM2A (GPIO0_22)

19

20

MMC1_CMD (GPIO_63)

GPIO0_3

21

22

GPIO0_2

MMC1_CLK (GPIO_62)

21

22

MMC1_DAT5 (GPIO_37)

GPIO1_17

23

24

GPIO0_15

MMC1_DAT4 (GPIO_36)

23

24

MMC1_DAT1 (GPIO_33)

GPIO3_21

25

26

GPIO0_14

MMC1_DAT0 (GPIO_32)

25

26

GPIO_61

GPIO3_19

27

28

SPI1_CS0 (GPIO3_17)

GPIO_86

27

28

GPIO_88

SPI1_MISO (GPIO3_15)

29

30

SPI1_MOSI (GPIO3_16)

GPIO_87

29

30

GPIO_89

SPI1_CLK (GPIO3_14)

31

32

VDD_ADC (1.8V)

GPIO0_10

31

32

GPIO0_11

AIN4

33

34

GNDA_ADC

GPIO0_9

33

34

GPIO_81

AIN6

35

36

AIN5

GPIO0_8

35

36

GPIO_80

AIN2

37

38

AIN3

GPIO_78

37

38

GPIO_79

AIN0

39

40

AIN1

GPIO_76

39

40

GPIO_77

GPIO0_20

41

42

SPI1_CS1 (GPIO0_7)

GPIO_74

41

42

GPIO_75

DGND

43

44

DGND

GPIO_72

43

44

GPIO_73

DGND

45

46

DGND

GPIO_70

45

46

GPIO_71

Binary snapshots

BeagleBoneBlack snapshots are available for at least a couple of release branches, but some of the functionality documented on this page is only available in -CURRENT.

Attaching Weird stuff

Texas Instruments DLPDLCR2000EVM tiny projector board

Using one-wire temperature sensors

To use the ow/owc/ow_temp(4) drivers, the GPIO pins must be configured using a device tree overlay.

Copy the following into a file named something.dtso in /usr/src/sys/dts/arm/overlays:

Run make in that directory, that will compile it to a /tmp/something.dtbo file, which should be placed under /boot/dtb on the SD card.

Add to /boot/loader.conf:

You should now be able to see the temperatures with:

If it does not work after boot, try:

(This can also be used to reprobe the one-wire busses, if you cange the sensor configuration).

I dont know what the 'offical' way to find the magic numbers for the dtso file is, here is what I did:

The 0x59 identifies the GPIO controller. I found this by:

And then looking for "P9_21". On the line below you will find "phandle = <0x59>;"

The 3 is which pin on the GPIO controller, start counting from zero on the "gpio-line-names" line.

0x16 is the mode of the pin, these can be found in src/sys/contrib/device-tree/include/dt-bindings/gpio/gpio.h.

For one-wire use you need GPIO_OPEN_DRAIN. I added GPIO_PULL_UP because that seems to give more sane results if nothing is connected. (You still need an external pull-up resistor, the internal one is not strong enough)

20210203/phk

arm/BeagleBoneBlack (last edited 2024-04-02T13:39:38+0000 by PoulHenningKamp)