I am trying to get UART 4 on the BBAI to show up as a /dev/ttyO4 object through device tree overlays. I have so far not been able to get this working.
This is what I have done so far:
- Flash an SD card with the latest Debian TIDL image
- Plug in the SD card and boot the board (without touching the power button)
- I then ran several commands to update the board.
a. sudo apt update
b. sudo apt upgrade –y
c. sudo apt install dosfstools initramfs-tools rsync u-boot-tools
d. sudo apt install bb-u-boot-am57xx-evm
I found somewhere on this forum that the stock linux kernel 4.14 is not new enough for device tree overlays.
I then upgraded the BBAI linux kernel using these steps: - cd /opt/scripts
- sudo tools/update_kernel.sh –lts-4_19-kernel
- sudo reboot now
I then started work on getting an overlay working.
This is what I did to create my BBAI_UART4.dtbo - I copied the dts file from here:
a. /opt/source/bb.org-overlays/src/arm/BB-UART4-00A0.dts - I then modified the file to look like this:
a.
/*
* Copyright (C) 2013 CircuitCo
*
* Comes from here:
* /opt/source/bb.org-overlays/src/arm/BB-UART4-00A0.dts
*
* Compile like this on the BBAI:
* dtc -O dtb -o BBAI_UART4_00A0.dtbo -b 0 -@ BBAI_UART4_00A0.dts
*
* Virtual cape for UART4 on connector pins P9.13 P9.11
* BBAI has UART 4 on pins P8.31 for RX and P8.32 for TX
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/dts-v1/;
/plugin/;
/ {
/* compatible = "ti,beaglebone", "ti,beaglebone-ai"; */
compatible = "beagleboard.org,am5729-beagleboneai", "ti,am5728", "ti,dra742", "ti,dra74", "ti,dra7";
/* identification - matches the name of this dts file. */
part-number = "BBAI_UART4";
version = "00A0";
/* state the resources this cape uses */
exclusive-use =
/* the pin header uses */
"P8.32", /* uart4_txd */
"P8.31", /* uart4_rxd */
/* the hardware ip uses */
"uart4";
fragment@0 {
target = <&am57xx_pinmux>;
__overlay__ {
bb_uart4_pins: pinmux_bb_uart4_pins {
pinctrl-single,pins = <
0x173C 0x04 /* gpmc_wait0.uart4_rxd was (0x070) -> now (0x173C) | MODE6 (0x26) -> now mode 4 (0x04) */
0x1740 0x04 /* gpmc_wpn.uart4_txd was (0x074) -> now (0x1740) | MODE6 (0x06) -> now mode 4 (0x04) */
>;
};
};
};
fragment@1 {
target = <&uart5>; /* really uart4 */
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&bb_uart4_pins>;
};
};
};
- I then compiled this file with this command:
a. dtc -W no-unit_address_vs_reg -O dtb -o BBAI_UART4.dtbo -b 0 -@ BBAI_UART4.dts - I then copied this file over to /lib/firmware
- I then edited the uEnv.txt file under /boot by adding these 2 lines at the bottom:
a. enable_uboot_overlays=1
b. dtb_overlay=/lib/firmware/BBAI_UART4.dtbo - I then rebooted the BBAi
After these steps, I still did not see a device like /dev/ttyO4.
I then tried editing the device tree itself. These are the steps I followed: - cd
- cp /boot/dtbs/4.19.94-ti-r73/am5729-beagleboneai.dtb .
- dtbs am5729-beagleboneai.dtb > am5729-beagleboneai-custom.dts
- Using nano, edit the section where serial@48066000 {} contains “uart5” (it maps to uart4)
a. The line “ status = “disabled”;” needs to become “status = “okay”;” - After that change, create a new device tree binary with:
a. dtc -O dtb -o am5729-beagleboneai.dtb am5729-beagleboneai-custom.dts - Overwrite the old device tree file with this command:
- sudo mv am5729-beagleboneai.dtb /boot/dtbs/4.19.94-ti-r73/am5729-beagleboneai.dtb
- sudo reboot now
After running these steps, the file /dev/ttyO4 shows up. The problem is that the pins are not correctly configured as can be seen with the show-pins.pl script under /opt/scripts/device/bone
This is the output of looking for Uart4:
./show-pins.pl | grep “P8.31”
P8.31a 133 C8 e fast rx down gpio8_14 ocp@44000000/P8_31_pinmux (pinmux_P8_31_default_pin)
P8.31b 207 G16 f fast Driver off ocp@44000000/P8_31_pinmux (pinmux_P8_31_default_pin)
debian@beaglebone:/opt/scripts/device/bone$ ./show-pins.pl | grep “P8.32”
P8.32a 134 C7 e fast rx down gpio8_15 ocp@44000000/P8_32_pinmux (pinmux_P8_32_default_pin)
P8.32b 208 D17 f fast Driver off ocp@44000000/P8_32_pinmux (pinmux_P8_32_default_pin)
I am not sure what to do to get the uart 4 peripheral to turn on as well as set the pin pad mux to where uart 4 is exposed. What do I have to do to get the device tree overlay to work properly without modifying the device tree itself? I also read that uboot needs to be configured properly to load the device tree overlay. Is uboot relevant to this question? What process should I follow to properly configure uart 4 using a device tree overlay?
Here is the output of the /opt/scripts/tools/version.sh script:
sudo ./version.sh
[sudo] password for debian:
git:/opt/scripts/:[674bb55e34e94e3837f4f55790c7d1a52c9e149f]
model:[BeagleBoard.org_BeagleBone_AI]
dogtag:[BeagleBoard.org Debian Buster IoT TIDL Image 2020-04-06]
bootloader:[microSD-(push-button)]:[/dev/mmcblk0]:[U-Boot SPL 2019.07-rc4-00001-g607b5b738b (Jul 06 2019 - 21:01:15 -0500)]:[location: dd MBR]
bootloader:[eMMC-(default)]:[/dev/mmcblk1]:[U-Boot SPL 2019.07-rc4-00001-g607b5b738b (Jul 06 2019 - 21:01:15 -0500)]:[location: dd MBR]
UBOOT: Booted Device-Tree:[am5729-beagleboneai.dts]
kernel:[4.19.94-ti-r73]
nodejs:[v10.24.0]
/boot/uEnv.txt Settings:
uboot_overlay_options:[enable_uboot_overlays=1]
uboot_overlay_options:[dtb_overlay=/lib/firmware/BBAI_UART4.dtbo]
pkg check: to individually upgrade run: [sudo apt install --only-upgrade ]
pkg:[bb-cape-overlays]:[4.14.20210821.0-0~buster+20210821]
pkg:[bb-customizations]:[1.20220325.0-0~buster+20220325]
pkg:[bb-usb-gadgets]:[1.20220316.1-0~buster+20220316]
pkg:[bb-wl18xx-firmware]:[1.20211222.2-0~buster+20211222]
pkg:[kmod]:[26-1]
pkg:[librobotcontrol]:[1.0.5-git20200715.0-0~buster+20200716]
pkg:[firmware-ti-connectivity]:[20190717-2rcnee1~buster+20200305]
groups:[debian : debian adm kmem dialout cdrom floppy audio dip video plugdev users systemd-journal bluetooth netdev i2c gpio pwm eqep remoteproc admin spi iio docker tisdk weston-launch xenomai cloud9ide]
cmdline:[console=ttyS0,115200n8 root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait coherent_pool=1M net.ifnames=0 rng_core.default_quality=100 quiet]
dmesg | grep remote
[ 15.190658] remoteproc remoteproc0: 58820000.ipu is available
[ 15.220758] remoteproc remoteproc1: 55020000.ipu is available
[ 15.236827] remoteproc remoteproc2: 40800000.dsp is available
[ 15.241983] remoteproc remoteproc3: 41000000.dsp is available
[ 15.356692] remoteproc remoteproc0: powering up 58820000.ipu
[ 15.356739] remoteproc remoteproc0: Booting fw image dra7-ipu1-fw.xem4, size 7051536
[ 15.356888] Modules linked in: omap_remoteproc virtio_rpmsg_bus remoteproc virtio virtio_ring usb_f_ncm usb_f_mass_storage usb_f_rndis u_ether libcomposite uio_pdrv_genirq uio cmemk(O) gpio_pisosr usbhid
[ 15.357802] [] (iommu_attach_device) from [] (rproc_boot+0x380/0x6ec [remoteproc])
[ 15.357926] [] (rproc_boot [remoteproc]) from [] (rproc_auto_boot_callback+0x20/0x2c [remoteproc])
[ 15.357998] [] (rproc_auto_boot_callback [remoteproc]) from [] (request_firmware_work_func+0x60/0x9c)
[ 15.377124] Modules linked in: omap_remoteproc virtio_rpmsg_bus remoteproc virtio virtio_ring usb_f_ncm usb_f_mass_storage usb_f_rndis u_ether libcomposite uio_pdrv_genirq uio cmemk(O) gpio_pisosr usbhid
[ 15.671921] [] (iommu_attach_device) from [] (rproc_boot+0x380/0x6ec [remoteproc])
[ 15.681407] [] (rproc_boot [remoteproc]) from [] (rproc_auto_boot_callback+0x20/0x2c [remoteproc])
[ 15.692254] [] (rproc_auto_boot_callback [remoteproc]) from [] (request_firmware_work_func+0x60/0x9c)
[ 15.833136] remoteproc remoteproc1: powering up 55020000.ipu
[ 15.841266] remoteproc remoteproc1: Booting fw image dra7-ipu2-fw.xem4, size 3751356
[ 16.365287] remoteproc remoteproc2: powering up 40800000.dsp
[ 16.378314] remoteproc remoteproc2: Booting fw image dra7-dsp1-fw.xe66, size 21014532
[ 16.394221] remoteproc remoteproc3: powering up 41000000.dsp
[ 16.425103] remoteproc remoteproc3: Booting fw image dra7-dsp2-fw.xe66, size 21014532
[ 16.595323] remoteproc remoteproc1: registered virtio0 (type 7)
[ 16.613123] remoteproc remoteproc1: remote processor 55020000.ipu is now up
[ 16.701317] remoteproc remoteproc3: registered virtio1 (type 7)
[ 16.707410] remoteproc remoteproc3: remote processor 41000000.dsp is now up
[ 16.769256] remoteproc remoteproc2: registered virtio2 (type 7)
[ 16.775377] remoteproc remoteproc2: remote processor 40800000.dsp is now up
[ 45.152898] remoteproc remoteproc4: 4b234000.pru is available
[ 45.224623] remoteproc remoteproc5: 4b238000.pru is available
[ 45.264537] remoteproc remoteproc6: 4b2b4000.pru is available
[ 45.292815] remoteproc remoteproc7: 4b2b8000.pru is available
dmesg | grep pru
[ 38.711202] pruss_uio_shmem 4b200000.pruss_shmem: Allocating gdev
[ 38.757475] pruss_uio_shmem 4b200000.pruss_shmem: Allocating info
[ 38.764344] pruss_uio_shmem 4b200000.pruss_shmem: Requesting resource
[ 38.837267] pruss_uio_shmem 4b200000.pruss_shmem: Mapping resource
[ 38.892605] pruss_uio_shmem 4b200000.pruss_shmem: Registering with uio driver
[ 39.018231] pruss_uio_shmem 4b200000.pruss_shmem: Saving platform data
[ 39.074100] pruss_uio_shmem 4b280000.pruss_shmem: Allocating gdev
[ 39.105150] pruss_uio_shmem 4b280000.pruss_shmem: Allocating info
[ 39.145370] pruss_uio_shmem 4b280000.pruss_shmem: Requesting resource
[ 39.243259] pruss_uio_shmem 4b280000.pruss_shmem: Mapping resource
[ 39.310698] pruss_uio_shmem 4b280000.pruss_shmem: Registering with uio driver
[ 39.421418] pruss_uio_shmem 4b280000.pruss_shmem: Saving platform data
[ 45.152898] remoteproc remoteproc4: 4b234000.pru is available
[ 45.193363] pru-rproc 4b234000.pru: PRU rproc node pru@4b234000 probed successfully
[ 45.224623] remoteproc remoteproc5: 4b238000.pru is available
[ 45.238641] pru-rproc 4b238000.pru: PRU rproc node pru@4b238000 probed successfully
[ 45.264537] remoteproc remoteproc6: 4b2b4000.pru is available
[ 45.280220] pru-rproc 4b2b4000.pru: PRU rproc node pru@4b2b4000 probed successfully
[ 45.292815] remoteproc remoteproc7: 4b2b8000.pru is available
[ 45.299535] pru-rproc 4b2b8000.pru: PRU rproc node pru@4b2b8000 probed successfully
dmesg | grep pinctrl-single
[ 1.009820] pinctrl-single 4a003400.pinmux: 282 pins, size 1128
dmesg | grep gpio-of-helper
[ 1.021819] gpio-of-helper 44000000.ocp:cape-universal: ready
lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 17ef:608c Lenovo
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
END
Here are some URLs that I referenced to come up with these steps: