nvidia nx平台UART错误调试
1. 前言
尝试使用Jetson TX2 NX在UART端口
(UART1,引脚203和205,/dev/ttyTHS2)
上通过MAVLink 2协议与ProfiCNC Cube Orange Flight Controller通信,
使用500000波特率
(测试了其他速率,从9600一直到921600)。
软件和硬件已经被验证可以在Jetson Nano上工作,
但是,由于需要一个更强大和性能更好的平台,它被选择采用TX2 NX。
已经更改了TX2 NX上的.dts文件,
以启用UART1端口并禁用所有其他UART接口,因为不需要它们
TX2 NX是运行在一个定制的载板
Tx和Rx线路上的信号在示波器观察,
面临的问题是,当在同一个运营商板上运行相同的软件时
经常会出现超时和数据传输错误
这在TX2 NX上会发生,但在Nano上不会发生
2. 问题梳理
监视“dmesg—follow”,在问题期间能看到任何日志输出吗?
这是一个随机的失败,还是可以重复的?
如果把NX的TX/RX(我假设你没有使用CTS/DTS)放在环回模式
TX和RX直接连接在一起,仍然有数据问题吗?
请共享dmesg日志以获取最终的内核错误或警告。
3. 测试
使用TX和RX引脚上的环回,TX2 NX有可能向UART TX线注入噪声。
3.1 TEST 1
在Jetson Nano和Jetson TX2 NX上测试了一个简单的命令,
echo "hi" > /dev/ttyTHSx.
在Jetson Nano上是ttyTHS1,在TX2 NX上是ttyTHS2。
首先,从TX插入一根电缆到RX引脚,
并向/dev/ttyTHS发送命令
这在终端上产生了无限的垃圾邮件
由于这个串行端口被循环回自身,
下面是运行"hi" > /dev/ttyS1
之后发生的事情
1. echo命令默认在消息的末尾添加一个换行符,因此“hi”+ LF发送到/dev/ttyS1
2. 因为设置了“onlcr”,串行设备将LF转换为CRLF,所以发送Tx线的物理消息是“hi”+ CRLF
3. 因为设置了“icrnl”,所以在Rx线上接收到的物理消息将CR转换为LF。因此,“cat”输出的消息是“hi”+ LFLF。
4. 因为设置了“echo”,所以在Rx(“hi”+ LFLF)上接收到的消息随后被发送回Tx线上。
5. 因为onlcr,“hi”+ LFLF变成了“hi”+ CRLFCRLF。
6. 因为icrnl,“hi”+ CRLFCRLF变成了“hi”+ LFLFLFLF
7. 由于echo的原因,“hi”+ LFLFLFLF被发送出Tx
为了修复这个问题
运行了以下命令:
stty -F /dev/ttyS1 -echo -onlcr
禁用" echo "可防止消息的无限循环,
禁用" onlcr "可防止串行设备在输出时将LF转换为CRLF。
现在,每次运行echo, cat都会收到一个“hi”(带有一个换行符!)
之后,能够通过UART发送单个消息。
在下面的图片中,可以找到已执行的测试的打印:
Jetson Nano (工作正常):
Jetson TX2 NX(它并没有产生无限的垃圾邮件,但它打印了大量的' command not found '):
查看kern.log,
似乎没有任何问题
Note:
在第一次测试中,我们意识到,
如果硬件环回连接在Jetsons关闭时,Jetson Nano将正常启动,
但TX2 NX将无法启动。
我们总是需要拔掉连接,启动TX2 NX,然后再次插入测试。
3.2 TEST 2
使用逻辑分析仪探测这些线
差异是清晰可见的
Jetson Nano:
Jetson TX2 NX:
在Jetson Nano上,可以看到预期的行为,
Jetson在UART行上写“hi”文本,然后静音,
在TX2 NX上写“hi”有一个小的等待,
然后在行上引入更多的数据
4. 使用minicom测试
测试了minicom和结果似乎是一样的,下面的截图:
5. 结论分析
从“命令未找到”的错误开始
如果正在使用一个绑定到串行控制台的串行设备,
那么可能会遇到这种情况
(或者如果意外地使用了一个有效的命令,例如“ls”,那么可能会返回一些意想不到的信息)。
“/dev”中的设备不是真正的文件,
实际上是假装成文件的内核驱动程序
(普通的文件读/写操作,结合IOCTL调用,使内核驱动程序可以像文件一样工作)
当且仅当“#”相同时,可以预期任何“/dev/ttyTHS#”与
相应的“/dev/ttyTHS#”是完全相同的UART硬件
不应该同时使用两个驱动程序,
如果与一个将ttyS绑定到串行控制台的ttyTHS对话,
那么这正是会发生的事情。
使用ttyS用于串行控制台的原因是,
早期的引导代码(在Linux内核运行之前)
只有遗留驱动程序,不具备使用支持dma的ttyTHS驱动程序的能力。
在引导期间,如果从一个ttyS切换到一个ttyTHS,串行控制台日志的连续性将会丢失,因此串行控制台都使用ttyS。
如果运行这个命令,那么任何带有“dialout”的“group”都只是一个串行UART,
但是带有“tty”的“group”都将用于串行控制台:
ls -l /dev/ttyS /dev/ttyTHS
另外注意,不同的tty可以用于不同的Jetson设备上的串行控制台。
UART是否有任何意外使用,它也是一个控制台?
供参考,UART设置的控制最初是通过设备树进行的。
针对特定设备的PINMUX电子表格是你设置不同默认值的方式。
然而,使用这个作为串行控制台的软件是一个独立的答案……
在U-Boot中可能需要做一个改变,Linux本身也需要做另一个改变。
关于禁用或更改串行控制台以使给定端口可用
(如果串行控制台不使用该端口,那么答案就更简单了),
- 分享
- 举报
-
浏览量:5907次2021-05-28 13:52:17
-
浏览量:4304次2021-07-22 14:48:32
-
浏览量:8590次2021-05-14 14:43:43
-
浏览量:9457次2021-05-26 14:17:15
-
浏览量:9413次2021-04-27 17:56:41
-
浏览量:7420次2021-05-11 17:51:48
-
浏览量:10853次2021-05-06 16:22:01
-
2021-05-06 16:03:00
-
浏览量:6415次2021-06-02 16:59:22
-
浏览量:5250次2021-05-10 17:48:42
-
浏览量:7088次2021-05-11 17:04:57
-
浏览量:9390次2021-05-25 17:31:40
-
浏览量:7912次2021-05-25 15:32:16
-
浏览量:7086次2021-05-20 16:37:42
-
浏览量:9224次2021-05-19 17:32:00
-
浏览量:7485次2021-05-20 17:08:14
-
2021-07-30 17:20:54
-
2021-04-23 15:54:21
-
2021-07-30 17:04:37
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
free-jdx
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明