Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ===== BeagleBone Black ===== ===== Introduction ===== The [[https://beagleboard.org/black|BeagleBone Black]] is an updated version of the [[arm/BeagleBone|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: * It only costs about US$45 (instead of US$89 for the original model) * It has both a micro-SD slot and 2GB (%%RevB%%) or 4GB (%%RevC%%) built-in eMMC (which appears as a second drive); it can boot from either one. The shipping product includes a complete Linux system pre-installed on the eMMC. * It has 512MB DRAM (instead of 256MB for the original model) * It has HDMI output (including support for audio over HDMI) * //It lacks built-in serial-over-USB;// instead, the serial console is exposed on a 6-pin header (which uses 3.3V RS232 signaling). * The expansion interfaces are essentially the same as the older white %%BeagleBone%%, so most expansion capes for the older board should still work. The University of Cambridge teaches its //L41: Advanced Operating Systems// masters-level OS course based on %%BeagleBone%% Black and %%FreeBSD%%: * [[https://www.cl.cam.ac.uk/teaching/1516/L41/|Cambridge ACS L41 2015-2016]] * [[https://www.cl.cam.ac.uk/teaching/1415/L41/|Cambridge ACS L41 2014-2015]] The [[https://beagleboard.org/green|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 ===== * ADC * eMMC * ethernet * GPIO * i2c * SPI * LCD * PWM * SD card * USB 2.0 * HDMI output / framebuffer * watchdog ===== What still needs to be done ===== * Audio (AD1938) ===== 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: - **Connect** a serial/uart cable (3.3v), see: [[USB/Peripherals/Serial]] - **Insert** the Micro-SD card. - **Hold** the Boot switch (on the top of the board near the Micro-SD slot) - **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. <callout type="warning"> **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. </callout> 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: <code> gpart unset -a active -i 1 mmcsd1 </code> To restore the board to booting from the eMMC do: <code> gpart set -a active -i 1 mmcsd1 </code> ===== 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:** <del>No HDMI output</del>. <del>There is no driver for the HDMI framer ATM. You will need a Serial cable to boot this board.</del> Fixed in r284534. **Problem:** <del>No eMMC device or unstable operation of eMMC</del>. Fixed in r275950. **Problem:** <del>Panic at boot</del>. <del>Sometimes, a problem reading from the ethernet PHY leads to the following panic:</del> 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 [[https://www.adafruit.com/product/814|vendors]] sell a convenient, and small, 802.11 connector that supports up to 802.11N. The proper driver is the urtwn(4) and this {{arm/beagleboneblack/bbb-wifi?linkonly|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%% [[ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/arm/armv7/ISO-IMAGES/|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 ===== [[http://phk.freebsd.dk/hacks/bbb_projector/|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: /dts-v1/; /plugin/; &{/} { compatible = "ti,am335x-bone-black", "ti,am335x-bone", "ti,am33xx"; onewire0 { compatible = "w1-gpio"; gpios = <0x59 30 0x16>; }; %%//%% P9::11 onewire1 { compatible = "w1-gpio"; gpios = <0x59 31 0x16>; }; %%//%% P9::13 onewire2 { compatible = "w1-gpio"; gpios = <0xb4 0 0x16>; }; %%//%% P9::15 onewire3 { compatible = "w1-gpio"; gpios = <0x59 3 0x16>; }; %%//%% P9::21 }; 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: fdt_overlays="something.dtbo" owc_load=yes ow_load=yes ow_temp_load=yes You should now be able to see the temperatures with: sysctl dev.ow_temp If it does not work after boot, try: kldunload owc kldload owc (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: gpios = <0x59 3 0x16>; The 0x59 identifies the GPIO controller. I found this by: dtc -I dtb -O dts /boot/dtb/am335x-boneblack.dtb | less 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.txt Last modified: 2022/06/09 01:11by KubilayKocak