以最简单的方式从串口读取?

以最简单的方式从串口读取?

我有一个真RNG基于 USB 的硬件 RNG,我正在尝试在 Mac OS X 10.9.2 上读取其输出。我只需要单向沟通。

该设备说它显示为“CDC 虚拟串行端口”,实际上我将其视为/dev/tty.usbmodem1411.

我从来没能做到cat /dev/tty.usbmodem1411;当我这样做时,我根本没有任何输出。然而,我可以使用它minicompicocom从中读取它。使用picocom,它甚至可以使用--noinit --noreset选项,这表明我应该能够连接到cat该设备。

所以,我的问题/疑问:

  1. 为什么我不能使用cat该设备?
  2. 虽然它可以与minicom和一起使用picocom,但它仅在第一个会话中起作用:如果我关闭这些程序中的任何一个,然后重新打开它们,那么它们会读取大约 300 个字节并永远阻塞。如果我关闭并重新打开再次,他们无法读取任何内容。不过,当我拔下并重新插入 USB 设备时,第一次尝试它就又可以永久读取了。为什么会这样?这与 TrueRNG 文档中的引用有关吗? “通过清除虚拟串行端口上的 DTR 标志,数据流将停止。当设置 DTR 时,数据流将恢复。”
  3. 我想查看十六进制的随机数据。所以我尝试这个命令:picocom /dev/tty.usbmodem1411 | xxd -p。然而,输出似乎并不尊重换行符;只是回车。它会移动到下一行,而不回退到行首。我希望它是连续的。

以下是一些诊断:

% stty -a -f /dev/tty.usbmodem1411
speed 9600 baud; 0 rows; 0 columns;
lflags: -icanon -isig -iexten -echo -echoe -echok -echoke -echonl
        -echoctl -echoprt -altwerase -noflsh -tostop -flusho -pendin
        -nokerninfo -extproc
iflags: -istrip -icrnl -inlcr -igncr -ixon -ixoff -ixany -imaxbel -iutf8
        -ignbrk -brkint -inpck -ignpar -parmrk
oflags: -opost -onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb crtscts -dsrflow
        -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
        eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;

答案1

显然我需要使用/dev/cu.usbmodem1234而不是dev/tty.usbmodem1234.感谢解决方案制造该设备的公司。

相关内容