I want to get 4 UART ports working via the P8 and P9 headers on my AI 64. I followed the steps here: How can I enable the 5 UARTs of the beaglebone AI-64? - #6 by benedict.hewson enabling just 4 out of the 5 with slightly different names and mappings.
I got things mostly working, however unfortunately only the RX pins of each port work. I.e., each of AI64’s uart ports can receive data from a serial but they can’t send anything back. I’ve tried several different serial programs (minicom, agetty) as well as just catting data directly to the bone/uart/ device to no avail. I tested the RX pin of my serial device (a USB to FTDI converter) and it works. I’ve also connected a logic analyzer to each UART’s TX pin and it is just stuck in a high state at 3.3V. I double-checked in the pin mux setting (number from 0-14) in the bone-buses.dtsi file and against the datasheet here https://www.ti.com/lit/ds/symlink/tda4vm.pdf and this spreadsheet Beagle bone AI64 pin mux - Google Sheets with no luck. I must be configuring all the device tree stuff correctly because otherwise the ports wouldn’t load under /dev/bone/uart (sudo beagle-version | grep UART shows all my uarts loading correctly), so there must be some mux or flag not being set correctly.
I’m using the bbai64-debian-11.8-minimal-arm64-2023-10-07-4gb.img downloaded from BB’s website released a year ago and have run
sudo /opt/u-boot/bb-u-boot-beagleboneai64/install-emmc.sh sudo /opt/u-boot/bb-u-boot-beagleboneai64/install-microsd.sh
to update uboot.
These are the relevant lines from my /opt/source/dtb-5.10-ti/src/arm64/k3-j721e-beagleboneai64-bone-buses.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 = “disabled”;
};
bone_uart_5: &main_uart5 {
symlink = “bone/uart/5”;
status = “disabled”;
pinctrl-names = “default”;
pinctrl-0 = <
&P8_37_uart_pin / uart5_txd /
&P8_38_uart_pin / uart5_rxd /
>;
};
bone_uart_6: &main_uart8 {
symlink = “bone/uart/6”;
status = “disabled”;
pinctrl-names = “default”;
pinctrl-0 = <
&P8_29_uart_pin / uart8_txd /
&P8_28_uart_pin / uart8_rxd /
>;
};
bone_uart_4: &main_uart4 {
symlink = “bone/uart/4”;
status = “disabled”;
pinctrl-names = “default”;
pinctrl-0 = <
&P9_38_uart_pin / uart7_txd /
&P9_37_uart_pin / uart7_rxd */
>;
};`
And this is the format of each of my BONE-UARTX.dts
files:
`// SPDX-License-Identifier: GPL-2.0
/*
Copyright (C) 2022 BeagleBoard.org - https://beagleboard.org/*
https://docs.beagleboard.io/latest/boards/capes/cape-interface-spec.html#uart*/
/dts-v1/;
/plugin/;
#include <dt-bindings/pinctrl/k3.h>
#include <dt-bindings/board/k3-j721e-bone-pins.h>
/*
Helper to show loaded overlays under: /proc/device-tree/chosen/overlays/*/
&{/chosen} {
overlays {
BONE-UART1.kernel = TIMESTAMP;
};
};
&bone_uart_1 {
/* tested with sudo agetty 115200 ttyS4 */
status = “okay”;
};`
Any thoughts on my this is? My best guess is the P8/9_XX() macros in the bone-buses.dtsi file are not actually setting the pinmodes or pinmuxes correctly. I am currently working on looking through the datasheet and /opt/source/dtb-5.10-ti/include/dt-bindings/board/k3-j721e-bone-pins.h
file to ensure everything matches up.