如何始终如一地从串行端口记录数据?

Posted

技术标签:

【中文标题】如何始终如一地从串行端口记录数据?【英文标题】:How do I log data from my serial ports consistently? 【发布时间】:2012-12-06 04:25:50 【问题描述】:

我需要处理两个自定义硬件,它们都通过两个串行连接发送调试数据。这些串行连接通过两个串行到 USB 转换器。串行转 USB 设备具有相同的供应商编号、设备编号,并且显然具有相同的序列号。

问题是:我想分别记录两个串行端口。自定义硬件需要不断重启,它们是否附加到同一个/dev/ttyUSB* 是完全随机的。我怎样才能让他们每次都选择相同的设备路径?我可以让它依赖于它插入的端口,但这似乎有点 hacky。

所以,我对 udevadm 的输出进行了比较,如下所示:

$ udevadm info -a -p `udevadm info -q path -n /dev/ttyUSB1` > usb1
$ udevadm info -a -p `udevadm info -q path -n /dev/ttyUSB2` > usb2
$ diff usb1 usb2

The output of the diff is long; you can see it here

Grepping for serial(两者相同):

$ udevadm info -a -p `udevadm info -q path -n /dev/ttyUSB2` | grep serial
SUBSYSTEMS=="usb-serial"
ATTRSserial=="0001"
ATTRSserial=="0000:00:1d.7"

其他信息:

我正在使用 PuTTY 从串行端口读取数据。 操作系统:

$ uname -a
Linux xxxxxxxx.localdomain 2.6.32-279.14.1.el6.x86_64 #1 SMP Tue Nov 6 23:43:09 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

【问题讨论】:

见askubuntu.com/questions/49910/… @KarlBielefeldt 我不想让它依赖于它插入的端口,但如果这是唯一的方法,我会接受它。 据我所知,如果序列号相同,唯一的方法。 我不认为如果它们是两个不同的设备,可以从调试流中确定哪个是哪个?如果是这样,我有一些 C 代码可能与您需要的非常相似。 @nick 如果序列号相同,也许你可以更改设备上的序列号? 【参考方案1】:

请检查usb-serial转换器是否基于ftdi芯片? (可以查看驱动文件名)

如果是这样;您有机会更改序列号,甚至是制造商信息。

http://www.ftdichip.com/Support/Utilities.htm 检查工具; MProg 和 FT_PROG 实用工具。

【讨论】:

我没有 ftdi 芯片,因为它使用 cp210x 驱动程序。然而,一些谷歌搜索告诉我有一个等效的 cp210x:silabs.com/support%20documents/technicaldocs/an144.pdf 我似乎这个芯片也支持它。 (cp2103)

以上是关于如何始终如一地从串行端口记录数据?的主要内容,如果未能解决你的问题,请参考以下文章

Raspberry Pi 卡住串行输出端口写入 Xbee

如何强制串行端口写入方法在发送数据之前等待线路清除?

如何确定 linux 串行端口上剩余的写入/输出缓冲区空间量?

从串行端口 (COM) 播放实时声音

在 Ubuntu 上使用 USB 到串行转换器进行串行通信

如何通过usb端口通信从arduino将串行数据写入phpmyadmin