NVIDIA Jetson Xavier NX 使用uart0可以接收,发送失败。
UART0_TXD | 99 | UART2_TX | GPIO3_PX.04 | UB3_TXD |
---|---|---|---|---|
UART0_RXD | 101 | UART2_RX | GPIO3_PX.05 | UB3_RXD |
单独使用命令控制这两个gpio 476、477都是可以控制的,就是串口发送时TX线上没有数据,请问是什么原因,如何排查?
NVIDIA Jetson Xavier NX 使用uart0可以接收,发送失败。
UART0_TXD | 99 | UART2_TX | GPIO3_PX.04 | UB3_TXD |
---|---|---|---|---|
UART0_RXD | 101 | UART2_RX | GPIO3_PX.05 | UB3_RXD |
单独使用命令控制这两个gpio 476、477都是可以控制的,就是串口发送时TX线上没有数据,请问是什么原因,如何排查?
可以先查一下tx pinmux配置。
br
ChenJian
具体在哪个文件里查,能给指导一下吗?之前没有具体搞过这部分,应该用的是默认配置,我再核实一下,谢谢!!
rel-35 可以参考一下Jetson Module Adaptation and Bring-Up: Jetson AGX Xavier Series — Jetson Linux Developer Guide documentation
或者直接对一下寄存器也可以的。对应寄存器在TRM上都有描述的。
br
ChenJian
我从TRM里查到了 uart2对应的pin 、reg、 PADCTL
PIN REGISTER PADCTL I/O PAD
RXD PADCTL_UART_UART2_RX_0 PADCTL_UART_CFG2TMC_UART2_RX_0 BDPGLPHVIN_EFCR90_VXVDP1P1P1
TXD PADCTL_UART_UART2_TX_0 PADCTL_UART_CFG2TMC_UART2_TX_0 BDPGLPHVIN_EFCR90_VXVDP1P1P1
也找到了对应的地址,使用什么命令读出对应的寄存器数据?谢谢
You can try busybox devmem xxx
br
ChenJian
root@master:/home/nvidia# busybox devmem 0x0243d074
0x00000000
root@master:/home/nvidia# busybox devmem 0x0243d070
0x00000400
读了这俩寄存器好像也没发现异常
pinmux 看着是正确的,你确定接收数据正常吗?
另外你用的是自己的底板还是开发板?自己的底板看看有没有可能硬件被拉住了。
发送的时候看看UARTB 的clock有没有打开。
接收数据正常,发送不正常确实比较少见。
发送的时候TX pin是啥电平?
br
ChenJian
确认收数据是正常的
自己的底板,tx/rx除了上拉之外没有接任何器件,现在Tx一直是1.8v高电平,发送时用示波器测量没反应。
“发送的时候看看UARTB 的clock有没有打开。”这个怎么看,有测试点吗?
如果接收没问题,照理clock是没问题的。这个clock是内部clock,外头没法量测。
cat /sys/kernel/debug/bpmp/debug/clk/clk_tree |grep uartb
这个命令可以看内部clock的状态。
你的上拉电阻是多少欧的?你要不把上拉去掉试试。硬件同事告诉我UART TX是不需要上拉电阻的。
br
ChenJian
[sudo] password for nvidia:
root@master:/home/nvidia# cat /sys/kernel/debug/bpmp/debug/clk/clk_tree |grep uartb
uartb 0 204000000 0 0
上拉电阻为10K,去掉上拉电阻也发不来数据
这个clock在不工作的时候是不打开的。
你可以试试先执行
cat /dev/ttyTHS1
在另一个控制口再看下UARTB的clock,正常应该是有打开的,
root@tegra-ubuntu:/home/nvidia# cat /sys/kernel/debug/bpmp/debug/clk/clk_tree |grep uartb
uartb 0 153585 0 0
root@tegra-ubuntu:/home/nvidia# cat /dev/ttyTHS1 &
[1] 3282
root@tegra-ubuntu:/home/nvidia#
rep uartba-ubuntu:/home/nvidia# cat /sys/kernel/debug/bpmp/debug/clk/clk_tree |g
uartb 1 153585 1 1 vdd_core@635808
你能确认一下接收数据的时候的clock吗?波特率是多少?204M对于UART来说太高了一点。
这个UART口是接到M.2 KEY-E的,只能你们在自己的底板上测试。
另外你能试试另一个串口,UART1 (203,205),看看现象一致吗?
br
ChenJian
root@master:/home/nvidia# cat /sys/kernel/debug/bpmp/debug/clk/clk_tree |grep uartb
uartb 1 1841986 1 1 vdd_core@615222
波特率是115200
root@master:/home/nvidia# cat /sys/kernel/debug/bpmp/debug/clk/clk_tree |grep uarta
uarta 1 153585 1 1 vdd_core@615222
这个clock看起来是正常的。下面的默认应该是9600的。
你试过UARTA对应的TX pin有信号吗?
URTB你试试连续发送一长串的字符。会不会是TX FIFO设置问题,导致少数字符没有到达trigger点。
br
ChenJian
其它串口都试过,都能正常收发,发一个字符都可以正常发出,就这个uartB 不行。