Need help enabling uart on AI64

I am trying to enable uart on the beaglebone ai64.
Here are my steps:

  1. Pull device tree repo and checkout v5.10.x-ti-unified branch
  2. I see that there is already a BONE-UART1.dts and linked to the k3-j721e-beagleboneai64-bone-buses.dtsi for P9_24 and P9_26.
  3. Then make and make install_arm64
  4. Add “fdtoverlays /overlays/BONE-UART1.dtbo” to extlinux.conf
  5. Reboot then sudo beagle-version | grep UBOOT and see “UBOOT: Loaded Overlay:[BONE-UART1.kernel]”

After that I use my logic analyzer to see if P9_24 is outputting any signals and I don’t capture any output.
import serial
ser = serial.Serial(port=“/dev/ttyS4”, baudrate=9600, timeout=10)

When I also run setserial -g /dev/ttyS[0123456] I get output
/dev/ttyS0, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS1, UART: 8250, Port: 0x0000, IRQ: 15
/dev/ttyS2, UART: 8250, Port: 0x0000, IRQ: 30
/dev/ttyS3, UART: 8250, Port: 0x0000, IRQ: 31
/dev/ttyS4, UART: 8250, Port: 0x0000, IRQ: 32
/dev/ttyS5, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS6, UART: 8250, Port: 0x0000, IRQ: 33

I find it odd that they all have the same port address.

1 Like

Are you sure is it /dev/ttyS4 ?
Depending on the order of enumeration it might be different.

I think there is a udev script that creates symbolic links in /dev/bone / You can in a udev script refer to the hardware address to create a symbolic link that does not depend on enumeration order I think. I do something like that for my 6 CAN cape so the actual device listed in networks matchs the physical CAN ports used, rather than numbering from 0.

At worst case, try your python scripts on all UARTS and check the I/O.


Thanks for the help. I got it working with ttyS4 but the output is going to P9.28. Which is very odd since the documentation states nothing about uart for that pin.

Ok, how are you counting the pin numbers on the header ?

At the top of the P9 header there is a small 2x2 additional header with USB connections on. Do not count this when referencing P9.



Well, few month ago, I enabled uart on the beaglebone ai64 with same way as yours. Why don’t you check whether symlink is correct and status is enabled at the dts, dtsi file??


bone_uart_1: &main_uart2
/* tested with sudo agetty 115200 ttyS4 /
pinctrl-names = “default”;
pinctrl-0 = <
&P9_24_uart_pin /
uart2_txd /
&P9_26_uart_pin /
uart2_rxd */

symlink = “bone/uart/1”;
status = “okay”;

1 Like

Thanks! Thought it started at E’s.