Jetson Nano UART TX pins constantly incorrect voltage levels

Hi,

I have run into a problem using NVidia Jetson Nano’s UART port.

Running Ubuntu 18.04, I am using python to communicate (with mavlink messages with my flight controller), via the Nano’s UART (pins 6, 8 and 10).

Messages on the RX pin coming from the flight controller are read successfully by Nano, and I can see the voltage changing on the wire with an oscilloscope.

However I am not able to send any messages from the Nano to the flight controller, and I have tracked down the issue to the TX pin. Even if I am sending a message, it only outputs a 1.2V constant voltage (with some small noise), thus not delivering any message toward the flight controller. I believe it should output 3.3V with the voltage visibly dropping to 0V when sending messages. If the flight controller is not connected, the TX pin is on 1.5V voltage level.

I have disabled the nvgetty service as advised on other similar posts.

I have considered issues with the level shifter, too, like in this case, but I see the voltage remaining constant.

Could anyone help, what can be the reason for this?

Thanks in advance for any help!

hello benedek,

just for confirmation,
are those were pins of port-J41, 40-pin expansion header. pins 8 and 10, which are UART TX and RX.

Hi Jerry,
Yes, they are the pins of J41 pinout. 6 - ground, 8 - TX, 10 - RX

hello benedek,

it’s by default used as serial console, you may refer to Disable Console over UART.
please also check this thread as see-also, Change the nano debug serial port to ttyTHS1 - #4 by JerryChang.
thanks

Hi Jerry,

The serial console is enabled on ttyS0 as I know. dmesg log also confirms this. ttyTHS* are set as TEGRA_UART.

Regarding ttyTHS1, I have made more measurements with the oscilloscope on it, with and without SD card inserted to the Jetson (bot no device connected to UART). It turned out, sometimes the J41 UART TX pin is on 3.3V level, sometimes 1.5V level (might be half of the nominal voltage). And it varies in one boot, too, not between boots. Checking other ports (5V, 3.3V, I2C SD/SC) shows proper voltage levels, so the problem is not board-wide, not the oscilloscope and not the SD card firmware.

Also, the J50 UART port TX pin outputs 3.3V properly, so a solution might be to use that one, but that is occupied by the serial console. I have tried following the instructions you suggested, but could not find the file p3448-0000.conf.

I have also tried modifying the device tree as suggested here, bot I cannot edit bootargs file, even with sudo.

Do you have any advice why the J41 UART behaves like this, or how could I use the J50 UART port?

Thanks a lot,
Benedek

there it is.
$L4T_Sources/r32.5/Linux_for_Tegra/source/public/hardware/nvidia/soc/t210/kernel-dts/tegra210-soc/tegra210-soc-base.dtsi

        uartb: serial@70006040 {
                compatible = "nvidia,tegra114-hsuart";
                dma-names = "rx", "tx";

There is no such file as tegra210-soc-base.dtsi, or folder L4T_Sources for me, at least I cannot find it anywhere.

Do you have “source_sync.sh” located at:
~/nvidia/nvidia_sdk/JetPack_...version.../Linux_for_Tegra/
?

You might try running that. It uses git to download sources. When run it creates the “Linux_for_Tegra/sources/” directory and subdirectories. From that “sources /” subdirectory:
find . -name 'tegra210-soc-base.dtsi'

please download L4T Driver Package (BSP) Sources via L4T | NVIDIA Developer.